| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- #include "foc/samples.h"
- #include "bsp/bsp.h"
- #include "bsp/adc.h"
- #include "math/fast_math.h"
- #include "os/os_task.h"
- #include "math/fix_math.h"
- typedef struct {
- sfix16En6_t value;
- sfix16En6_t filted_value;
- sfix16En10_t lowpass;
- }samples_t;
- static void sample_vbus(void);
- static void sample_throttle(void);
- static u32 sample_task(void *);
- static samples_t _vbus;
- static samples_t _throttle;
- void samples_init(void){
- _vbus.filted_value = i2sFix5(MAX_VBUS_VOLTAGE);
- _vbus.value = i2sFix5(MAX_VBUS_VOLTAGE);
- _vbus.lowpass = ftoSfix10(0.2f);
- _throttle.filted_value = i2sFix5(0);
- _throttle.value = i2sFix5(0);
- _throttle.lowpass = ftoSfix10(0.2f);
- sample_throttle();
- sample_vbus();
- shark_task_create(sample_task, NULL);
- }
- s16 get_vbus_sfix6(void) {
- return _vbus.filted_value;
- }
- float get_vbus_float(void) {
- return sfix6toF(_vbus.filted_value);
- }
- float get_throttle_sfix6(void) {
- return (_throttle.filted_value);
- }
- float get_throttle_float(void) {
- return sfix6toF(_throttle.filted_value);
- }
- static u32 sample_task(void *param) {
- sample_vbus();
- sample_throttle();
- return 0;
- }
- static void sample_vbus(void){
- s32 vadc = adc_sample_regular_channel(VBUS_V_CHAN, 16);
- s32 fix_vbus = ((float)vadc * ADC_REFERENCE_VOLTAGE * 45.0F / 4096.0F);//1:44
- s32 fix_filter = _vbus.filted_value;
- LowPass_Filter(fix_filter, ftoSfix6(fix_vbus), _vbus.lowpass); //sfix6 * sfix10
- _vbus.filted_value = fix_filter >> 10; // to sfix6
- }
- static void sample_throttle(void){
- s32 vadc = adc_sample_regular_channel(THROTTLE_CHAN, 16);
- s32 fix_V = ((float)vadc * ADC_REFERENCE_VOLTAGE * 45.0F / 4096.0F);//1:44
- s32 V_filter = _throttle.filted_value;
- LowPass_Filter(V_filter, ftoSfix6(fix_V), _vbus.lowpass); //sfix6 * sfix10
- _throttle.filted_value = V_filter >> 10; // to sfix6
- }
|