找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8074|回复: 19
收起左侧

stm32 +mpu6050dmo数据处理+PID180°舵机控制,不是很完善,仅供参考

  [复制链接]
ID:198530 发表于 2018-4-23 15:12 | 显示全部楼层 |阅读模式


主函数
  1. int main(void)
  2. {         
  3.         delay_init();                     //延时函数初始化         
  4.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
  5.         uart_init(115200);                 //串口初始化为115200
  6.          IIC_Init();

  7.                 TIM3_PWM_Init(19999,71);        //PA6,PA7 PWM 舵机输出 20ms
  8.           PWMA=1600;
  9.           PWMB=1600;
  10.                  delay_ms(500);
  11.           MPU6050_initialize();     //=====MPU6050初始化        
  12.     DMP_Init();  
  13. //                 Init_HMC5883();
  14.                  TIM2_Getsample_Int(4999,71);                //5ms定时中断

  15.         while(1)
  16.         {

  17. delay_ms(50);


  18. ///////////////////////////////////////////////////////
  19.         }
  20. }
复制代码
PID计算
  1. int MPU6050_PID(float pitch,float Target)
  2. {  
  3.                  static float  kp=66,kd=-20,Ki=0.04;
  4.                 static float LastError,SumError;
  5.                 float Error,dError;
  6.           int PWM;
  7.                 char flag;
  8. //求偏差
  9.                 Error = pitch-Target;       //
  10.                 printf("\n Error= %.2f \n",Error);
  11. //积分
  12.         SumError+=Error;
  13.                 //积分限幅
  14.                 if(SumError>500) SumError=500;
  15.                 else if(SumError<-500) SumError=-500;
  16.                 //积分分离
  17.                 if(fAbs(Error)<3)        flag=1;
  18.                 else flag=0;
  19. //微分
  20.         dError=LastError-Error;
  21.         LastError=Error;
  22. //计算PID        
  23.          PWM = kp*Error+kd*dError+flag*Ki*SumError;           //
  24.          return PWM/100;
  25. }
复制代码

捕获.PNG

舵机PID控制.zip

452.93 KB, 下载次数: 319, 下载积分: 黑币 -5

评分

参与人数 3黑币 +60 收起 理由
2395542380 + 5 很给力!正好要用这个程序
zds1995 + 5 很给力!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:198530 发表于 2018-4-23 17:58 | 显示全部楼层
回复

使用道具 举报

ID:319923 发表于 2018-5-1 16:40 | 显示全部楼层
楼主可以分享一下整个源码吗 谢谢
回复

使用道具 举报

ID:228186 发表于 2018-5-2 17:18 | 显示全部楼层
谢谢,楼主。
回复

使用道具 举报

ID:198530 发表于 2018-5-3 21:23 | 显示全部楼层
51sunny 发表于 2018-5-1 16:40
楼主可以分享一下整个源码吗 谢谢

上面就是整个源码了,烧进去就能用了
回复

使用道具 举报

ID:294883 发表于 2018-5-4 15:27 | 显示全部楼层
多谢,楼主。
回复

使用道具 举报

ID:294883 发表于 2018-5-4 15:32 | 显示全部楼层
楼主,PID那部分有完善一点的吗,我测试只要有一点偏转就会往一个方向转的。qq:3506746761
回复

使用道具 举报

ID:198530 发表于 2018-5-5 00:14 | 显示全部楼层
zds1995 发表于 2018-5-4 15:32
楼主,PID那部分有完善一点的吗,我测试只要有一点偏转就会往一个方向转的。qq:3506746761

我没有去再改善,你可以尝试的调一下参
回复

使用道具 举报

ID:475021 发表于 2019-2-5 20:39 | 显示全部楼层
不错
666
回复

使用道具 举报

ID:187094 发表于 2019-8-9 20:19 | 显示全部楼层
真的很感谢楼主
回复

使用道具 举报

ID:600656 发表于 2019-8-23 15:21 | 显示全部楼层
使用了HMC5883??只用MPU6050和STM32该如何修改?
回复

使用道具 举报

ID:600656 发表于 2019-9-3 17:29 | 显示全部楼层
这个程序中没有用到HMC5583吧,我用的GY-25Z,为什么下载程序后串口调试助手上不显示倾斜角度???
回复

使用道具 举报

ID:600656 发表于 2019-9-3 17:31 | 显示全部楼层
我用的GY-25Z,下载程序后串口调试助手不随传感器的变化而变化,一直都是0.00怎么解决???
回复

使用道具 举报

ID:170892 发表于 2019-9-6 20:40 | 显示全部楼层
单片机混子 发表于 2019-8-23 15:21
使用了HMC5883??只用MPU6050和STM32该如何修改?

我看视频楼主这个原理就跟控制平衡小车差不多,单轴就行,不需要航向角,剩下就是调PID参数
回复

使用道具 举报

ID:123954 发表于 2021-2-9 23:43 | 显示全部楼层
楼主你好,感谢你的分享,我看了你的代码,有一个疑问:代码用的应该是位置式pid算法,但是我看到计算PID输出后,再加上了上次输出的结果,请问是为什么呢。    Inc_PWM=MPU6050_PID(Pitch,0);
    Ver_PWM =Ver_PWM + Inc_PWM;
    if(Ver_PWM>500) Ver_PWM=500;
    if(Ver_PWM<-800) Ver_PWM=-800;
    PWMA=Amp_Limit(Ver_PWM+1600);

51hei浏览器截图20210209233922.png

回复

使用道具 举报

ID:198530 发表于 2021-4-6 17:15 | 显示全部楼层
zwh 发表于 2021-2-9 23:43
楼主你好,感谢你的分享,我看了你的代码,有一个疑问:代码用的应该是位置式pid算法,但是我看到计算PID输 ...

是位置式控制,结果加上上一次的输出是根据舵机的控制原理来的,舵机要转动的角度是相对上一次的
回复

使用道具 举报

ID:588966 发表于 2021-11-1 11:21 | 显示全部楼层
Ver_PWM =Ver_PWM + Inc_PWM;
请问这句程序是什么意思呢,感谢楼主
回复

使用道具 举报

ID:588966 发表于 2021-11-1 11:28 | 显示全部楼层
请问楼主是要在motor.c中实现产生PWM的么。就是用TIM_SetCompare2(TIM3, CompareValue);这个函数
回复

使用道具 举报

ID:588966 发表于 2021-11-1 11:32 | 显示全部楼层
请问楼主PID的输出PWM为什么要除以100呢
return PWM/100;
回复

使用道具 举报

ID:588966 发表于 2021-11-1 11:58 | 显示全部楼层
king_zxt 发表于 2021-4-6 17:15
是位置式控制,结果加上上一次的输出是根据舵机的控制原理来的,舵机要转动的角度是相对上一次的

抱歉,还想问一下您 微分,积分时间怎么选择的呢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表