Browse Source

添加功率打印

master
zhaohe 3 years ago
parent
commit
3e6d0228b0
  1. 82
      APP/current_through_mos_capturer.c
  2. 97
      APP/main.c
  3. 44
      APP/pwm.c
  4. 2
      APP/pwm.h
  5. 3
      README.md
  6. 1177
      project_ozone/Listings/project_o.map
  7. 180
      project_ozone/project_o.uvgui.zel
  8. 45
      project_ozone/project_o.uvopt
  9. 5
      project_ozone/project_o.uvproj

82
APP/current_through_mos_capturer.c

@ -0,0 +1,82 @@
#include "port.h"
#include "systick.h"
static ADC_InitStruType x;
static GPIO_InitSettingType y;
static bool adccapture_error = false;
static uint16_t prv_adc_get_value() {
ErrorStatus status = ADC_SoftStart();
adccapture_error = false;
if (status != SUCCESS) {
adccapture_error = true;
return 0;
}
uint32_t inticket = get_sys_ticket();
while (ADC_GetConvStatus() != RESET) {
if (port_haspassedms(inticket) > 10) {
adccapture_error = true;
return 0;
}
}
uint16_t adcv = ADC_GetConvValue();
ADC_SoftStop();
return adcv ;
}
static void prv_adc_pb9_init() {
y.Signal = GPIO_Pin_Signal_Analog; //
y.Dir = GPIO_Direction_Input; //
y.Func = GPIO_Reuse_Func0;
// x.CHS设置adc采集的通道每个引脚对应一个通道
GPIO_Init(GPIO_Pin_B9, &y);
//Tadclk=1/(PCLK/32)
x.CLKS = ADC_CLKS_PCLK;
x.CLKDIV = ADC_CLKDIV_1_32; /* ADC时钟源预分频 */
//*3.3/4096=
x.VREF_SEL = ADC_VREF_SEL_0; /* 内部参考电压2.048v,仅设置内部参考电压为多少 */
x.VREFP = ADC_VREFP_VDD; /* 选择芯片的工作电压VDD,这个是设置adc具体是要哪个电压来做参考adc的参考电压为多少 */
x.VREFN = ADC_VREFN_VSS; /* 负向参考电压选择 */
x.CHS = ADC_CHS_AIN4;
// x.CHS = ADC_CHS_AIN8;
x.SMPS = ADC_SMPS_SOFT; /* AD采样模式为软件控制 */
//st*2+1(Tadclk)=1.743us
x.ST = 0; /* AD硬件采样时间选择 */
x.BITSEL = ADC_BITSEL_8; /* AD分辨率12位 */
ADC_Init(&x);
prv_adc_get_value();
}
extern uint32_t getCNT();
extern uint32_t getTOP();
uint16_t capture(int timeoff) {
static bool inited = false;
if (inited == false) {
prv_adc_pb9_init();
inited = true;
}
uint16_t expectCNTBegin = getTOP() / 100.0 * timeoff;
uint16_t expectCNTEnd = getTOP() / 100.0 * (timeoff + 1);
// printf("%d %d , %d\n", timeoff, expectCNTBegin, expectCNTEnd);
int icount = 0;
while (true) {
volatile uint16_t countnow = T16Nx_GetCNT1(T16N0);
// printf("%d\n",countnow);
for (size_t i = 0; i < icount % 10; i++) {
}
icount++;
if (countnow >= expectCNTBegin && countnow < expectCNTEnd) {
break;
}
}
uint16_t v = prv_adc_get_value();
return v;
}

97
APP/main.c

