Browse Source

update

master
zhaohe 3 years ago
parent
commit
7451035e79
  1. 199
      APP/main.c
  2. 2
      APP/port.c
  3. 1172
      project_ozone/Listings/project_o.map
  4. 10
      project_ozone/project_o.uvgui.zel

199
APP/main.c

@ -29,7 +29,7 @@ static zkey_t s_keys[] = {
ZKEY_INIT("intervalkey", port_gpio_get_interval_key_state), //3 ZKEY_INIT("intervalkey", port_gpio_get_interval_key_state), //3
}; };
zkey_module_t key_module = ZMODULE_INIT(s_keys, onkey); zkey_module_t key_module = ZMODULE_INIT(s_keys, onkey);
static zsimple_timer_t zsimple_timer_mem[20]; //20
static zsimple_timer_t zsimple_timer_mem[10]; //10
zsimple_timer_t* debuglighttimer; zsimple_timer_t* debuglighttimer;
/*********************************************************************************************************************** /***********************************************************************************************************************
@ -200,6 +200,189 @@ void do_debug_light_state(zsimple_timer_t* handler) {
port_debug_set(debug_led_state); 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;
}
typedef struct {
float LastP; // 0.02
float Now_P; // 0
float out; // 0
float Kg; // 0
float Q; // 0.001
float R; // 0.543
} KFP; // Kalman Filter parameter
// 2.
KFP KFP_height = {0.02, 0, 0, 0, 0.03, 0.543};
/**
*
*@param KFP *kfp
* float input
*@return
*/
float kalmanFilter(KFP* kfp, float input) {
//k时刻系统估算协方差 = k-1 +
kfp->Now_P = kfp->LastP + kfp->Q;
// = k时刻系统估算协方差 / k时刻系统估算协方差 +
kfp->Kg = kfp->Now_P / (kfp->Now_P + kfp->R);
//k时刻状态变量的最优值 = + * -
kfp->out = kfp->out + kfp->Kg * (input - kfp->out); //
//: kfp->LastP
kfp->LastP = (1 - kfp->Kg) * kfp->Now_P;
return kfp->out;
}
float derivative(float now) {
static float last = 0;
float diff = now - last;
last = now;
return diff;
}
#if 0
void printf_ozone_freq_and_power_table() {
/**
* @brief
*/
float startfreq = 10 * 1000;
float stepfreq = 100;
float nowfreq = startfreq;
port_ozone_pwm_set_duty(nowfreq, 1000);
port_ozone_pwm_start();
systicket_delay_ms(10);
bool first = true;
while (true) {
port_ozone_pwm_set_duty(nowfreq, 3000);
systicket_delay_ms(2);
float power = get_ozone_power();
// printf("%f %f\n", nowfreq, freq);
// printf("{freq power:%f,%f}\r\n", nowfreq, power);
// printf("{freq power:%f,%f}\r\n", nowfreq, power);
if (first) {
// kalmanFilter(&KFP_height, power);
KFP_height.LastP = power;
first = false;
}
float afterfilter = kalmanFilter(&KFP_height, power);
printf("%f,%f,%f,%f\r\n", nowfreq, power, afterfilter,derivative(afterfilter)*10);
// printf("{power:%f}\r\n", power);
nowfreq += stepfreq;
if (nowfreq >= 40 * 1000) break;
}
port_ozone_pwm_set_duty(33000, 3000);
port_fan_set(true);
while (true) {
}
port_ozone_pwm_stop();
while (true) {
systicket_delay_ms(2);
float power = get_ozone_power();
float afterfilter = kalmanFilter(&KFP_height, power);
nowfreq+=50;
printf("%f,%f,%f\r\n", nowfreq, power, afterfilter);
}
}
#endif
#if 0
float kalmanFilter1(float input) {
static KFP kfp = {0.02, 0, 0, 0, 0.03, 0.543};
return kalmanFilter(&kfp, input);
}
float kalmanFilter2(float input) {
static KFP kfp = {0.02, 0, 0, 0, 0.03, 0.543};
return kalmanFilter(&kfp, input);
}
float kalmanFilter3(float input) {
static KFP kfp = {0.02, 0, 0, 0, 0.03, 0.543};
return kalmanFilter(&kfp, input);
}
float kalmanFilter4(float input) {
static KFP kfp = {0.02, 0, 0, 0, 0.03, 0.543};
return kalmanFilter(&kfp, input);
}
float 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 printf_ozone_freq_and_power_table() {
/**
* @brief
*/
uint32_t startfreq = 10 * 1000;
uint32_t stepfreq = 100;
uint32_t nowfreq = startfreq;
port_ozone_pwm_set_duty(nowfreq, 1000);
// port_ozone_pwm_stop();
port_ozone_pwm_start();
systicket_delay_ms(10);
bool first = true;
while (true) {
// printf("%d,%f,%f,%f,%f\r\n", nowfreq, //
// /*kalmanFilter1*/(set_pwm_and_get_power(nowfreq, 2000)), //
// /*kalmanFilter2*/(set_pwm_and_get_power(nowfreq, 4000)), //
// /*kalmanFilter3*/(set_pwm_and_get_power(nowfreq, 6000)), //
// /*kalmanFilter4*/(set_pwm_and_get_power(nowfreq, 8000)) //
// );
// printf("{power:%f}\r\n", power);
nowfreq += stepfreq;
if (nowfreq >= 40 * 1000) break;
}
port_ozone_pwm_set_duty(33000, 3500);
port_fan_set(true);
while (true) {
}
}
#endif
// void printf_ozone_freq_and_power_table() {
// /**
// * @brief
// */
// float startfreq = 20 * 1000;
// float stepfreq = 50;
// float nowfreq = startfreq;
// // port_ozone_pwm_set_duty(nowfreq, 1000);
// // port_ozone_pwm_start();
// // systicket_delay_ms(10);
// while (true) {
// // printf("{power:%f}\r\n", nowfreq);
// printf("%d,%d\r\n", (int)nowfreq,(int)nowfreq);
// systicket_delay_ms(100);
// nowfreq += stepfreq;
// // if (nowfreq >= 40 * 1000) break;
// }
// port_ozone_pwm_stop();
// }
void init_all_subdevice_state() { void init_all_subdevice_state() {
port_debug_set(false); port_debug_set(false);
port_fan_set(false); port_fan_set(false);
@ -230,15 +413,16 @@ int main(void) {
zsimple_timer_module_init(zsimple_timer_mem, ZARR_SIZE(zsimple_timer_mem), systicket_get_now_ms); // zsimple_timer_module_init(zsimple_timer_mem, ZARR_SIZE(zsimple_timer_mem), systicket_get_now_ms); //
zkey_init(&key_module); // zkey_init(&key_module); //
// port_fan_set(true);
// port_ozone_pwm_set_duty(30000, 10 * 1000);
// port_ozone_pwm_start();
debuglighttimer = zsimple_timer_alloc(); debuglighttimer = zsimple_timer_alloc();
zsimple_timer_trigger_static(debuglighttimer, 300, INFINITE_TIMES /*触发次数:*/, true, do_debug_light_state); zsimple_timer_trigger_static(debuglighttimer, 300, INFINITE_TIMES /*触发次数:*/, true, do_debug_light_state);
// lcs_status_light__set_color(/*r:*/ true, /*g:*/ false, /*b:*/ false);
/**
* @brief
* 20k起步50hz100ms计算功率
*/
printf_ozone_freq_and_power_table();
while (true) { while (true) {
// //
DO_IT_EACH_MS(KEY_PERIOD) { zkey_do_loop_in_each_period(NULL); } DO_IT_EACH_MS(KEY_PERIOD) { zkey_do_loop_in_each_period(NULL); }
@ -247,7 +431,6 @@ int main(void) {
zsimple_timer_schedule(); zsimple_timer_schedule();
lcs_shcedule(); lcs_shcedule();
process_countdwonevent(); process_countdwonevent();
printf("countddonw %d\n", thisDevice.countdonwnum_s);
// test_all_light();
// printf("countddonw %d\n", thisDevice.countdonwnum_s);
} }
} }

2
APP/port.c

@ -125,5 +125,5 @@ float port_adc_get_fan_power() {
} }
float port_adc_get_ozone_generator_power() { float port_adc_get_ozone_generator_power() {
float voltage = adc_get_voltage(GPIO_Pin_B8); float voltage = adc_get_voltage(GPIO_Pin_B8);
return voltage * voltage / 0.5; // u^2/R
return 12 * voltage / 0.5; // u^2/R
} }

1172
project_ozone/Listings/project_o.map
File diff suppressed because it is too large
View File

10
project_ozone/project_o.uvgui.zel

@ -101,10 +101,10 @@
<yPos>-1</yPos> <yPos>-1</yPos>
</MaxPosition> </MaxPosition>
<NormalPosition> <NormalPosition>
<Top>48</Top>
<Left>344</Left>
<Right>1789</Right>
<Bottom>954</Bottom>
<Top>241</Top>
<Left>207</Left>
<Right>1652</Right>
<Bottom>1147</Bottom>
</NormalPosition> </NormalPosition>
</WindowPosition> </WindowPosition>
<MDIClientArea> <MDIClientArea>
@ -1838,7 +1838,7 @@
<Name>Debug</Name> <Name>Debug</Name>
<Buttons> <Buttons>
<Len>2373</Len> <Len>2373</Len>
<Data>00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000</Data>
<Data>00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000</Data>
</Buttons> </Buttons>
<OriginalItems> <OriginalItems>
<Len>898</Len> <Len>898</Len>

Loading…
Cancel
Save