#include "ozone_control_service.h" #include "frequency_sweep_service.h" #if 0 float get_ozone_power() { float powersum = 0; for (size_t i = 0; i < 20; i++) { powersum += port_adc_get_ozone_generator_power(); } return powersum / 20; } static float mf_set_pwm_and_get_power(uint32_t freq, uint32_t dutyns) { port_ozone_pwm_set_duty(freq, dutyns); systicket_delay_ms(2); float power1 = get_ozone_power(); return power1; } void frequency_sweep(uint32_t startfreq, uint32_t step, uint32_t endfreq, uint16_t dutyns) { /** * @brief 扫频 */ s_power_table_startfreq = startfreq; s_frequency_sweep_step = step; s_power_table_endfreq = endfreq; uint16_t nowfreq = startfreq; bool firstloop = true; KFP KFPConfig = {0.02, 0, 0, 0, 0.03, 0.543}; port_ozone_pwm_set_duty(startfreq, dutyns); port_ozone_pwm_start(); systicket_delay_ms(3); printf("frequency_sweep:startfreq:%d, step:%d, endfreq:%d, dutyns:%d\n", startfreq, step, endfreq, dutyns); for (size_t i = 0; i < ARRAY_SIZE(s_power_table); i++) { nowfreq = startfreq + i * s_frequency_sweep_step; float power = mf_set_pwm_and_get_power(nowfreq, dutyns); if (firstloop) { firstloop = false; KFPConfig.LastP = power; } float afterfileter = kalmanFilter(&KFPConfig, power); setpower(nowfreq, power); /** * @brief dumptable */ printf("%d,%f,%f\n", nowfreq, s_power_table[i], afterfileter); if (nowfreq >= s_power_table_endfreq) { break; } } port_ozone_pwm_stop(); } float find_resonant_frequency(uint32_t startfreq, uint32_t endfreq) { /** * @brief */ float minpower = 0; } #endif static struct { bool working; } this; void ozone_control_init(ozone_control_config_t* config) { /** * @brief 扫描频率 */ while (!frequency_sweep_is_finished()) { } } void ozone_control_set_level(level_t level); void ozone_control_start() { frequency_sweep_start( /*startfreq:*/ 20000, // /*step :*/ 100, // /*endfreq :*/ 40000, // /*dutyns :*/ 5000 // ); this.working = true; } void ozone_control_stop() {} void ozone_control_schedule() { // frequency_sweep_schedule(); // }