Current sensor
It is very easy to get the Paparazzi system working with a current sensor.
Examples are the one from Sparkfun (AttoPilot Voltage and Current Sense Breakout Current sensor or a linear hall-effect device such as the Allegro ACS755. The Novak Sentry current sensor is based on the ACS755LCB-100 hall-effect sensor and has a range of 100A.
Hardware
Typically, the current sensor is used to measure the current flowing through the main battery (rather than the motor). Connect the + and - pole of the sensor through the battery red lead. The + and - have to be soldered directly. A wire is connected to the "VI" pin on the Sparkfun breakout board. It must have a voltage between 0 and 3.3V. On a TWOG v1 or Tiny v2 board, you connect the current sense output wire ("IA" on the Sparkfun sensor) to the ADC_3 (or ADC_4) pin.
On the Novak Sentry current sensor, the red wire is connected to +5 volts. The black wire is ground. The yellow wire is the output (40mV/amp. 0.6v=0amps, 5.0v=110amps) and is connected to the ADC_3 (or ADC_4) pin.
Airframe integration
In the BAT section of the airframe file add these lines:
<define name="ADC_CHANNEL_CURRENT" value="ADC_3" /> <define name="MilliAmpereOfAdc(adc)" value="(88*adc)"/>
and remove the line:
<define name="MILLIAMP_AT_FULL_THROTTLE" value="12000" unit="mA"/>
The correct multiplier for the raw measurement conversion depends on the current sensor. The Sparkfun sensor returns a linear voltage of 0 V - 3.3 V and at 90.15 A it reaches the maximum of 3.3 V. The TWOG v1 or Tiny v2 have a A/D converter with 10-bit precision (1024 different values) to represent the voltage. So you can calculate the multiplier with the following formula:
1000 / precision * A_at_max_voltage
For the Sparkfun sensor, the precision is 1024 and A_at_max_voltage is 90.15 => 1000/1024*90.15 = 88.037
For the ACS755LCB-100 sensor, there is a 0.6 volts offset. At 3.3v, the current is 67.5A. The formula is thus: value="(80.55*(adc-185))"
In the makefile section, -DUSE_ADC_3 (or -DUSE_ADC_4) must be added (-DUSE_ADC_0, -DUSE_ADC_1 and -DUSE_ADC_2 are used for the IR sensors):
ap.CFLAGS += -DADC -DUSE_ADC_0 -DUSE_ADC_1 -DUSE_ADC_2 -DUSE_ADC_3 ap.srcs += $(SRC_ARCH)/adc_hw.c
Display on Ground Control Station (GCS)
Use the Messages application to show it.
The total energy consumed during the flight (in mAh) is sent in the "BAT" message.
The actual current flowing through the sensor (in mA) is sent in the "fbw_status" message.
You can display the energy or current on the GCS by just dragging and dropping them on the 2d map.
Current greater than 32 Amperes
The int16 data type is used to store the current value. This gives a current range of +/- 32.768 Amps.
If high-power/large motors are employed, currents can be much larger than this. To overcome this limitation, the data type can be changed to int32 in the following files:
/conf/messages.xml /sw/airborne/main_fbw.c /sw/airborne/main_fbw.h /sw/airborne/main_ap.c /sw/airborne/inter_mcu.h
The aircraft has to be re-compiled for these changes to take effect.