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