void EXTI9_5_IRQHandler(void)
{
int PWM_out;
if(EXTI_GetITStatus(EXTI_Line5)!=0) // 一级判定
{
if(PBin(5)==0) // 二级判断
{
EXTI_ClearITPendingBit(EXTI_Line5); // 清除中断标志位
// 1.采集编码器数据&MPU6050角度信息
// 电机是相对安装,刚好相差180度,为了编码器输出极性一致,就需要对其中一个取反
Encoder_Left = -Read_Speed(2);
Encoder_Right = Read_Speed(4);
mpu_dmp_get_data(&Pitch,&Roll,&Yaw); // 读取角度
MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz); // 读取角速度
MPU_Get_Accelerometer(&aacx,&aacy,&aacz); // 读取加速度
// 2.将数据压入闭环控制中,计算出控制输出量
Velocity_out=Velocity(Target_Speed,Encoder_Left,Encoder_Right); // 速度环
♥♥♥Vertical_out=Vertical(Velocity_out+Med_Angle,Roll,gyrox); // 直立环
Turn_out=Turn(gyroz);
PWM_out=Vertical_out;//最终输出
// 3.把控制输出量加载到电机上,完成最终控制
MOTO1 = PWM_out-Turn_out; // 左电机
MOTO2 = PWM_out+Turn_out; // 右电机
Limit(&MOTO1,&MOTO2); // PWM限幅
Load(MOTO1,MOTO2); // 加载到电机上
}
}
}
上面这个是平衡小车的一部分代码,在爱心那里,Vertical_out的三个参数好几个up都说后面的两个参数是根据自己的安装方向而定的,但是我找了好多也没教怎么看出自己的安装方向,然后就不知道参数是写Roll,gyrox还是pitch,gyroy了,大佬快救救孩子吧
{
int PWM_out;
if(EXTI_GetITStatus(EXTI_Line5)!=0) // 一级判定
{
if(PBin(5)==0) // 二级判断
{
EXTI_ClearITPendingBit(EXTI_Line5); // 清除中断标志位
// 1.采集编码器数据&MPU6050角度信息
// 电机是相对安装,刚好相差180度,为了编码器输出极性一致,就需要对其中一个取反
Encoder_Left = -Read_Speed(2);
Encoder_Right = Read_Speed(4);
mpu_dmp_get_data(&Pitch,&Roll,&Yaw); // 读取角度
MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz); // 读取角速度
MPU_Get_Accelerometer(&aacx,&aacy,&aacz); // 读取加速度
// 2.将数据压入闭环控制中,计算出控制输出量
Velocity_out=Velocity(Target_Speed,Encoder_Left,Encoder_Right); // 速度环
♥♥♥Vertical_out=Vertical(Velocity_out+Med_Angle,Roll,gyrox); // 直立环
Turn_out=Turn(gyroz);
PWM_out=Vertical_out;//最终输出
// 3.把控制输出量加载到电机上,完成最终控制
MOTO1 = PWM_out-Turn_out; // 左电机
MOTO2 = PWM_out+Turn_out; // 右电机
Limit(&MOTO1,&MOTO2); // PWM限幅
Load(MOTO1,MOTO2); // 加载到电机上
}
}
}
上面这个是平衡小车的一部分代码,在爱心那里,Vertical_out的三个参数好几个up都说后面的两个参数是根据自己的安装方向而定的,但是我找了好多也没教怎么看出自己的安装方向,然后就不知道参数是写Roll,gyrox还是pitch,gyroy了,大佬快救救孩子吧