解释以下代码:void EXTI9_5_IRQHandler(void) { int PWM_out; if(EXTI_GetITStatus(EXTI_Line5)!=0) { if(PBin(5) == 0) { EXTI_ClearITPendingBit(EXTI_Line5); Encoder_Left = -Read_Spead(2); //采集编码器速度 Encoder_Right = Read_Spead(3); measure = (Encoder_Left + Encoder_Right); //将编码器速度给测量值 mpu_dmp_get_data(&Pitch, &Roll, &Yaw); //角度 MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz); //角速度 // Velocity_out = Velocity_PI(measure); //速度环计算 Turn_out = Turn(gyroz); // Vertical_out = Vertical_PI(gyroz); PWM_out = Velocity_out; //PWM输出 motor1 = PWM_out + Turn_out - Vertical_out; motor2 = PWM_out - Turn_out + Vertical_out; Limit(&motor1, &motor2); //PWM限幅 SETPWM(motor1,motor2); //加载PWM到电机 } } }
时间: 2024-02-23 22:56:04 浏览: 212
EXTI.rar_STM32 中断
这段代码是一个中断处理函数,当外部中断发生时会被调用。该函数执行以下操作:
1. 检查外部中断线5是否被触发,如果是则执行以下操作:
2. 检查PBin(5)引脚的状态是否为低电平,如果是则执行以下操作:
3. 清除外部中断线5的中断标志位。
4. 读取编码器的速度,并将左右编码器速度相加得到测量值。
5. 通过调用mpu_dmp_get_data函数获取当前的俯仰角(Pitch)、横滚角(Roll)和偏航角(Yaw)。
6. 通过调用MPU_Get_Gyroscope函数获取当前的角速度。
7. 通过调用Turn函数计算转向控制输出。
8. 计算速度控制输出,并将其赋值给PWM_out变量。
9. 计算垂直方向控制输出,并将其赋值给Vertical_out变量。
10. 计算左右电机的PWM输出,并将其限幅在合理范围内。
11. 将计算得到的PWM输出加载到电机进行控制。
值得注意的是,该函数调用了一些其他的函数,如Turn函数、mpu_dmp_get_data函数和MPU_Get_Gyroscope函数等,这些函数的具体实现细节需要查看其它代码文件。
阅读全文