123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301 |
- #include "soft_flow.h"
- #include "gpio.h"
- #include "common.h"
- #include "soft_uart.h"
- #include "soft_flash.h"
- #include "soft_p_2_c.h"
- #include "string.h"
- #include "soft_water_device.h"
- #include "soft_seed_device.h"
- #include "soft_timer.h"
- #include "soft_test.h"
- #include "tim.h"
- flow_hl flow_dev1;
- flow_hl flow_dev2;
- void HAL_GPIO_EXTI_Callback( uint16_t GPIO_Pin )
- {
- //__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
- if ( GPIO_Pin == EXIT_1T_Pin )
- {
- if(HAL_GPIO_ReadPin( GPIOB, EXIT_1T_Pin ) == GPIO_PIN_SET)
- {
- flow_count_add(1,EXTI_UP);
- }
- else if (HAL_GPIO_ReadPin( GPIOB, EXIT_1T_Pin ) == GPIO_PIN_RESET)
- {
- flow_count_add(1,EXTI_FALL);
- }
- }
- if ( GPIO_Pin == EXIT_2T_Pin )
- {
- if(HAL_GPIO_ReadPin( GPIOB, EXIT_2T_Pin ) == GPIO_PIN_SET)
- {
- flow_count_add(2,EXTI_UP);
- }
- else if (HAL_GPIO_ReadPin( GPIOB, EXIT_2T_Pin ) == GPIO_PIN_RESET)
- {
- flow_count_add(2,EXTI_FALL);
- }
- }
- }
- /**
- * @file flow_count_add
- * @brief 外部中断计算触发数
- * @param none
- * @details
- * @author Zhang Sir
- **/
- void flow_count_add(uint8_t flow_num,uint8_t exti_status)
- {
- flow_hl *flow_temp = NULL;
-
- if(flow_num == 1)
- {
- flow_temp = &flow_dev1;
- }
- else
- {
- flow_temp = &flow_dev2;
- }
- if(exti_status == EXTI_UP)
- {
- if(Get_Systimer_Us() - flow_temp->falling_delay_time > 700)
- {
- flow_temp->falling_delay_falg = true;
- if(flow_temp->falling_delay_falg == true && flow_temp->rising_delay_flag == true)
- {
- flow_temp->falling_delay_falg = false;
- flow_temp->rising_delay_flag = false;
- flow_temp->irq_count++;
- if ( flow_temp->irq_count - flow_temp->irq_last_count >= 5 && flow_temp->irq_flag == 0)
- {
- flow_temp->speed = ( 1000.0f * ( flow_temp->irq_count - flow_temp->irq_last_count ) ) / FlOW_KP *
- ( 1000000.0f / ( Get_Systimer_Us() - flow_temp->last_time ) ); //ml/min
- flow_temp->irq_last_count = flow_temp->irq_count;
- flow_temp->last_time = Get_Systimer_Us();
- }
- }
- flow_temp->rising_delay_time = Get_Systimer_Us();
- }
- }
- else if(exti_status == EXTI_FALL)
- {
- if(Get_Systimer_Us() - flow_temp->rising_delay_time > 700)
- {
- flow_temp->rising_delay_flag = true;
- flow_temp->falling_delay_time = Get_Systimer_Us();
- }
- }
- }
- /**
- * @file L1L2_GPIO_check
- * @brief 34IO端口检测
- * @param none
- * @details
- * @author Zhang Sir
- **/
- GPIO_PinState L3_status = GPIO_PIN_SET;
- GPIO_PinState L4_status = GPIO_PIN_SET;
- void L1L2_GPIO_check()
- {
- static int l1l2_time = 0;
- if ( HAL_GetTick() - l1l2_time < 100 )
- {
- return;
- }
- l1l2_time = HAL_GetTick();
- // 抛球信号 接PMUA1
- // 抛球反馈信号接 L1
- // 断药L2
- if(uavinf.uavtype == JET_UAV_TYPE)
- {
- static bool jet_active = false;
- static uint32_t jet_time = 0;
- static bool jet_ack_flag = false;
- GPIO_PinState Dev_ack = HAL_GPIO_ReadPin( GPIOB, EXIT_3T_Pin );
- L3_status = GPIO_PIN_SET;//L3给默认值
- L4_status = HAL_GPIO_ReadPin( GPIOB, EXIT_4T_Pin );
- //上电持续高电平检测
- if (Dev_ack == 1 && jet_active == false)
- {
- //持续一段时间2s
- if (HAL_GetTick() - jet_time > 2000)
- {
- jet_active = true;
- }
- }
- //检测到低电平
- else if (Dev_ack == 0 && jet_active == true)
- {
- //抛物机回应已抛出
- if(jet_ack_flag == true)
- {
- pmu_set_ack(JET_UAV_TYPE,1,0,0);
- jet_ack_flag = false;
- }
- }
- else
- {
- jet_time = HAL_GetTick();
- jet_ack_flag = true;
- }
- }
- else if(uavinf.uavtype == VK_ALL_IN_ONE)
- {
- //Tim4_init_pwmout(); //pwm输出初始化
- Dev.Arm_Link.connect_status = COMP_NORMAL;
- Dev.Arm.facid = FAC_VK_ALLINONE;
- Dev.Arm_Link.recv_time = HAL_GetTick();
- }
- else
- {
- L3_status = HAL_GPIO_ReadPin( GPIOB, EXIT_3T_Pin );
- L4_status = HAL_GPIO_ReadPin( GPIOB, EXIT_4T_Pin );
- }
-
- }
- /**
- * @file flow_function
- * @brief 流量计相关函数
- * @param none
- * @details
- * @author Zhang Sir
- **/
- void flow_function(void)
- {
- if ( Get_Systimer_Us() - flow_dev1.last_time >= 300000 )
- {
- if(Get_Systimer_Us() - flow_dev1.cal_delay_time > 200000)//在增加一个延时,中断里赋值lasttime有问题
- {
- flow_dev1.irq_flag = 1;
- flow_dev1.speed = ( 1000.0f * ( flow_dev1.irq_count - flow_dev1.irq_last_count ) ) / FlOW_KP *
- ( 1000000.0f / ( Get_Systimer_Us() - flow_dev1.last_time ) ); //ml/min *60 /60
- flow_dev1.irq_last_count = flow_dev1.irq_count;
- flow_dev1.last_time = Get_Systimer_Us();
- flow_dev1.irq_flag = 0;
- }
- }
- else
- {
- flow_dev1.cal_delay_time = Get_Systimer_Us();
- }
-
- if ( Get_Systimer_Us() - flow_dev2.last_time >= 300000 )
- {
- if(Get_Systimer_Us() - flow_dev2.cal_delay_time > 200000)
- {
- flow_dev2.irq_flag = 1;
- flow_dev2.speed = ( 1000.0f * ( flow_dev2.irq_count - flow_dev2.irq_last_count ) ) / FlOW_KP *
- ( 1000000.0f / ( Get_Systimer_Us() - flow_dev2.last_time ) ); //ml/min
- flow_dev2.irq_last_count = flow_dev2.irq_count;
- flow_dev2.last_time = Get_Systimer_Us();
- flow_dev2.irq_flag = 0;
- }
- }
- else
- {
- flow_dev2.cal_delay_time = Get_Systimer_Us();
- }
- }
- mimo_flow flow_mimo1;
- mimo_flow flow_mimo2;
- /**
- * @file can_recv_mimor_flow_function
- * @brief 恩曌流量计检测
- * @param none
- * @details
- * @author Zhang Sir
- **/
- void can_recv_mimor_flow_function(uint32_t CanID, uint8_t data[], uint8_t len)
- {
- Dev.Flow.facid = FAC_MIMO_SIG;
- Dev.Flow_Link1.connect_status = COMP_NORMAL;
- Dev.Flow_Link1.recv_time = HAL_GetTick();
- if(Dev.Flow_Link2.connect_status == COMP_NORMAL)
- {
- Dev.Flow.facid = FAC_MIMO_DOU;
- }
- if(CanID == CAN_MIMO_FLOW)
- {
- switch (data[0])
- {
- case 0:
- memcpy(&flow_mimo1.ch,&data[0],8);
- if(flow_mimo1.last_total_ml > flow_mimo1.total_ml)
- {
- flow_mimo1.overturn_count++;
- }
- flow_mimo1.last_total_ml = flow_mimo1.total_ml;
- break;
- case 1:
- Dev.Flow_Link2.connect_status = COMP_NORMAL;
- Dev.Flow_Link2.recv_time = HAL_GetTick();
- memcpy(&flow_mimo2.ch,&data[0],8);
-
- if(flow_mimo2.last_total_ml > flow_mimo2.total_ml)
- {
- flow_mimo2.overturn_count++;
- }
- flow_mimo2.last_total_ml = flow_mimo2.total_ml;
- break;
- default:
- break;
- }
- }
- else if(CanID == CAN_MIMO_FLOW_K)
- {
- if(data[1] == 0xFB && data[2] == 0x01)
- switch (data[2])
- {
- case 0:
- if(data[4] == 0XD1)
- {
- flow_mimo1.flow_k = data[5] * 256 + data[6];
- }
- break;
- case 1:
- if(data[4] == 0XD1)
- {
- flow_mimo2.flow_k = data[5] * 256 + data[6];
- }
- break;
- default:
- break;
- }
- }
- }
- vk_flow flow_vkdev1;
- vk_flow flow_vkdev2;
|