Browse Source

更新风扇功率检测逻辑

master
zhaohe 3 years ago
parent
commit
ecbc205558
  1. 26
      APP/main.c
  2. 18
      APP/service/ozone_control_service.c
  3. 2
      APP/service/ozone_control_service.h
  4. 867
      project_ozone/Listings/project_o.map
  5. 10
      project_ozone/project_o.uvgui.zel

26
APP/main.c

@ -34,6 +34,13 @@ zkey_module_t key_module = ZMODULE_INIT(s_keys, onkey);
/*********************************************************************************************************************** /***********************************************************************************************************************
* =============================================================================================================== * * =============================================================================================================== *
***********************************************************************************************************************/ ***********************************************************************************************************************/
static float mf_fan_get_power() {
float fanpower = 0;
for (size_t i = 0; i < 20; i++) {
fanpower += port_adc_get_fan_power();
}
return fanpower / 20;
}
/*********************************************************************************************************************** /***********************************************************************************************************************
* ===================================================COUNT_COMPUTE=================================================== * * ===================================================COUNT_COMPUTE=================================================== *
@ -313,7 +320,7 @@ void trigger_exception(error_t exception) {
printf("=\terror :%d\n", errorToStr(exception)); printf("=\terror :%d\n", errorToStr(exception));
/*Power*/ /*Power*/
printf("= Power :\n"); printf("= Power :\n");
printf("=\tfanpower :%f\n", ozone_control_get_fan_power());
printf("=\tfanpower :%f\n", mf_fan_get_power());
printf("=\tozonepower :%f\n", ozone_control_get_ozone_power()); printf("=\tozonepower :%f\n", ozone_control_get_ozone_power());
/*ThisDevice*/ /*ThisDevice*/
printf("= ThisDevice :\n"); printf("= ThisDevice :\n");
@ -359,12 +366,20 @@ void exception_monitor_schedule() {
* ================================================================================================= * * ================================================================================================= *
*****************************************************************************************************************/ *****************************************************************************************************************/
if (port_fan_get()) { if (port_fan_get()) {
float fanpower = ozone_control_get_fan_power();
if (fanpower > 3 || fanpower < 0.2) {
float fanpower = mf_fan_get_power();
/**
* @brief 1.50.3
*
* http://192.168.1.3:3000/project_ozone_generator/doc/src/branch/master/ref/-.png
* http://192.168.1.3:3000/project_ozone_generator/doc/src/branch/master/ref/.png
*
*/
if (fanpower > 3 || fanpower < 0.6) {
printf("fanpower error: %f\n", fanpower); printf("fanpower error: %f\n", fanpower);
trigger_exception(kfanIsBroken); trigger_exception(kfanIsBroken);
return; return;
} }
printf("ozonepower %f,fanpower %f\n", ozone_control_get_ozone_power(), fanpower);
} }
/***************************************************************************************************************** /*****************************************************************************************************************
* ========================================================================================= * * ========================================================================================= *
@ -398,6 +413,8 @@ void exception_monitor_schedule() {
} }
} }
void dumpfanpower() { printf("%f\n", mf_fan_get_power()); }
int main(void) { int main(void) {
SystemInit(); // SystemInit(); //
DeviceClockAllEnable(); // DeviceClockAllEnable(); //
@ -437,6 +454,9 @@ int main(void) {
this_module_schedule(); this_module_schedule();
DO_IT_EACH_MS(3000) { exception_monitor_schedule(); } DO_IT_EACH_MS(3000) { exception_monitor_schedule(); }
END(); END();
// port_fan_set(true);
// DO_IT_EACH_MS(100) { dumpfanpower(); }
// END();
// //
// if (0x01 == IWDT_GetFlagStatus()) IWDT_Clear(); // if (0x01 == IWDT_GetFlagStatus()) IWDT_Clear();

18
APP/service/ozone_control_service.c

@ -77,13 +77,6 @@ static float __mf_get_ozone_power() {
return powersum / 10; return powersum / 10;
} }
static float mf_fan_get_power() {
float fanpower = 0;
for (size_t i = 0; i < 20; i++) {
fanpower += port_adc_get_fan_power();
}
return fanpower / 20;
}
static void mf_get_ozone_power_reset_filter() { KFPConfig.LastP = __mf_get_ozone_power(); } static void mf_get_ozone_power_reset_filter() { KFPConfig.LastP = __mf_get_ozone_power(); }
static float mf_get_ozone_power() { return kalmanFilter(&KFPConfig, __mf_get_ozone_power()); } static float mf_get_ozone_power() { return kalmanFilter(&KFPConfig, __mf_get_ozone_power()); }
@ -162,15 +155,15 @@ static state_machine_state_t* processWorkingState(state_machine_t* machine, stat
printf("----------start working--------\n"); printf("----------start working--------\n");
} else if (event == TIME_EVENT) { } else if (event == TIME_EVENT) {
float nowpower = mf_get_ozone_power(); float nowpower = mf_get_ozone_power();
float fanpower = mf_fan_get_power();
// float fanpower = mf_fan_get_power();
if (s_workingstate.adjustedToTheProperPower) { if (s_workingstate.adjustedToTheProperPower) {
/** /**
* ([expertpower+window,expertpower-window]) * ([expertpower+window,expertpower-window])
*/ */
// printf("change freq [ no ],freq %d, ozonePower %f-->%f fanPower:%f\n", s_workingstate.nowfreq, nowpower, get_expect_power(), fanpower);
if (nowpower < (get_expect_power() - EXPECT_POWER_WINDONWS) || // if (nowpower < (get_expect_power() - EXPECT_POWER_WINDONWS) || //
nowpower > (get_expect_power() + EXPECT_POWER_WINDONWS)) { nowpower > (get_expect_power() + EXPECT_POWER_WINDONWS)) {
s_workingstate.adjustedToTheProperPower = false; s_workingstate.adjustedToTheProperPower = false;
printf("change freq [ no ],freq %d, ozonePower %f-->%f fanPower:%f\n", s_workingstate.nowfreq, nowpower, get_expect_power(), fanpower);
if (nowpower < get_expect_power()) { if (nowpower < get_expect_power()) {
s_workingstate.changefreqdirection = true; s_workingstate.changefreqdirection = true;
} else { } else {
@ -185,7 +178,7 @@ static state_machine_state_t* processWorkingState(state_machine_t* machine, stat
if (nowpower < get_expect_power()) { if (nowpower < get_expect_power()) {
s_workingstate.nowfreq += 25; s_workingstate.nowfreq += 25;
if (s_workingstate.nowfreq > MAX_FREQ) s_workingstate.nowfreq = MAX_FREQ; if (s_workingstate.nowfreq > MAX_FREQ) s_workingstate.nowfreq = MAX_FREQ;
printf("change freq [ up ],freq %d, ozonePower %f-->%f fanPower:%f\n", s_workingstate.nowfreq, nowpower, get_expect_power(), fanpower);
printf("change freq [ up ],freq %d, ozonePower %f-->%f\n", s_workingstate.nowfreq, nowpower, get_expect_power());
port_ozone_pwm_set_duty(s_workingstate.nowfreq, kconst_pwm_work_dutyns); port_ozone_pwm_set_duty(s_workingstate.nowfreq, kconst_pwm_work_dutyns);
} else { } else {
// printf("reach %f->%f\n", nowpower, get_expect_power()); // printf("reach %f->%f\n", nowpower, get_expect_power());
@ -195,7 +188,7 @@ static state_machine_state_t* processWorkingState(state_machine_t* machine, stat
if (nowpower > get_expect_power()) { if (nowpower > get_expect_power()) {
s_workingstate.nowfreq -= 25; s_workingstate.nowfreq -= 25;
if (s_workingstate.nowfreq < s_workingstate.resonant_frequency) s_workingstate.nowfreq = s_workingstate.resonant_frequency; if (s_workingstate.nowfreq < s_workingstate.resonant_frequency) s_workingstate.nowfreq = s_workingstate.resonant_frequency;
printf("change freq [down],freq %d, ozonePower %f-->%f fanPower:%f\n", s_workingstate.nowfreq, nowpower, get_expect_power(), fanpower);
printf("change freq [down],freq %d, ozonePower %f-->%f\n", s_workingstate.nowfreq, nowpower, get_expect_power());
port_ozone_pwm_set_duty(s_workingstate.nowfreq, kconst_pwm_work_dutyns); port_ozone_pwm_set_duty(s_workingstate.nowfreq, kconst_pwm_work_dutyns);
} else { } else {
// printf("reach %f->%f\n", nowpower, get_expect_power()); // printf("reach %f->%f\n", nowpower, get_expect_power());
@ -266,5 +259,4 @@ ozone_control_working_state_t* ozone_control_get_working_state() { return &s_wor
float ozone_control_get_ozone_power() { return mf_get_ozone_power(); } float ozone_control_get_ozone_power() { return mf_get_ozone_power(); }
float ozone_control_get_expect_power() { return get_expect_power(); } float ozone_control_get_expect_power() { return get_expect_power(); }
float ozone_control_get_fan_power() { return mf_fan_get_power(); }
// float ozone_control_get_fan_power() { return mf_fan_get_power(); }

2
APP/service/ozone_control_service.h

@ -46,7 +46,7 @@ ozone_control_working_state_id_t ozone_control_get_working_state_id();
ozone_control_working_state_t* ozone_control_get_working_state(); ozone_control_working_state_t* ozone_control_get_working_state();
float ozone_control_get_ozone_power(); float ozone_control_get_ozone_power();
float ozone_control_get_fan_power();
// float ozone_control_get_fan_power();
float ozone_control_get_expect_power(); float ozone_control_get_expect_power();
/*********************************************************************************************************************** /***********************************************************************************************************************

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

10
project_ozone/project_o.uvgui.zel

@ -3606,9 +3606,9 @@
<ActiveTab>4</ActiveTab> <ActiveTab>4</ActiveTab>
<Doc> <Doc>
<Name>..\APP\main.c</Name> <Name>..\APP\main.c</Name>
<ColumnNumber>40</ColumnNumber>
<TopLine>308</TopLine>
<CurrentLine>339</CurrentLine>
<ColumnNumber>5</ColumnNumber>
<TopLine>315</TopLine>
<CurrentLine>340</CurrentLine>
<Folding>1</Folding> <Folding>1</Folding>
<ContractedFolders></ContractedFolders> <ContractedFolders></ContractedFolders>
<PaneID>0</PaneID> <PaneID>0</PaneID>
@ -3643,8 +3643,8 @@
<Doc> <Doc>
<Name>..\APP\service\ozone_control_service.c</Name> <Name>..\APP\service\ozone_control_service.c</Name>
<ColumnNumber>0</ColumnNumber> <ColumnNumber>0</ColumnNumber>
<TopLine>245</TopLine>
<CurrentLine>270</CurrentLine>
<TopLine>1</TopLine>
<CurrentLine>1</CurrentLine>
<Folding>1</Folding> <Folding>1</Folding>
<ContractedFolders></ContractedFolders> <ContractedFolders></ContractedFolders>
<PaneID>0</PaneID> <PaneID>0</PaneID>

Loading…
Cancel
Save