# UAVCAN Airspeed node
This board is a wrapper under MS4525DO airspeed sensor (opens new window) that allows to use it through the UAVCAN network.
It reads measurements from the sensor via i2c and publishes temperature and differential pressure.
# 1. UAVCAN interface
This node sends the following messages with fixed rate:
|1||publisher||uavcan.equipment.air_data.RawAirData (opens new window)|
|2||publisher||uavcan.equipment.power.CircuitStatus (opens new window)|
Beside required and highly recommended functions such as
GetNodeInfo this node also supports the following application-level functions:
|1||RPC-service||uavcan.protocol.param (opens new window)|
|2||RPC-service||uavcan.protocol.RestartNode (opens new window)|
|3||RPC-service||uavcan.protocol.GetTransportStats (opens new window)|
# 2. Hardware specification
# 3. Wire
This board has 3 connectors which are described in the table below.
|1||UCANPHY Micro (JST-GH 4)||Devices that deliver power to the bus are required to provide 4.9–5.5 V on the bus power line, 5.0 V nominal. Devices that are powered from the bus should expect 4.0–5.5 V on the bus power line. The current shall not exceed 1 A per connector.|
|2||6-pin Molex (502585-0670 (opens new window), 502578-0600 (opens new window))||This wire supports up to 100 V, 2 A per contact, but board's DC-DC is limited by 60V. We recommend using no more than 30V on this bus.|
|3||SWD||STM32 firmware updating using programmer-sniffer.|
# 4. Main function description
This node measures differential pressure and temperature with high rate (100 Hz by default) and publishes averaged data with a low rate (10 Hz should be enough for PX4 Autopilot otherwise it will anyway perform average filter). Publication and measurement rates might be configured using node parameters, but it is recommended to use default values.
According to MS4525DO datasheet (opens new window), the sensor has the following range of measured data:
- differential pressure is from -1 psi to +1 psi or from -6894.757 pa to +6894.757 pa.
- temperature is from -50 to +150 Celcius or from 223 to 423 Kelvin.
If we consider temperature ~288 Kelvin and pressure 101325 Pa according to the ISA model differential pressure interval above should be enough for up to 100 m/sec airspeed that is suitable for a wide area of small VTOL application.
# 5. Auxiliary functions description
# 5.1. Circuit status
It sends 2 uavcan.equipment.power.CircuitStatus (opens new window) messages with measured
The first message has
circuit_id=NODE_ID*10 + 0 and following 2 significant fields:
- voltage - is the
- error_flags - might have
ERROR_FLAG_UNDERVOLTAGEor non of them
The second message has
circuit_id=NODE_ID*10 + 1 and following 2 significant fields:
- voltage - is the
- error_flags -
ERROR_FLAG_UNDERVOLTAGEor non of them. There is no
ERROR_FLAG_OVERVOLTAGEflag because the expected max
Vinvoltage is unknown.
# 5.2. Calibration
Each differential pressure device has an offset in his measurement and requires a calibration before usage.
There are 2 ways how can you do a calibration:
- Normally, an autopilot may perfrorm his own calibration of this device. For example, PX4 stores
SENS_DPRES_OFFcalibration parameter in flash adds his value to each measurement from a differential pressure device before converting it to an airspeed. This way might be preffered for a normal user.
- Alternativelly, for example, if your autopilot doesn't support such calibration, you may perform internal calibration on the node side using uavcan parameters (see 5.2. Calibration). This also might be the only possible solution in case if your autopilot doesn't support individual calibration for each differential pressure sensor (PX4 stores a single parameter for all differential pressure devices).
Calibration on the node side
In general, calibration is done using 2 parameters:
airspeed_calibration_offsetis used for storing an offset in flash memory
airspeed_calib_requestis used for sending a request to start an automaticall calibration.
airspeed_calib_request parameter to 1 the node goes into the calibration mode for 10 seconds where it summarizes all measured differential pressures and in the end divides the sum by the number of measurements. The negative resulted averaged value is written into the
airspeed_calibration_offset parameter. This offset is added to the differential pressure of each measurement. During the calibration process, the node has
INITIALIZATION mode. After the initialization process, the node doesn't save parameters to the flash memory, you need to do it manually.
As an alternative, you may always manually set
# 5.3. Enable/disable
This function allows you to start and stop publishing via UAVCAN in real-time without physical disconnect.
# 5.4. Software version
GetNodeInfo response contains a software version that allows you to differentiate one firmware from another. See
Node Properties window in
uavcan gui tool.
# 5.5. Hardware version
Not implemented yet.
# 5.6. Hardware unique ID
GetNodeInfo response contains hardware unique ID that allows you to differentiate one board from another. See
Node Properties window in
uavcan gui tool.
# 6. Parameters
The list of parameters is shown in the picture below:
|0||ID||You should manually choose the node ID. On the bus, a few nodes with the same ID should not exist.|
|1||airspeed_enable||0 - disable data publication, 1 - enable|
|2||airspeed_pub_period||Period of message publication|
|3||airspeed_measurement_period||Period of data measurement|
|4||airspeed_calibration_offset||The published differential pressure = measured pressure + this offset|
|5||airspeed_calibration_request||Automatic calibration request. See this feature description for details.|
|6||enable_5v_check||Set ERROR status if 5V voltage is out of range 4.5 - 5.5 V|
|7||enable_vin_check||Set ERROR status if Vin voltage is less than 4.5 V|
|8||name||If specified value != 0, use custom node name. There are no custom names yet, but it might be extended if you need it.|
# 7. Led indication
There is an internal led that may allow you to understand possible problems. It blinks from 1 to 10 times within 4 seconds. By counting a number of blinks you can define the current status of the node.
|Number of blinks||Uavcan health||Description|
|1||OK||Everything is ok.|
|2||OK||There is no RawCommand at least for the last 0.5 seconds (it's ok, just in case).|
|3||WARNING||This node can't see any other nodes in UAVCAN network, check your cables.|
|4||ERROR||There is a problem with circuit voltage, look at the circuit status message to get details. It may happen when you power it from SWD since it has only 3.3 V, otherwise, be careful with the power supply. This check might be turned off using params.|
|5||CRITICAL||There is a problem with the periphery initialization level. Probably you load the wrong firmware.|
# 8. Usage example on a table
A good way to get familiar with this device is to try it on the table using uavcan_gui_tool (opens new window).
Below you can see an example of a message when a device is on a table and there is no wind.
You can create a real-time plot with raw sensor data. Here it is:
As you can see on the plot, the measurement has an offset. Here it is ~76 Pascal. Although this offset may lead to wrong airspeed estimation on the autopilot level, there are few ways how can you take it into account. See 5.2. Calibration for details.
# 8.1. Calibration using gui_tool
Calibration might be started using
uavcan_gui_tool. The alrorithm is following:
- Open a
Node Propertieswindow (the same as on picrure in 6. Parameters)
airspeed_calibration_requestparameter to 1
- The node will go ibto
INITIALIZATIONmode for 10 second. You will see ib on main window
- When a node go into
OPERATIONmode, you need to press
Store allbutton to save a calibration parameter.
- (optional) Reboot the device to be sure that the calibration offset is saved successfully.
The calibration is done and device is ready for usage.
# 9. UAV usage example
This node has been tested several times on the VTOL application with autopilot based on PX4 (custom version based on 1.12).
!!!PX4 usage issue!!! All current stable versions (1.12.) have a bug with wrong filter settings for uavcan differential pressure sensor reported in this issue (opens new window). This bug is well described and ways of how to fix it are suggested. The fix is made on master branch and it is most probably that it will appear in further 1.13 version. For those who is based on 1.12. version, it is might be an option to make a small (few lines) fix in your custom firmware and it will be fine.
# 9.1. PX4 Parameters
Normally, to use it with your PX4-based Autopilot you need to set up the following parameters:
ASPD_DO_CHECKS(recommended, but is not necessary),
SENS_DPRES_OFF(this value is added to every differential pressure measurement before airspeed estimation; PX4 calibration process automatically write to this parameter)
# 9.2. QGC node monitoring
Typically, during the first usage, it is recommended play with this node using
MAVLink console by typing few simple commands:
uavcan statusallows you to see the list of online nodes. You should be able to see this node.
listener differential_pressurereturns the raw value of the sensor
uorb top differential_pressurereturns the publish rate of the sensor
listener airspeedwill output the airspeed estimated by this node
# 9.3. Calibration using QGC
As in said in 5.2. Calibration there are 2 ways of calibration process. Here is described how to perform calibration of this node using QGC.
To perform calibration on the sensor side from QGC you should type:
uavcan param list 74- check is calibration feature is supported
uavcan param set 74 airspeed_calib_request 1to start calibration
uavcan param save 74- to save new calibration parameters.
Here 74 is our node id. It has a calibration offset -69.
After that, you need to manually write 0 to
# 9.4. Flight log example
Here you may see the screenshot from the log from the real flight in FW mode.