Last updated
Last updated
PMW3901 is an ASIC that computes the flow internally and provides a difference in pixels between each frame. It uses a tracking sensor that is similar to what you would find in a computer mouse, but adapted to work between 80 mm and infinity. The PMW3901 is used in several products, including some from Bitcraze, Tindie, Hex, Thone, and Alientek
This topic provides links to sensors that have been tested, along with information about mounting and PX4 configuration (this is common to all sensors of this type).
The following table shows some of the boards that use this sensor, listing the number of interfaces, the number of sensors, the input voltage, and the size. The board name links to board-specific sections that include wiring and purchase information.
An external rangefinder/distance sensor is required for the sensors that don't have a rangefinder (e.g. Tindie or Thone) and recommended for the other boards (as their range is quite limited).
The range needed is dependent on the application:
Indoor flight: ≈4 metres
Outdoor flight: ≥10 metres (e.g. to support the position control in environments where GPS might have issues)
PMW3901 modules have a small notch indicating the direction of the back of the board. The diagram shows the relative board and vehicle orientations that correspond to SENS_FLOW_ROT=0
(note the notch at the back).
The diagram above shows the Bitcraze board. You can use the notch to find the orientation of the other boards in the same way:
The PX4 configuration that is common to all PMW3901-based boards:
In addition for:
Individual flow sensors are further setup/configured as described in the sections below.
The pinout mapping for the Pixhawk SPI port to Bitcraze Flow Board is shown below (the port mapping is the same for all Pixhawk FMU versions).
To connect the bitcraze flow board to the Pixhawk, you will need to solder the wires of the Pixhawk SPI cable to the flow board. An SPI cable has 7 wires, from which you need to connect 6 to the flow board.
The following diagram shows how to wire the sensor to a Pixhawk 4.
The I2C wiring is the same for any other distance sensor. Simply connect the SLA, SLC, GND, and VCC to the corresponding (same) pins on the Pixhawk and the sensor.
An onboard microcontroller samples the three sensors and publishes two DroneCAN messages containing all the information needed for the flow and distance sensor calculations.
The diagram below shows how to connect the sensor to the Pixhawk 4 CAN bus.
UAVCAN_ENABLE=2
: DroneCAN sensors but no motor controllers.
UAVCAN_ENABLE=3
: DroneCAN sensors and motor controllers.
It comes with a 3D printed case and has a pre-soldered TX, Voltage, and GND 4 pin connector that can be plugged into the telemetry port of your flight controller, as shown below (for the Pixhawk 6C).
Any supported by PX4 may be used. The sensor can be mounted anywhere but must point down, and should be connected/configured as usual.
:::tip The PX4 team mainly tested using the on larger vehicles and the on smaller vehicles. :::
Flow modules are typically mounted near the centre of the vehicle. If mounted off-centre you will need to set offsets: .
The flow modules may be mounted with any yaw orientation relative to the vehicle body frame, but you must set the value used in .
The "zero" rotation is when the sensor board and X-axes are aligned (i.e. the "front" of the vehicle and the board are in the same direction), with rotations increasing in a clockwise direction.
explains how to fuse optical flow data in the EKF2 estimator and set position offsets for the mounting position of the flow sensor.
sets the orientation of the flow sensor relative to vehicle heading.
SPI-connected sensors you must set to 1
in order to enable the sensor driver.
UART-connected sensors (e.g. ThoneFlow-3901UY) you must by setting the parameter to the value of the connected UART port (for example, if you connected this sensor to TELEM 2
, you need to set SENS_TFLOW_CFG
to 102
).
DroneCAN sensors you must set UAVCAN_ENABLE
appropriately. For more information see (and the ).
The directly exposes the from the PMW3901 module.
The board also incorporates a distance sensor . This distance sensor is the VL53L0x ToF sensor from STMicroelectronics. The sensor range is minimal (2 metres) and will be reduced when flying in the sunlight. We therefore highly recommend that you use an .
and instructions are provided above.
The PMW3901, if connected to the SPI port on a Pixhawk 4, will automatically detect the Bitcraze flow module. This device's driver was explicitly written to be plugged into the SPI port using the chip select 1. No parameters will have to be configured other than the .
The Tindie exposes the SPI interface from the PMW3901 module exactly as on the Bitcraze module (see ).
The sensor doesn't have a distance sensor onboard, so you will need to use an .
and instructions are provided above.
The AlienTek exposes the SPI interface from the PMW3901 module in the same way as the Bitcraze module (see ).
The board also incorporates a distance sensor (we recommend that you use an ). You can wire the internal sensor to the Pixhawk I2C port A screenshot showing the I2C pins (SLA, SLC, GND, and VCC) is provided below.
and instructions are provided above.
The Hex is a tiny board containing the PMW3901 flow module, VL53L1X distance sensor, and an IMU (used to synchronize the flow data with the gyro data).
The board can be connected to any CAN port on any Pixhawk board (see ).
As for the other optical flow boards, we recommend that you use an .
and instructions are provided above.
In addition to any other configuration, you will need to set the parameter to either 2 or 3, depending on your system:
For general information about DroneCAN wiring and configuration see: .
The exposes a PMW3901 optical flow module via a UART interface.
The board doesn't include a distance sensor onboard, so you will need to use an .
The Thone exposes a PMW3901 optical flow module via a UART interface.
The board doesn't include a distance sensor onboard, so you will need to use an .
and instructions are provided above.
In addition, you must also set the parameter to the value of the UART port you connected (e.g. if the sensor is connected to TELEM 2
then set SENS_TFLOW_CFG=102
. For more information see .
Bitcraze
SPI
Y
Y
-
3 - 5
21x20
1
Tindie
SPI
Y
-
-
3 - 5
AxB
-
Hex
CAN
Y
Y
Y
3 - 5
AxB
4
Holybro
UART
Y
-
-
3 - 5
AxB
-
Thone
UART
Y
-
-
3 - 5
AxB
-
Alientek
SPI
Y
-
-
3.3 - 4.2
27.5x16.5
1
1 (VCC)
VCC
2 (SCK)
CLK
3 (MISO)
MISO
4 (MOSI)
MOSI
5 (CS1)
Do not connect
6 (CS2)
CS
7 (GND)
GND
Tindie
Hex Hereflow
Thone
Alientek (also has an arrow indicating the front!)