mirror of https://github.com/ArduPilot/ardupilot
PX4: support getting servorail voltage from ORB
This commit is contained in:
parent
8010d7fd78
commit
3a3cecf5ff
|
@ -13,6 +13,8 @@
|
||||||
#include <nuttx/analog/adc.h>
|
#include <nuttx/analog/adc.h>
|
||||||
#include <nuttx/config.h>
|
#include <nuttx/config.h>
|
||||||
#include <arch/board/board.h>
|
#include <arch/board/board.h>
|
||||||
|
#include <uORB/topics/battery_status.h>
|
||||||
|
#include <uORB/topics/servorail_status.h>
|
||||||
|
|
||||||
#define ANLOGIN_DEBUGGING 0
|
#define ANLOGIN_DEBUGGING 0
|
||||||
|
|
||||||
|
@ -164,6 +166,7 @@ void PX4AnalogIn::init(void* machtnichts)
|
||||||
hal.scheduler->panic("Unable to open " ADC_DEVICE_PATH);
|
hal.scheduler->panic("Unable to open " ADC_DEVICE_PATH);
|
||||||
}
|
}
|
||||||
_battery_handle = orb_subscribe(ORB_ID(battery_status));
|
_battery_handle = orb_subscribe(ORB_ID(battery_status));
|
||||||
|
_servorail_handle = orb_subscribe(ORB_ID(servorail_status));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -208,10 +211,10 @@ void PX4AnalogIn::_timer_tick(void)
|
||||||
for (uint8_t j=0; j<PX4_ANALOG_MAX_CHANNELS; j++) {
|
for (uint8_t j=0; j<PX4_ANALOG_MAX_CHANNELS; j++) {
|
||||||
PX4::PX4AnalogSource *c = _channels[j];
|
PX4::PX4AnalogSource *c = _channels[j];
|
||||||
if (c == NULL) continue;
|
if (c == NULL) continue;
|
||||||
if (c->_pin == PX4_ANALOG_BATTERY_VOLTAGE_PIN) {
|
if (c->_pin == PX4_ANALOG_ORB_BATTERY_VOLTAGE_PIN) {
|
||||||
c->_add_value(battery.voltage_v / PX4_VOLTAGE_SCALING);
|
c->_add_value(battery.voltage_v / PX4_VOLTAGE_SCALING);
|
||||||
}
|
}
|
||||||
if (c->_pin == PX4_ANALOG_BATTERY_CURRENT_PIN) {
|
if (c->_pin == PX4_ANALOG_ORB_BATTERY_CURRENT_PIN) {
|
||||||
// scale it back to voltage, knowing that the
|
// scale it back to voltage, knowing that the
|
||||||
// px4io code scales by 90.0/5.0
|
// px4io code scales by 90.0/5.0
|
||||||
c->_add_value(battery.current_a * (5.0f/90.0f) / PX4_VOLTAGE_SCALING);
|
c->_add_value(battery.current_a * (5.0f/90.0f) / PX4_VOLTAGE_SCALING);
|
||||||
|
@ -221,6 +224,27 @@ void PX4AnalogIn::_timer_tick(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_ARCH_BOARD_PX4FMU_V2
|
||||||
|
// check for new servorail data on FMUv2
|
||||||
|
if (_servorail_handle != -1) {
|
||||||
|
struct servorail_status_s servorail;
|
||||||
|
if (orb_copy(ORB_ID(servorail_status), _servorail_handle, &servorail) == OK &&
|
||||||
|
servorail.timestamp != _servorail_timestamp) {
|
||||||
|
_servorail_timestamp = servorail.timestamp;
|
||||||
|
for (uint8_t j=0; j<PX4_ANALOG_MAX_CHANNELS; j++) {
|
||||||
|
PX4::PX4AnalogSource *c = _channels[j];
|
||||||
|
if (c == NULL) continue;
|
||||||
|
if (c->_pin == PX4_ANALOG_ORB_SERVO_VOLTAGE_PIN) {
|
||||||
|
c->_add_value(servorail.voltage_v / PX4_VOLTAGE_SCALING);
|
||||||
|
}
|
||||||
|
if (c->_pin == PX4_ANALOG_ORB_SERVO_VRSSI_PIN) {
|
||||||
|
c->_add_value(servorail.rssi_v / PX4_VOLTAGE_SCALING);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AP_HAL::AnalogSource* PX4AnalogIn::channel(int16_t pin)
|
AP_HAL::AnalogSource* PX4AnalogIn::channel(int16_t pin)
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
#include <AP_HAL_PX4.h>
|
#include <AP_HAL_PX4.h>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <uORB/uORB.h>
|
#include <uORB/uORB.h>
|
||||||
#include <uORB/topics/battery_status.h>
|
|
||||||
|
|
||||||
#define PX4_ANALOG_MAX_CHANNELS 16
|
#define PX4_ANALOG_MAX_CHANNELS 16
|
||||||
|
|
||||||
|
@ -17,6 +16,8 @@
|
||||||
#define PX4_ANALOG_ORB_BATTERY_CURRENT_PIN 101
|
#define PX4_ANALOG_ORB_BATTERY_CURRENT_PIN 101
|
||||||
#elif defined(CONFIG_ARCH_BOARD_PX4FMU_V2)
|
#elif defined(CONFIG_ARCH_BOARD_PX4FMU_V2)
|
||||||
#define PX4_ANALOG_VCC_5V_PIN 4
|
#define PX4_ANALOG_VCC_5V_PIN 4
|
||||||
|
#define PX4_ANALOG_ORB_SERVO_VOLTAGE_PIN 102
|
||||||
|
#define PX4_ANALOG_ORB_SERVO_VRSSI_PIN 103
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
class PX4::PX4AnalogSource : public AP_HAL::AnalogSource {
|
class PX4::PX4AnalogSource : public AP_HAL::AnalogSource {
|
||||||
|
@ -57,7 +58,9 @@ public:
|
||||||
private:
|
private:
|
||||||
int _adc_fd;
|
int _adc_fd;
|
||||||
int _battery_handle;
|
int _battery_handle;
|
||||||
|
int _servorail_handle;
|
||||||
uint64_t _battery_timestamp;
|
uint64_t _battery_timestamp;
|
||||||
|
uint64_t _servorail_timestamp;
|
||||||
PX4::PX4AnalogSource* _channels[PX4_ANALOG_MAX_CHANNELS];
|
PX4::PX4AnalogSource* _channels[PX4_ANALOG_MAX_CHANNELS];
|
||||||
uint32_t _last_run;
|
uint32_t _last_run;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue