From 7d13fbde75b58ff4c9deaef95ca0c03a1083f8e8 Mon Sep 17 00:00:00 2001 From: WXK <287788329@qq.com> Date: 星期五, 29 八月 2025 10:26:55 +0800 Subject: [PATCH] 1.9,加入电量新计算方法 测试电池能干多久问题 目前1s检测一下adc --- keil/include/main/main.c | 104 ++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 72 insertions(+), 32 deletions(-) diff --git a/keil/include/main/main.c b/keil/include/main/main.c index 53488c6..62f6340 100644 --- a/keil/include/main/main.c +++ b/keil/include/main/main.c @@ -68,7 +68,7 @@ #include "mk_phy.h" #include "mk_pwm.h" -#define DEBUG_MODE +//#define DEBUG_MODE extern int simple_main(void); extern int temp_main(void); void uart_change_check(uint16_t gpio_state); @@ -183,31 +183,32 @@ // LOG_INFO(TRACE_MODULE_APP, "The voltage measured %d mv\r\n", // ADC_INTERNAL_VREF_MV + adc_code_to_mv((int16_t)*result, ADC_INTERNAL_VREF_MV)); fVoltage_mv=ADC_INTERNAL_VREF_MV + adc_code_to_mv((int16_t)*result, ADC_INTERNAL_VREF_MV); - fVoltage_mv=fVoltage_mv*2; - if(fVoltage_mv < 3300) + fVoltage_mv=fVoltage_mv*2+1100; + if(fVoltage_mv < 2000) { bat_percent = 0; } - else if(fVoltage_mv > 4100) + else if(fVoltage_mv > 3100) { bat_percent = 100; } else { - bat_percent = ((fVoltage_mv - 3300) /8); + bat_percent = ((fVoltage_mv - 2000) /11); } } - if(fVoltage_mv<3300) - { - power_low_flag=1; - gps_air780_power_change(gps_power_state,0);//gps原样,关闭4G - //LOG_INFO(TRACE_MODULE_APP, "电池电压低于3.3V,4G,GPS停止工作\r\n"); - }else{ - power_low_flag=0; - gps_air780_power_change(gps_power_state,1);//gps原样,开启4G - //LOG_INFO(TRACE_MODULE_APP, "电池电压正常,4G,GPS,正常工作\r\n"); - } - PCA9555_Set_One_Value_Output(ADC_MINIUS,1);//拉高 +// LOG_INFO(TRACE_MODULE_APP, "当前静止:%d 电量:%d\r\n",nomove_count,fVoltage_mv); +// if(fVoltage_mv<3300) +// { +// power_low_flag=1; +// gps_air780_power_change(gps_power_state,0);//gps原样,关闭4G +// //LOG_INFO(TRACE_MODULE_APP, "电池电压低于3.3V,4G,GPS停止工作\r\n"); +// }else{ +// power_low_flag=0; +// gps_air780_power_change(gps_power_state,1);//gps原样,开启4G +// //LOG_INFO(TRACE_MODULE_APP, "电池电压正常,4G,GPS,正常工作\r\n"); +// } +// PCA9555_Set_One_Value_Output(ADC_MINIUS,1);//拉高 // LOG_INFO(TRACE_MODULE_APP, "The voltage is %%%d \r\n",bat_percent); } extern uint8_t gps_uwb_flag,gps_need_data_flag; @@ -219,7 +220,9 @@ void IMUTask(void) { if(nomove_count>g_com_map[NOMOVESLEEP_TIME]&&g_com_map[IMU_ENABLE]==1) - {power_wakeup_enable((enum POWER_WAKEUP_SOURCE_T)ACCLERATE_DETECT_Pin, POWER_WAKEUP_LEVEL_HIGH); + { + LOG_INFO(TRACE_MODULE_APP, "进入休眠\r\n"); + power_wakeup_enable((enum POWER_WAKEUP_SOURCE_T)ACCLERATE_DETECT_Pin, POWER_WAKEUP_LEVEL_HIGH); mcu_deep_sleep(); } } @@ -266,16 +269,18 @@ } void MinuteTask(void) { - PCA9555_Set_One_Value_Output(ADC_MINIUS,0);//拉低 +// PCA9555_Set_One_Value_Output(ADC_MINIUS,0);//拉低 adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样 } +//uint16_t adc_count; +//uint8_t adc_start_flag; void SecondTask(void) {static uint8_t second_count; - if(second_count++>60) - { - second_count = 0; - MinuteTask(); - } +// if(adc_count++>3600&&adc_start_flag) +// { +// adc_count = 0; +// MinuteTask(); +// } // if(!power_low_flag) // Gps_change(); @@ -342,8 +347,9 @@ uint8_t Get_anchor_appdata_flag; uint8_t Get_anchor_appdata_num; extern uint8_t update_tag_time; -uint8_t sleep_limit_time=1; +uint8_t sleep_limit_time=10; uint8_t enable_sleep_count,sleep_flag; +extern float motor_keeptime; static void sleep_timer_callback(void *dev, uint32_t time) { @@ -354,7 +360,10 @@ enable_sleep_count=0; sleep_flag=1; } - + if(motor_keeptime>0) + { + motor_keeptime--; + } g_start_send_flag=1; // if(delaysleep_count>0) @@ -365,7 +374,9 @@ static void move_handler(enum IO_PIN_T pin) { nomove_count=0; - Motion_Detection_callback(); +// LOG_INFO(TRACE_MODULE_APP, "加速度唤醒了\r\n"); +// LOG_INFO(TRACE_MODULE_APP, "当前静止:%d 电量:%d\r\n",nomove_count,fVoltage_mv); +// Motion_Detection_callback(); } static void pca_handler(enum IO_PIN_T pin) { @@ -420,7 +431,7 @@ ip2 = (g_com_map[TCP_IP_2]>>12&0xf)*1000+(g_com_map[TCP_IP_2]>>8&0xf)*100+(g_com_map[TCP_IP_2]>>4&0xf)*10+(g_com_map[TCP_IP_2]&0xf); ip3 = (g_com_map[TCP_IP_3]>>12&0xf)*1000+(g_com_map[TCP_IP_3]>>8&0xf)*100+(g_com_map[TCP_IP_3]>>4&0xf)*10+(g_com_map[TCP_IP_3]&0xf); port = g_com_map[TCP_PORT]; - g_com_map[VERSION] = (1<<8)|4; + g_com_map[VERSION] = (1<<8)|9; LOG_INFO(TRACE_MODULE_APP,"设备ID: %x .\r\n",dev_id); LOG_INFO(TRACE_MODULE_APP,"固件版本:4G-GPS定位手环 V%d.%d. \r\n",g_com_map[VERSION]>>8,g_com_map[VERSION]&0xff); LOG_INFO(TRACE_MODULE_APP,"服务器地址: %d.%d.%d.%d:%d.\r\n",ip0,ip1,ip2,ip3,port); @@ -504,7 +515,7 @@ if(state5v==1) { state5v=0; - sleep_limit_time=1;//新增插入串口后30s不休眠 + sleep_limit_time=10;//新增插入串口后30s不休眠 enable_sleep_count=0;//重新插拔可以重置时间 } @@ -617,6 +628,9 @@ } extern uint8_t shengji_flag; +extern uint16_t adc_caiji; +uint8_t send_frame1[10]; +extern uint8_t adc_one; int main(void) { board_clock_run(); @@ -646,7 +660,7 @@ LOG_INFO(TRACE_MODULE_APP, "UWB simple example\r\n"); struct PWM_CFG_T usr_pwm_cfg = { - .general_prescale = 15, + .general_prescale = 7, .int_en = 1, .callback = pwm_callback, }; @@ -658,7 +672,7 @@ IIC2_Init(); SC7A22H_Motion_Detection_Init(); - gpio_pin_clr(ADC_GND_ENABLE); +// gpio_pin_clr(ADC_GND_ENABLE); Program_Init(); uart_receive(UART_ID0,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback); power_init(); @@ -670,10 +684,11 @@ sleep_timer_start(__MS_TO_32K_CNT(5000));//测试 #endif board_5V_input_init(voltage_input_handler); - adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样 +// adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样 board_acceleration_detection_init(move_handler); Uwb_init(); Dw1000_App_Init(); +// adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样 while (1) { if(flag_secondtask) @@ -683,8 +698,33 @@ } if(g_start_send_flag) { + +// adc_caiji++; +// if(adc_caiji>5&&adc_one==0) +// { +// adc_one=1; +// adc_caiji=0; +// MinuteTask(); +// } +// else if(adc_one==1&&adc_caiji>3600) +// { +// adc_caiji=0; +// MinuteTask(); +// } + +// send_frame1[0] = 0x55; +// send_frame1[1] = 0xAA; +// send_frame1[2] = nomove_count; +// memcpy(&send_frame1[3],&fVoltage_mv,2); +//// send_frame1[3] = data_length+5; +//// send_frame1[4] = CMD_REPLY; +//// send_frame1[5] = index; +//// send_frame1[6] = data_length; +// uart_send(UART_ID0, send_frame1,5, NULL); + g_start_send_flag = 0; gpio_pin_set(IO_PIN_7);//亮 +// LOG_INFO(TRACE_MODULE_APP, "当前静止:%d 电量:%d\r\n",nomove_count,fVoltage_mv); SwitchTagState(); gpio_pin_clr(IO_PIN_7);//灭 } @@ -695,7 +735,7 @@ LoraUp_Poll(); #ifndef DEBUG_MODE - if(sleep_flag&&state5v==0){//开始一段时间无休眠 + if(sleep_flag&&state5v==0&&motor_keeptime==0){//开始一段时间无休眠 trace_flush(); uint32_t lock = int_lock(); //LOG_INFO(TRACE_MODULE_APP, "进入低功耗"); -- Gitblit v1.9.3