|
主函数- int main(void)
- {
- delay_init(); //延时函数初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
- uart_init(115200); //串口初始化为115200
- IIC_Init();
- TIM3_PWM_Init(19999,71); //PA6,PA7 PWM 舵机输出 20ms
- PWMA=1600;
- PWMB=1600;
- delay_ms(500);
- MPU6050_initialize(); //=====MPU6050初始化
- DMP_Init();
- // Init_HMC5883();
- TIM2_Getsample_Int(4999,71); //5ms定时中断
- while(1)
- {
- delay_ms(50);
- ///////////////////////////////////////////////////////
- }
- }
复制代码 PID计算- int MPU6050_PID(float pitch,float Target)
- {
- static float kp=66,kd=-20,Ki=0.04;
- static float LastError,SumError;
- float Error,dError;
- int PWM;
- char flag;
- //求偏差
- Error = pitch-Target; //
- printf("\n Error= %.2f \n",Error);
- //积分
- SumError+=Error;
- //积分限幅
- if(SumError>500) SumError=500;
- else if(SumError<-500) SumError=-500;
- //积分分离
- if(fAbs(Error)<3) flag=1;
- else flag=0;
- //微分
- dError=LastError-Error;
- LastError=Error;
- //计算PID
- PWM = kp*Error+kd*dError+flag*Ki*SumError; //
- return PWM/100;
- }
复制代码
|
评分
-
查看全部评分
|