You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

97 lines
2.2 KiB

#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();
//
}