@ -10,15 +10,15 @@
/***********************************************************************************************************************
* =========================================================================================================== *
***********************************************************************************************************************/
void onkey(zkey_t* key, zkey_state_t key_state){}
void onkey(zkey_t* key, zkey_state_t key_state);
/***********************************************************************************************************************
* =========================================================================================================== *
***********************************************************************************************************************/
static zkey_t s_keys[] = {
ZKEY_INIT("timerkey", port_gpio_get_timer_key_state),
ZKEY_INIT("gearskey", port_gpio_get_gears_key_state),
ZKEY_INIT("intervalkey", port_gpio_get_interval_key_state),
ZKEY_INIT("timerkey", port_gpio_get_timer_key_state), //2
ZKEY_INIT("gearskey", port_gpio_get_gears_key_state), //1
ZKEY_INIT("intervalkey", port_gpio_get_interval_key_state), //3
ZKEY_INIT("switchkey", port_gpio_get_switch_key_state),
};
zkey_module_t key_module = ZMODULE_INIT(s_keys, onkey);
@ -46,11 +46,29 @@ uint8_t rx_data; //接收中断缓冲
uint8_t rx_count = 0; //
uint32_t uart0_lastreceive_ticket = 0;
// int freqhz = 29300;
int freqhz = 34450;
int dutyus = 4;
void ozone_pwm_control_update();
/***********************************************************************************************************************
* =======================================================HOOK======================================================== *
***********************************************************************************************************************/
bool hook_get_ozone_generator_working_flag() { return ozone_pwm_control_hardware_is_enable(); }
int hook_get_autoshutdown_timecount() { return g_auto_shutdown_countdown_s; }
void onkey(zkey_t* key, zkey_state_t key_state) {
if (key == &s_keys[2] /*左3*/ && zks_falling_edge == key_state) {
freqhz += 50;
ozone_pwm_control_update();
}
if (key == &s_keys[0] /*左2*/ && zks_falling_edge == key_state) {
freqhz -= 50;
ozone_pwm_control_update();
}
}
/***********************************************************************************************************************
* =================================================INTERNAL_FUNCTION================================================= *
***********************************************************************************************************************/
@ -85,12 +103,6 @@ float get_duty_by_freq_and_valid_time(uint32_t freq, uint32_t us) {
return duty;
}
//int freqhz = 29300;
int freqhz = 29200;
int dutyus = 6;
void ozone_pwm_control_update() {
printf("freqhz:%d duty:%d us\n", freqhz, dutyus);
set_pwm_modbul_freq_duty2(freqhz, get_duty_by_freq_and_valid_time(freqhz, dutyus));
@ -190,6 +202,8 @@ float power_filter(float nowpower, float factor) {
return now;
}
uint16_t capture(int timeoff);
int main(void) {
HRC_Config(Enable, SCU_HRC_48M, Enable); //SCU_CLK_HRC
SystemInit();
@ -227,34 +241,25 @@ int main(void) {
port_led_b_set(debug_led_state);
}
END()
static float fan_w = 0;
static float ozone_w = 0;
// DO_IT_EACH_MS(1 * 5) { //
// float pa2_now = adc_get_value_pa2();
// float pb8_now = adc_get_value_pb8();
// float pb9_now = adc_get_value_pb9();
DO_IT_EACH_MS(1 * 5) { //
// float pa2 = adc_get_value_pa2_filter(0.01);
// float pb8 = adc_get_value_pb8_filter(0.01);
// float pb9 = adc_get_value_pb9_filter(0.001);
float pa2_now = adc_get_value_pa2();
float pb8_now = adc_get_value_pb8();
// static int count = 0;
// static float sumpower = 0;
// float device_total_power1 = (pb9) / 0.2 /*采样电阻*/ * 12;
// printf("{plotter:%f}\r\n", device_total_power1);
float pa2 = adc_get_value_pa2_filter(0.005);
float pb8 = adc_get_value_pb8_filter(0.005);
// // sumpower += device_total_power1;
// // count++;
// // if (count >= 500) {
// // count = 0;
// // sumpower = 0;
// // }
// // printf("{plotter:%f}\r\n", power_filter(device_total_power, 0.03));
// // float device_total_power2 = (pb8 * 6) / 0.5 /*采样电阻*/ * 12;
// // printf("{plotter:%f}\r\n", device_total_power1);
// }
// END()
fan_w = 12 * pa2 / 1; //
ozone_w = 12 * pb8 / 0.5; //
}
END()
DO_IT_EACH_MS(3000) { //
printf("{plotter:%f %f}\r\n", fan_w, ozone_w);
}
END()
try_process_rx_order();
@ -264,6 +269,30 @@ int main(void) {
DO_IT_EACH_MS(KEY_PERIOD) { zkey_do_loop_in_each_period(NULL); }
END();
ozone_pwm_control_module_loop();
// DO_IT_EACH_MS(5 * 1000) {
// for (size_t i = 0; i < 95; i++) {
// uint16_t now = capture(i);
// printf("{p:%f}\r\n", now*1.0);
// }
// for (size_t i = 0; i < 100; i++) {
// printf("{p:2.0}\r\n");
// }
// }
// END();
#if 0
DO_IT_EACH_MS(1) {
static int count = 0;
count++;
if (count % 25 == 12) {
set_pwm_modbul_freq_duty2(freqhz / 2, 0);
} else if (count % 25 == 0) {
ozone_pwm_control_update();
}
}
END();
#endif
// End..................................
}
}

44
APP/pwm.c

@ -80,7 +80,7 @@ void set_pwm_t16_pa4_2(uint16_t mat2, uint16_t top) {
s_mat2 = mat2;
s_top = top;
printf("set_pwm_t16_pa4 mat2:%d mat3:%d top:%d\n", mat2, Mat3, top);
// printf("set_pwm_t16_pa4 mat2:%d mat3:%d top:%d\n", mat2, Mat3, top);
T16Nx_SetCNT1(T16N0, 0); //
T16Nx_SetMAT2(T16N0, Mat2); //
T16Nx_SetMAT3(T16N0, Mat3); //
@ -88,10 +88,14 @@ void set_pwm_t16_pa4_2(uint16_t mat2, uint16_t top) {
T16Nx_SetTOP1(T16N0, top);
//
}
uint32_t getCNT() { return T16Nx_GetCNT1(T16N0); }
uint32_t getTOP() { return T16Nx_GetTOP1(T16N0); }
void set_pwm_mat2(uint16_t mat2) { set_pwm_t16_pa4_2(mat2, s_top); }
void set_pwm_t16_pa4(uint32_t freqhz, double duty) {
printf("set_pwm_t16_pa4 %d %f\n", freqhz, duty);
// printf("set_pwm_t16_pa4 %d %f\n", freqhz, duty);
double top_double = calculate_top(freqhz); //TOP
uint16_t top = (uint16_t)top_double;
uint16_t Mat2 = (uint16_t)top_double * (duty / 100.0);
@ -159,39 +163,3 @@ void set_pwm_modbul_freq_duty2(uint32_t frequencyhz, double duty) {
}
void stop_pwm_output() { T16Nx_Disable(T16N0); }
// uint32_t get_next_value_on_step(uint32_t now, uint32_t target, uint32_t step) {
// }
// void pwm_module_stop() { set_pwm_modbul_freq_duty(MIN_PWM_FREQ, 0); }
// void pwm_schdule() {
// /**
// * @brief
// */
// //
// uint32_t targetduty = 0;
// uint32_t targetduty1 = s_target_duty;
// uint32_t targetduty2 = (1.0 / s_target_frequencyhz) * (s_target_duty / 100.0) / (1.0 / s_now_frequencyhz) * 100;
// targetduty = targetduty1 < targetduty2 ? targetduty1 : targetduty2;
// if (targetduty != s_now_duty) {
// set_pwm_t16_pa4(s_now_frequencyhz, targetduty);
// return;
// } else {
// //
// set_pwm_t16_pa4(s_now_frequencyhz, targetduty);
// }
// if (s_target_frequencyhz > s_now_frequencyhz) {
// s_now_frequencyhz += 1000;
// }
// }
//######################################################
//# c语言的理解
//# static ,
//#
//# 线
//#
//#

2
APP/pwm.h

@ -14,4 +14,6 @@ void stop_pwm_output();
void t16_pa4_init(void);
#endif

3
README.md

@ -8,7 +8,6 @@
```
testv1.0
默认频率29khz,占空比3us,打开风扇,RGB灯闪烁。
实现采集流过MOS的电流的大小的测量代码
```

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

180
project_ozone/project_o.uvgui.zel
File diff suppressed because it is too large
View File

45
project_ozone/project_o.uvopt

@ -165,6 +165,11 @@
<WinNumber>1</WinNumber>
<ItemText>((UART_TypeDef *) ((0x40000000UL) + 0x06000) )</ItemText>
</Ww>
<Ww>
<count>3</count>
<WinNumber>1</WinNumber>
<ItemText>countnow</ItemText>
</Ww>
</WatchWindow1>
<Tracepoint>
<THDelay>0</THDelay>
@ -325,6 +330,18 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>10</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\APP\current_through_mos_capturer.c</PathWithFileName>
<FilenameWithoutPath>current_through_mos_capturer.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
@ -335,7 +352,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>10</FileNumber>
<FileNumber>11</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -355,7 +372,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>11</FileNumber>
<FileNumber>12</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -367,7 +384,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>12</FileNumber>
<FileNumber>13</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -379,7 +396,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>13</FileNumber>
<FileNumber>14</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -391,7 +408,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>14</FileNumber>
<FileNumber>15</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -403,7 +420,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>15</FileNumber>
<FileNumber>16</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -415,7 +432,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>16</FileNumber>
<FileNumber>17</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -427,7 +444,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>17</FileNumber>
<FileNumber>18</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -439,7 +456,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>18</FileNumber>
<FileNumber>19</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -451,7 +468,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>19</FileNumber>
<FileNumber>20</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -463,7 +480,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>20</FileNumber>
<FileNumber>21</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -475,7 +492,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>21</FileNumber>
<FileNumber>22</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -495,7 +512,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>22</FileNumber>
<FileNumber>23</FileNumber>
<FileType>2</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -515,7 +532,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>23</FileNumber>
<FileNumber>24</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>

5
project_ozone/project_o.uvproj

@ -467,6 +467,11 @@
<FileType>1</FileType>
<FilePath>..\APP\ozone_pwm_control.c</FilePath>
</File>
<File>
<FileName>current_through_mos_capturer.c</FileName>
<FileType>1</FileType>
<FilePath>..\APP\current_through_mos_capturer.c</FilePath>
</File>
</Files>
</Group>
<Group>

Loading…
Cancel
Save