Browse Source

Remove duplicite data from RPM message and enable logging of RPM message

sbg
Roman Dvořák 5 years ago committed by GitHub
parent
commit
b02e209507
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 3
      msg/rpm.msg
  2. 10
      src/drivers/rpm/pcf8583/PCF8583.cpp
  3. 16
      src/drivers/rpm/pcf8583/parameters.c

3
msg/rpm.msg

@ -1,7 +1,4 @@ @@ -1,7 +1,4 @@
uint64 timestamp # time since system start (microseconds)
float32 indicated_frequency_hz # indicated rotor Frequency in Hz
float32 estimated_accurancy_hz # estimated accurancy in Hz
float32 indicated_frequency_rpm # indicated rotor Frequency in Revolution per minute
float32 estimated_accurancy_rpm # estimated accurancy in Revolution per minute

10
src/drivers/rpm/pcf8583/PCF8583.cpp

@ -127,15 +127,13 @@ void PCF8583::RunImpl() @@ -127,15 +127,13 @@ void PCF8583::RunImpl()
_count = 0;
}
float indicated_frequency = (float)diffCount / _param_pcf8583_magnet.get() / ((float)diffTime / 1000000);
float estimated_accurancy = 1 / (float)_param_pcf8583_magnet.get() / ((float)diffTime / 1000000);
float indicated_rpm = (float)diffCount / _param_pcf8583_magnet.get() / ((float)diffTime / 1000000) * 60.f;
float estimated_accurancy = 1 / (float)_param_pcf8583_magnet.get() / ((float)diffTime / 1000000) * 60.f;
// publish
rpm_s msg{};
msg.indicated_frequency_hz = indicated_frequency;
msg.indicated_frequency_rpm = indicated_frequency * 60.f;
msg.estimated_accurancy_hz = estimated_accurancy;
msg.estimated_accurancy_rpm = estimated_accurancy * 60.f;
msg.indicated_frequency_rpm = indicated_rpm;
msg.estimated_accurancy_rpm = estimated_accurancy;
msg.timestamp = hrt_absolute_time();
_rpm_pub.publish(msg);
}

16
src/drivers/rpm/pcf8583/parameters.c

@ -33,6 +33,7 @@ @@ -33,6 +33,7 @@
/**
* PCF8583 rotorfreq (i2c) pool interval
* How often the sensor is readout.
*
* @reboot_required true
* @group Sensors
@ -45,30 +46,31 @@ PARAM_DEFINE_INT32(PCF8583_POOL, 1000000); @@ -45,30 +46,31 @@ PARAM_DEFINE_INT32(PCF8583_POOL, 1000000);
*
* @reboot_required true
* @group Sensors
* @value 80 0x50
* @value 81 0x51
* @value 80 Address 0x50 (80)
* @value 81 Address 0x51 (81)
*/
PARAM_DEFINE_INT32(PCF8583_ADDR, 80);
/**
* PCF8583 rotorfreq (i2c) counter reset value
* PCF8583 rotorfreq (i2c) pulse reset value
*
* Internal device counter is reset to 0 when overun this value,
* counter is able to store upto 6 digits
* reset of counter takes some time - measurement with reset has worse accurancy
* reset of counter takes some time - measurement with reset has worse accurancy.
* 0 means reset counter after every measurement.
*
* @reboot_required true
* @group Sensors
* @value 0 - reset avter every measurement
*/
PARAM_DEFINE_INT32(PCF8583_RESET, 500000);
/**
* PCF8583 rotorfreq (i2c) magnet count
* PCF8583 rotorfreq (i2c) pulse count
*
* Nmumber of signals per rotation of rotor
* Nmumber of signals per rotation of actuator
*
* @reboot_required true
* @group Sensors
* @min 1
*/
PARAM_DEFINE_INT32(PCF8583_MAGNET, 2);

Loading…
Cancel
Save