diff --git a/Power_Pico/BSP/GATE/gate.c b/Power_Pico/BSP/GATE/gate.c index b529719..465c85f 100644 --- a/Power_Pico/BSP/GATE/gate.c +++ b/Power_Pico/BSP/GATE/gate.c @@ -1,21 +1,9 @@ #include "gate.h" #include "data_queue.h" -#include "usart.h" #include "math.h" -// 量程阈值 -#define THRESH_HIGH 4000-2048 // 对应550uA 50mA -#define THRESH_LOW 15 // 对应大概450uA 45mA -// 次数 -#define THRESH_TIMES 8 - uint8_t gate_status = HIGH_CUR; // Default status -// 预先计算标度因子 -static const double SCALE_LOW = 3.0f / 4096.0f / 50.0f / LOW_CUR_RES * 1000000.0; // uA -static const double SCALE_MID = 3.0f / 4096.0f / 50.0f / MID_CUR_RES * 1000000.0; // uA -static const double SCALE_HIGH = 3.0f / 4096.0f / 50.0f / HIGH_CUR_RES * 1000000.0; // uA - void Gate_Port_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; @@ -72,72 +60,3 @@ uint8_t Gate_get_status(void) return gate_status; } -// 在DMA中断中执行, 不能有阻塞 -void Gate_Swich_and_UART_Send(ADC_Packet adc_packet) -{ - static uint8_t high_times = 0; - static uint8_t low_times = 0; - // adc码值 - uint16_t ref_adc = adc_packet.data[0][4]; - uint16_t vol_adc = adc_packet.data[0][0]; - uint16_t cur_adc = 0; - switch(Gate_get_status()) { - case LOW_CUR: - cur_adc = adc_packet.data[0][1]; - break; - case MID_CUR: - cur_adc = adc_packet.data[0][2]; - break; - case HIGH_CUR: - cur_adc = adc_packet.data[0][3]; - break; - } - // 计算电压电流值 - float voltage; - float current; - uint16_t diff = abs((int)cur_adc - ref_adc); - - adc_packet.header[3] = Gate_get_status(); - ADC_Packet adc_packet_trans = adc_packet; - HAL_UART_Transmit_DMA(&huart6, (uint8_t*)&adc_packet_trans, sizeof(adc_packet_trans)); - // 计算电压电流值 - voltage = vol_adc * 3.0f / 4096.0f * 11.0f; // 11 = (100+10)/10 - // 计算电流值 - if(Gate_get_status() == LOW_CUR) { - current = adc_packet.data[0][1]; - current = (current - ref_adc) * SCALE_LOW; - } - else if(Gate_get_status() == MID_CUR) { - current = adc_packet.data[0][2]; - current = (current - ref_adc) * SCALE_MID; - } - else if(Gate_get_status() == HIGH_CUR) { - current = adc_packet.data[0][3]; - current = (current - ref_adc) * SCALE_HIGH; - } - // 入队列 - queue_push(global_voltage_queue, voltage); - queue_push(global_current_queue, current); - // 判断是否需要切换档位 - // ADC码值超过量程 - if(diff > THRESH_HIGH) { - high_times++; - low_times = 0; - if(high_times >= THRESH_TIMES) { - high_times = 0; - flow_route_selection(Gate_get_status()+1); - } - } - else if(diff < THRESH_LOW) { - low_times++; - high_times = 0; - if(low_times >= THRESH_TIMES) { - low_times = 0; - flow_route_selection(Gate_get_status()-1); - } - } - else { - high_times = 0; - low_times = 0; - } -} diff --git a/Power_Pico/BSP/GATE/gate.h b/Power_Pico/BSP/GATE/gate.h index d07c127..d446bd5 100644 --- a/Power_Pico/BSP/GATE/gate.h +++ b/Power_Pico/BSP/GATE/gate.h @@ -21,15 +21,9 @@ extern "C" { #define MID_CUR 2 #define LOW_CUR 1 -// Resistance values in ohms -#define HIGH_CUR_RES 0.005f // 5 m ohm -#define MID_CUR_RES 0.5f // 500 m ohm -#define LOW_CUR_RES 50.0f // 50 ohm - void Gate_Port_Init(void); void flow_route_selection(uint8_t selection); uint8_t Gate_get_status(void); -void Gate_Swich_and_UART_Send(ADC_Packet adc_packet); #ifdef __cplusplus }