|
|
@ -200,13 +200,6 @@ void do_debug_light_state(zsimple_timer_t* handler) { |
|
|
|
port_debug_set(debug_led_state); |
|
|
|
} |
|
|
|
|
|
|
|
float get_ozone_power() { |
|
|
|
float powersum = 0; |
|
|
|
for (size_t i = 0; i < 5; i++) { |
|
|
|
powersum += port_adc_get_ozone_generator_power(); |
|
|
|
} |
|
|
|
return powersum / 5; |
|
|
|
} |
|
|
|
#if 0 |
|
|
|
|
|
|
|
typedef struct { |
|
|
@ -383,6 +376,163 @@ void printf_ozone_freq_and_power_table() { |
|
|
|
// port_ozone_pwm_stop(); |
|
|
|
// } |
|
|
|
|
|
|
|
float s_power_table[200]; |
|
|
|
void setpower(uint16_t freq, float power) { |
|
|
|
/** |
|
|
|
* @brief |
|
|
|
* [0]->20k |
|
|
|
* [1]->20.1k |
|
|
|
*/ |
|
|
|
uint16_t index = (freq - 20000) / 100; |
|
|
|
if (index < 0) return; |
|
|
|
if (index >= ARRAY_SIZE(s_power_table)) return; |
|
|
|
s_power_table[index] = power; |
|
|
|
} |
|
|
|
float getpower(uint16_t freq) { |
|
|
|
/** |
|
|
|
* @brief |
|
|
|
* [0]->20k |
|
|
|
* [1]->20.1k |
|
|
|
*/ |
|
|
|
uint16_t index = (freq - 20000) / 100; |
|
|
|
if (index < 0) return 0; |
|
|
|
if (index >= ARRAY_SIZE(s_power_table)) return 0; |
|
|
|
return s_power_table[index]; |
|
|
|
} |
|
|
|
|
|
|
|
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; |
|
|
|
} |
|
|
|
float set_pwm_and_get_power(uint32_t freq, uint32_t dutyns) { |
|
|
|
port_ozone_pwm_set_duty(freq, dutyns); |
|
|
|
systicket_delay_ms(3); |
|
|
|
float power1 = get_ozone_power(); |
|
|
|
return power1; |
|
|
|
} |
|
|
|
void create_power_table() { |
|
|
|
/** |
|
|
|
* @brief 打印臭氧发生器和频率之间的关系 |
|
|
|
*/ |
|
|
|
port_ozone_pwm_set_duty(20000, 3000); |
|
|
|
port_ozone_pwm_start(); |
|
|
|
systicket_delay_ms(3); |
|
|
|
|
|
|
|
for (size_t i = 0; i < 200; i++) { |
|
|
|
nowfreq = 20000 + i * 100; |
|
|
|
float power = set_pwm_and_get_power(nowfreq, 3000); |
|
|
|
setpower(nowfreq, power); |
|
|
|
} |
|
|
|
port_ozone_pwm_stop(); |
|
|
|
printf("%d,%f\r\n", nowfreq, power); |
|
|
|
} |
|
|
|
void printf_ozone_freq_and_power_table() { |
|
|
|
/** |
|
|
|
* @brief 打印臭氧发生器和频率之间的关系 |
|
|
|
*/ |
|
|
|
for (size_t i = 0; i < 200; i++) { |
|
|
|
nowfreq = 20000 + i * 100; |
|
|
|
float power = getpower(nowfreq); |
|
|
|
printf("%d,%f\r\n", nowfreq, power); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void checkdevice() { |
|
|
|
/** |
|
|
|
* @brief |
|
|
|
* |
|
|
|
* |
|
|
|
* 上电:3us扫频 |
|
|
|
* 1.取35k->40k时候的功率,功率均比40k的要大,则二级电路损坏 |
|
|
|
* 2.取35k->40k时候的功率,功率都十分小,则一级电路断路 |
|
|
|
* 3.从25k到30k扫频,如果25k到35k的点绝大多数都比25k时候的大,则谐振点异常 |
|
|
|
* 4. |
|
|
|
* |
|
|
|
* 开机设备自检查: |
|
|
|
* |
|
|
|
* 指标1 35k到40k,比40k功率大的点的占比 |
|
|
|
* 指标2 35k到40k,功率平均值 |
|
|
|
* 指标3 25k到30k,功率比25k大的点的占比 |
|
|
|
* 指标4 25k到30k, 功率最小的点 |
|
|
|
* |
|
|
|
* |
|
|
|
* 设备异常检查: |
|
|
|
* 频率调节到达极限,也无法匹配上频率 |
|
|
|
* |
|
|
|
*/ |
|
|
|
printf("checkdevice\r\n"); |
|
|
|
float indicator_1 = 0; |
|
|
|
float indicator_2 = 0; |
|
|
|
float indicator_3 = 0; |
|
|
|
uint16_t resonant_frequency = 0; |
|
|
|
|
|
|
|
{ |
|
|
|
//指标1 35k到40k,比40k功率大的点的占比 |
|
|
|
int count = 0; |
|
|
|
size_t i = 0; |
|
|
|
for (;; i++) { |
|
|
|
int nowfreq = 35000 + i * 100; |
|
|
|
float power = getpower(nowfreq); |
|
|
|
if (power > getpower(40000)) { |
|
|
|
count++; |
|
|
|
} |
|
|
|
if (nowfreq >= 40 * 1000) { |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
indicator_1 = count * 1.0 / i * 100; |
|
|
|
} |
|
|
|
|
|
|
|
{ |
|
|
|
// 指标2 35k到40k,功率平均值 |
|
|
|
int count = 0; |
|
|
|
float sumpower = 0; |
|
|
|
size_t i = 0; |
|
|
|
for (;; i++) { |
|
|
|
int nowfreq = 35000 + i * 100; |
|
|
|
float power = getpower(nowfreq); |
|
|
|
sumpower += power; |
|
|
|
} |
|
|
|
indicator_2 = sumpower / i; |
|
|
|
} |
|
|
|
|
|
|
|
// 指标3 25k到30k,功率比25k大的点的占比 |
|
|
|
{ |
|
|
|
int count = 0; |
|
|
|
size_t i = 0; |
|
|
|
for (;; i++) { |
|
|
|
int nowfreq = 25000 + i * 100; |
|
|
|
float power = getpower(nowfreq); |
|
|
|
if (power > getpower(25000)) { |
|
|
|
count++; |
|
|
|
} |
|
|
|
if (nowfreq >= 30 * 1000) { |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
indicator_3 = count * 1.0 / i * 100; |
|
|
|
} |
|
|
|
|
|
|
|
// 指标4 25k到30k, 功率最小的点 |
|
|
|
{ |
|
|
|
size_t i = 0; |
|
|
|
float minpower = getpower(25000); |
|
|
|
uint16_t minpowerfreq = 25000; |
|
|
|
for (;; i++) { |
|
|
|
int nowfreq = 25000 + i * 100; |
|
|
|
float power = getpower(nowfreq); |
|
|
|
if (power < minpower) { |
|
|
|
minpower = power; |
|
|
|
minpowerfreq = nowfreq; |
|
|
|
} |
|
|
|
} |
|
|
|
resonant_frequency = minpowerfreq; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void init_all_subdevice_state() { |
|
|
|
port_debug_set(false); |
|
|
|
port_fan_set(false); |
|
|
@ -422,7 +572,7 @@ int main(void) { |
|
|
|
*/ |
|
|
|
|
|
|
|
printf_ozone_freq_and_power_table(); |
|
|
|
|
|
|
|
|
|
|
|
while (true) { |
|
|
|
//按键扫描逻辑 |
|
|
|
DO_IT_EACH_MS(KEY_PERIOD) { zkey_do_loop_in_each_period(NULL); } |
|
|
|