#ifndef __INCLUDE_H #define __INCLUDE_H #include "stm32f4xx.h" //结构体 typedef struct { float time_lime; float max_current_lime; float high_speed_mag; float low_speed_mag; float dividi_rpm; }PROTECT_PARAMETERS; typedef struct { float P; float I; float D; }PID_PARAMETERS; typedef struct { u8 buff[10]; u8 buff_cnt; u16 rpm; //串口读取的转速(乘以一定公式) float temperature; //串口读取的电调温度 float voltage; //串口读取的电调电压 float consumption; //功率 }USART_DATA; typedef struct { s16 aim_speed; //目标pwm s16 new_speed; s16 last_aim; float err; float last_err; float pret_err; float integral; s16 pwm; s16 dshot_pwm; u32 dshot_data[18]; u16 dshot_limit; }PID_DATA; typedef struct { s8 stop_flag; u8 stall; u8 overload; //过载次数 u16 stall_cnt; u16 normal_cnt; u16 unormal_cnt; u8 stall_err; //堵转异常标志位 }STALL_PROTECT_DATA; typedef struct { u8 block_err; //缠绕标志位 s8 speed_lim; //功率输出削弱参数 u16 block_cnt; //缠绕累计值 u16 twin_cnt; u32 avg_sum; //计算平均电流时的累计ADC值 float STcurrent; //根据转速获取的标准电流 double current; //ADC检测的实际电流 double current_correct; }TWIN_PROTECT_DATA; typedef struct { u8 numble; //编号 PID_DATA pid_data; //PID用数据 USART_DATA usart_data; TWIN_PROTECT_DATA twin_data; STALL_PROTECT_DATA stal_data; }MOTOR; //头文件 #include "delay.h" #include "dshot.h" #include "iwag.h" #include "time.h" #include "adc.h" #include "usart.h" #include "can.h" #include "led.h" #include "flash.h" #include "delay.h" #include "ntc.h" //全局变量 #ifdef __GLOBALS__ #define EXT #else #define EXT extern #endif EXT u8 Updata_requre; EXT u8 Pixhawk_requre; EXT u16 light_pwm; EXT u8 light_err; EXT u16 usbl_opendown; EXT u8 usbl_err; //电机堵转标识 EXT u16 Motor_err_flag; EXT u8 DMA400Finishi; EXT float temperature; EXT float Voltage; EXT u32 Voltage_sum; EXT u32 humidity; EXT u32 humidity_sum; EXT u8 humidity_err; //推进器和履带电机结构体 EXT MOTOR left_thruster; EXT MOTOR right_thruster; EXT MOTOR left_track_motor; EXT MOTOR right_track_motor; //左右履带转向 EXT s32 left_trank_direction; EXT s32 right_trank_direction; //PID EXT PID_PARAMETERS track_PID; //堵转参数 EXT PROTECT_PARAMETERS protect_parameters; //宏 #define max(x,y) (x>y?x:y) #define min(x,y) (xCCR1),(uint32_t)right_thruster.pid_data.dshot_data); //PB7 右履带 #define RTrack_DSHOT_DMA_Config() DSHOT_DMA_Config(TIM4,TIM_DMA_CC2,DMA1_Stream3,DMA_Channel_2,(uint32_t)&(TIM4->CCR2),(uint32_t)right_track_motor.pid_data.dshot_data) //PA7 左推进器 #define LThruster_DSHOT_DMA_Config() DSHOT_DMA_Config(TIM3,TIM_DMA_CC2,DMA1_Stream5,DMA_Channel_5,(uint32_t)&(TIM3->CCR2),(uint32_t)left_thruster.pid_data.dshot_data) //PA5 左履带 #define LTrack_DSHOT_DMA_Config() DSHOT_DMA_Config(TIM2,TIM_DMA_CC1,DMA1_Stream5,DMA_Channel_3,(uint32_t)&(TIM2->CCR1),(uint32_t)left_track_motor.pid_data.dshot_data) #define LED_ON GPIO_SetBits(GPIOF, GPIO_Pin_0) #define LED_OFF GPIO_ResetBits(GPIOF, GPIO_Pin_0) #define LED_TURN GPIO_ToggleBits(GPIOF, GPIO_Pin_0) #define USBL_ON GPIO_SetBits(GPIOA, GPIO_Pin_15) #define USBL_OFF GPIO_ResetBits(GPIOA, GPIO_Pin_15) #define USBL_TURN GPIO_ToggleBits(GPIOA, GPIO_Pin_15) #define LIGHT_ON GPIO_SetBits(GPIOF, GPIO_Pin_15) #define LIGHT_OFF GPIO_ResetBits(GPIOF, GPIO_Pin_15) #define LIGHT_TURN GPIO_ToggleBits(GPIOF, GPIO_Pin_15) #define Read_LIGHT GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_9) #define Read_USBL GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_8) #define Read_VIDEO GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2) #define CUT_LIGHT GPIO_ResetBits(GPIOF, GPIO_Pin_15) #define CUT_USBL GPIO_ResetBits(GPIOA, GPIO_Pin_15) #define CUT_VIDEO GPIO_ResetBits(GPIOA, GPIO_Pin_1) void SoftReset(void); void ADC_Config(void); void LED_Config(void); void CAN_Config(void); void TIM_Config(void); void USBL_Config(void); void Dshot_Config(void); void Light_Config(void); void USART_Config(void); void All_motor_Config(void); void Single_Motor_Config(MOTOR *motor,u8 num); void Motor_AD_correct(void); void Motor_Stall_check(void); void AnaMotorData(MOTOR *Motor); u16 GetDShotValue(int16_t value, int8_t lime); void GetMotorData(USART_TypeDef* USARTx, MOTOR *Motor); void Motor_Control(MOTOR* Motor,PID_PARAMETERS* MotorPID, u8 usePID); void Send_Updata_requre(void); void Send_Pixhawk_requre(void); void SysTick_1ms_Task(void); void SysTick_10ms_Task(void); void SysTick_20ms_Task(void); void SysTick_100ms_Task(void); void SysTick_500ms_Task(void); void Other_Task(void); void Overcurrent_Detection_Config(void); extern u8 hv_motor1_data[8]; extern u8 hv_motor2_data[8]; extern u8 hv_motor3_data[8]; #endif