12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- #include "AP_WindVane_ModernDevice.h"
- AP_WindVane_ModernDevice::AP_WindVane_ModernDevice(AP_WindVane &frontend) :
- AP_WindVane_Backend(frontend)
- {
- _speed_analog_source = hal.analogin->channel(ANALOG_INPUT_NONE);
- _temp_analog_source = hal.analogin->channel(ANALOG_INPUT_NONE);
- }
- void AP_WindVane_ModernDevice::update_speed()
- {
- float analog_voltage = 0.0f;
-
- float temp_ambient = 28.0f;
- if (is_positive(_frontend._speed_sensor_temp_pin.get())) {
- _temp_analog_source->set_pin(_frontend._speed_sensor_temp_pin.get());
- analog_voltage = _temp_analog_source->voltage_average();
- temp_ambient = (analog_voltage - 0.4f) / 0.0195f;
-
- temp_ambient = constrain_float(temp_ambient, 10.0f, 40.0f);
- }
- _speed_analog_source->set_pin(_frontend._speed_sensor_speed_pin.get());
- _current_analog_voltage = _speed_analog_source->voltage_average();
-
-
- analog_voltage = _current_analog_voltage - _frontend._speed_sensor_voltage_offset;
- if (is_negative(analog_voltage)) {
- analog_voltage = 0.0f;
- }
-
- speed_update_frontend(24.254896f * powf((analog_voltage / powf(temp_ambient, 0.115157f)), 3.009364f));
- }
- void AP_WindVane_ModernDevice::calibrate()
- {
- gcs().send_text(MAV_SEVERITY_INFO, "WindVane: rev P. zero wind voltage offset set to %.1f",double(_current_analog_voltage));
- _frontend._speed_sensor_voltage_offset.set_and_save(_current_analog_voltage);
- _frontend._calibration.set_and_save(0);
- }
|