找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2564|回复: 0
打印 上一主题 下一主题
收起左侧

STM32自平衡方块程序,分享资料

[复制链接]
跳转到指定楼层
楼主
ID:505762 发表于 2020-4-16 22:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
自平衡方块,拿去自学
  1. /*       
  2. 知乎:天下行走                                                       
  3. CSDN:技术创造无限可能                               
  4. 闲鱼:抉择之刃银
  5. */

  6. /*
  7. 针对角度环的期望角度为速度环输出+机械中值的提问:
  8. 【一】
  9. 问:
  10.         当我在小车(平衡小车)前侧绑一块小铁块,这会使得机械中值后倾,=-27度,然后我将车子扶在机械中值的角度位置然后开机,但车子一开机就往前跑。为什么?
  11. 答:
  12.         问题分析:
  13.                                         起始速度偏差=0(因为没有动轮子呀)——>外环输出=0(即内环期望角度=0)
  14.                                         But:开局实际角度= -27度——>开局内环输出就等于(-27-0)*(-1) = +27  //Kp为负数,这里设为-1
  15.                                         即根本是因为开局时 外环输出!=机械中值(这里机械中值可以等效说成实际角度,但不是任何时候都可以等效说成的。譬如我开机时小车不摆在机械中值位置时就不能等效说成。)
  16.                                         =====>>>>所以开局时车子肯定往前跑!!!                       
  17.         解决思想:
  18.                                         起始Target=Real就可以了。
  19.         解决方法:
  20.                                         测机械中值譬如 = -27度,则使得内环期望角度=外环输出 + 机械中值。       
  21.                                        
  22. 【二】
  23. 若:外环输出==机械中值,即开局速度偏差=0时,机械中值=0则外环输出=0,即内环输入=0。
  24. 又有内环反馈=0,所以这时候开局内环输出就等于(0-0)*(-1) = 0===>车子必然直立静止在原地。

  25. 【三】
  26. 若:外环输出!=机械中值,即开局速度偏差=0时,机械中值!=0,但我开局不把车子摆在机械中值位置。譬如举例当机械中值=-27度,我开机将车子实际角度摆在0度位置。则此时
  27. 速度偏差=0则外环输出=0,即内环输入=0。
  28. 又有内环反馈=0===>理论上小车直立静止,BUT!车子根本不在机械中值位置,又谈何直立静止,车子会根据重心向前倒下,直立环立刻发挥作用-->
  29. -->若小铁快非常非常轻,还有可能救回来;若铁块不轻,则必然车子一直不断向前跑不会停下;若小铁块过重,系统来不及响应,车子会直接向前倒下;
  30. 这,就是结果。
  31. */       


  32. /*
  33. 【硬件占用的GPIO的框架】
  34. 编码器        ||AB相—PA0/PA1
  35. 电机                ||PWM——PA8/PA11、PA6/PA7
  36. MPU6050 ||INT——PB5
  37. MPU6050 ||IIC——SCL--PB4/SDA--PB3
  38. OLED                ||IIC——SCL--PB8/SDA--PB9
  39. */
  40. #include "stm32f10x.h"
  41. #include "sys.h"

  42. float Pitch,Roll,Yaw;                                                                //角度
  43. short gyrox,gyroy,gyroz;                                                //陀螺仪--角速度
  44. short aacx,aacy,aacz;                                                                //加速度
  45. int Encoder_Momentum;                                                                //编码器数据(速度)

  46. int PWM_MAX=7000,PWM_MIN=-7000;                        //PWM限幅变量
  47. int MOTO1,MOTO2;                                                                                //电机装载变量
  48.                
  49. extern int Velocity_Momentum_out;                //输出变量

  50. int main(void)       
  51. {
  52.         delay_init();
  53.         NVIC_Config();
  54.         uart1_init(115200);       
  55.        
  56.         OLED_Init();
  57.         OLED_Clear();
  58.        
  59.         MPU_Init();
  60.         mpu_dmp_init();
  61.         MPU6050_EXTI_Init();
  62.        
  63.         Encoder_TIM2_Init();
  64.         Encoder_TIM4_Init();
  65.         PWM_Init_TIM1(0,7199);        //CH1——PA8、CH4——PA11
  66.         PWM_Init_TIM3(0,7199);        //CH1——PA6、CH2——PA7       
  67.         OLED_Clear();
  68.         OLED_ShowString(5,0,"P",12);
  69.         OLED_ShowChar(5,2,'M',12);
  70.         OLED_ShowString(64,2,"Stop:",12);       
  71.   while(1)
  72.         {
  73.                 OLED_Float(0,15,Pitch,1);                                                                        //角度                                               
  74.                 OLED_Float(0,70,Velocity_Momentum_out,1);        //外环输出
  75.                 OLED_Float(2,5+15,Encoder_Momentum,1);                //速度读取
  76.                 OLED_Float(3,5,MOTO1,1 );                                                                        //电机PWM
  77.                
  78.                 OLED_ShowNumber(64+40,2,stop,1,12);                                //停止位
  79.         }        
  80. }
复制代码


自平衡方块GFP.7z

258.13 KB, 下载次数: 38, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶1 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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