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=================================================== *
@ -313,7 +320,7 @@ void trigger_exception(error_t exception) {
printf("=\terror :%d\n", errorToStr(exception));
/*Power*/
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());
/*ThisDevice*/
printf("= ThisDevice :\n");
@ -359,12 +366,20 @@ void exception_monitor_schedule() {
* ================================================================================================= *
*****************************************************************************************************************/
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);
trigger_exception(kfanIsBroken);
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) {
SystemInit(); //
DeviceClockAllEnable(); //
@ -437,6 +454,9 @@ int main(void) {
this_module_schedule();
DO_IT_EACH_MS(3000) { exception_monitor_schedule(); }
END();
// port_fan_set(true);
// DO_IT_EACH_MS(100) { dumpfanpower(); }
// END();
//
// 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;
}
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 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");
} else if (event == TIME_EVENT) {
float nowpower = mf_get_ozone_power();
float fanpower = mf_fan_get_power();
// float fanpower = mf_fan_get_power();
if (s_workingstate.adjustedToTheProperPower) {
/**
* ([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) || //
nowpower > (get_expect_power() + EXPECT_POWER_WINDONWS)) {
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()) {
s_workingstate.changefreqdirection = true;
} else {
@ -185,7 +178,7 @@ static state_machine_state_t* processWorkingState(state_machine_t* machine, stat
if (nowpower < get_expect_power()) {
s_workingstate.nowfreq += 25;
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);
} else {
// 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()) {
s_workingstate.nowfreq -= 25;
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);
} else {
// 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_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();
float ozone_control_get_ozone_power();
float ozone_control_get_fan_power();
// float ozone_control_get_fan_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>
<Doc>
<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>
<ContractedFolders></ContractedFolders>
<PaneID>0</PaneID>
@ -3643,8 +3643,8 @@
<Doc>
<Name>..\APP\service\ozone_control_service.c</Name>
<ColumnNumber>0</ColumnNumber>
<TopLine>245</TopLine>
<CurrentLine>270</CurrentLine>
<TopLine>1</TopLine>
<CurrentLine>1</CurrentLine>
<Folding>1</Folding>
<ContractedFolders></ContractedFolders>
<PaneID>0</PaneID>

Loading…
Cancel
Save