| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- #include "foc/samples.h"
- #include "bsp/bsp.h"
- #include "bsp/adc.h"
- #include "math/fast_math.h"
- #include "os/co_task.h"
- #include "os/timer.h"
- typedef struct {
- float value;
- float filted_value;
- float lowpass;
- }samples_t;
- static void sample_vbus(void);
- static void sample_gas(void);
- static void sample_timer_handler(timer_t *);
- static samples_t _vbus;
- static samples_t _gas;
- static timer_t sample_timer = TIMER_INIT(sample_timer, sample_timer_handler);
- void samples_init(void){
- _vbus.filted_value = MAX_VBUS_VOLTAGE;
- _vbus.value = MAX_VBUS_VOLTAGE;
- _vbus.lowpass = 0.2f;
- _gas.filted_value = 0.0f;
- _gas.value = 0.0f;
- _gas.lowpass = 0.2f;
- sample_vbus();
- sample_gas();
- timer_post(&sample_timer, 1);
- }
- float get_vbus_sample(void) {
- return _vbus.filted_value;
- }
- float get_gas_sample(void) {
- return _gas.filted_value;
- }
- static void sample_timer_handler(timer_t *timer) {
- sample_vbus();
- sample_gas();
- timer_post(&sample_timer, 5);
- }
- static void sample_vbus(void){
- u32 vadc = adc_sample_regular_channel(VBUS_V_CHAN, 16);
- _vbus.value = ((float)vadc)/(4096.0f) * ADC_REFERENCE_VOLTAGE * 45 / 1000; //1:44
- LowPass_Filter(_vbus.filted_value, _vbus.value, _vbus.lowpass);
- }
- static void sample_gas(void){
- #ifdef GD32_DEMO
- #else
- u32 vadc = adc_sample_regular_channel(HANDLERBAR_CHAN, 16);
- _gas.value = vadc * ADC_REFERENCE_VOLTAGE /4096.0f;
- LowPass_Filter(_gas.filted_value, _gas.value, _gas.lowpass);
- #endif
- }
|