开源遥控平衡小车_ 记录制作平衡小车的问题

1、发生了电机堵转:问题居然是固定电机的前两个孔不能用于固定。。。。无语!!!

2、一直在弄MPU6050的DMP,原来野火有教程。

        移植成功:STM32移植MPU6050/9250的DMP官方库(motion_driver_6.12)修改移植 DMP简单使用教程_随波逐流_Huffer的博客-CSDN博客_dmp库        直接复制该文的DMP文件夹、以及根据文章提示添加宏,改下log_stm32的头文件即可

3、ide提示flash错误:即为flash内存不够,代码太大了,其他人都能用,我就不行!!!为什么呢,该锅必扣在HAL库上。此问题可以尝试修改编译优化等级来解决,我第一次可以,但是后面再加代码后即使是最高优化也不行了,于是主控从C8T6换成了CBT6。

        于是又引申出一个问题,stm32cubdeide不能直接更换芯片类型,还好我这个是同类型芯片仅仅是flash不同,故解决方案为: 到stm32cubemx更换芯片类型,把mx生成的ioc文件替换掉ide的ioc文件,而又引申出了一个问题,mx和ide生成的ioc版本不一样,而我的ide更新的版本总是低于mx的版本,解决方案为:Error when i try to update STM32

4、c8t6开启定时器时,HAL_TIM_Base_Start(&htim3);加上会错误,只能加HAL_TIM_Base_Start_IT(&htim3);

5、tb6612炸了

        目前推测问题:tb6612平均输出电流是1A,而我的线宽是20mil只能输出0.5A,重新画板,待续

        确实是这个问题,这个事件告诉我们,要看数据手册。

6:直接上MPU9250!   // 以后再来,实验室有!

7:莫名进入STOP按键的EXTI中断: 该按键连接到了TIM3_CH4,而该TIM作为ENCODER模式,于是就会导致一直进入STOP的EXTI中。

8:某个函数的变量被我设置成了static,而该函数在某个中断中也会运行,故有这样的情况:A执行该函数,B中断产生也执行该函数,B完成返回A的时候,该函数的变量值不是中断发送前的值,被B进程给改变了,over!

9:从蓝牙调试助手收到的数据的处理:关于浮点数的问题
 

float a = 7.5;  

printf("%x",(int)a);               //  输出的是7

printf("%x",*(int *)&a);           //   输出的是7.5在位中的表示 即:40f00000

        这篇文章解释的好int转float的坑_qq_45740393的博客-CSDN博客_int转float

10:我在start按键处加了个delay来滤按键抖动,然后一旦按下start后,整个程序就卡住了,通过debug发现程序卡在了iic超时处理,问题分析:设置的start的优先级大于mpu6050的中断优先级,当程序在读取mpu6050时,按下start后进入start的中断处理,在加了delay后,该中断处理花费时间过长,处理完成返回后,程序认为mpu6050没有回应,进入超时处理,而mpu6050的中断又大于Systick的优先级,就一直卡住了。解决:修改优先级,start优先级滚到最后面就好了。但是!HAL库没办法通过delay进行按键滤波,HAL库在进入中断回调函数前就把中断标志位给清除了,这导致还是会重复进入按键的中断服务函数,达不到滤除抖动的效果。

11:

int value = 0;
char a = 0xff;        //即a = -1(计算机组成原理

value |= a;   // 也等于value += a;

printf("%x",value);

得到的输出内容是ffffffff,可是我只想要让value的低八位为a的值,为什么会这样呢:在表达式计算时,各种整形首先要提升为int类型,故 char 类型 0xff = -1 ,int 类型的-1表示为0xffffff,value的值自然就是0xffffffff了,要解决这个问题,可以改为value |= a&0xff,或者更直接,也是应该的做法,将a类型改为unsigned char。 

12、我的PID计算在MPU6050数据中断中进行,周期在10ms,我试想能不能设置一个TIM为5ms,加快计算的周期,达到更好的性能,实验后答案:NO!或许,在EXTI中的速度已经是一个饱和速度了,加快的计算也只是速度环的运算,而位置环的运算没办法加快,而位置环又是平衡的重点,所以性能还是一样。

说说速度环和位置环:

在我的理解中,速度环和直立环是矛盾的存在,速度环负责将速度降为0,而直立环则在乎角度,会输出速度。速度环大,则受到干扰后的速度降为0快,即恢复速度快,直立环大,则受到干扰后的角度稳定在机械中值快,即倾斜角度变化小。

        于是可以设想:当速度环的输出>>直立环的输出的情况下,原先小车平衡,速度为0,这时小车受到一个向前的力,角度开始偏转,直立环输出速度,这时!速度环反应很大,不允许你输出,于是小车不会移动,只会继续倒下,直到到达某个角度,该角度输入直立环的输出大于速度环的输出,小车才会移动。当速度环的输出<<直立环的输出的情况下,原先小车平衡,速度为0,这时小车受到一个向前的力,角度开始偏转,直立环输出的速度很大!咻一下,你的角度是到达机械中值了,但是你的速度依旧存在,而你的速度环输出又太小,抑制速度太慢了,这样的现象就是:小车直立的向前跑,停不下来。

        需要说明,速度环的输出>>直立环的输出的意思是指,现场、外在地判断速度环和直立环的输出比较,是一个对小车的现象的描述、解释语言,而不是代码中直立环和速度环的输出值的比较(我尽力解释了!!!)

        以上两个设想,我都做过实验了!确实如此,速度环的输出>>直立环的输出,小车受到干扰就一直摆摆摆动,幅度很大,这时可以试试加大直立环的kd,来加大直立环的输出,如果加大kd无用的话,就意味着速度环的输出大了,应该减小速度环的输出,即减小速度环的kp。当速度环的输出<<直立环的输出时,如果初始时就高频震荡,轮子小幅度剧烈换方向,意味着直立环的输出大了,应该减小直立环的kd,这时小车在初始下可以平衡,但是受到干扰后有两种可能:1、小车不停的高频震荡停不下来,这就还是意味着你的直立环的输出大了,应该减小直立环的kp。2、小车不震荡,但是速度停不下来,这就意味着你的速度环的输出太小了,恢复速度过慢,应该增大速度环的kp。在我的实验中,小车的倾斜角度,也就是抗干扰能力和恢复速度,也就是速度降为0的时间,二者之间的关系是矛盾的,抗干扰能力强些,恢复速度就慢些,恢复速度快些,抗干扰能力就弱些。如果要遥控小车,应该要重恢复速度,这样小车在平衡状态与遥控状态切换时,才不会抖的太剧烈。

        重恢复速度的遥控视频:

重恢复速度的遥控

        重抗干扰能力的遥控视频:

开源遥控平衡小车

开源平衡小车-代码粗略过下_哔哩哔哩_bilibili

代码和硬件扔在了B站的简介那里,自取。

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
同网上一般网友制作平衡小车不一样,这个平衡小车最大的特点就是它的整体很小,PCB面积只有2.5cm*5.0cm,这个可能还没有网友制作平衡小车的一个电机驱动板大,但是却已经实现了相同的功能。我在器件选型时尽可能用了小的元件,这样使得PCB面积大大减少。 亮点概括为两个: 1 PCB 面积非常小(2.5cm*5.0cm) 2 器件可以拆卸,方便开发调试和学习 小车系统架构图: 小车视频演示: 两轮平衡小车软件设计部分: 数据部分:数据部分围绕MPU6050传感器展开。分为数据获取,滤波,数据处理 1.1数据获取 STM32通过I2C和MPU6050进行通讯,其中涉及到基础的I2C通信协议实现,在I2C基础上,涉及到MPU6050各种参数的设置,比如加速度的范围等。不同的设置获取到的数据会不一样并且精度也不一样。 1.2滤波 在获取到原始数据后经过简单转化变为角度,但是这个数据是不准确的,因此需要滤波处理,由于小车比较简单,滤波就用的是互补滤波。这样就能获取比较精确的数据的了。 1.3数据处理 在滤波前需要对获取的原始数据进行处理,这个需要一点点物理知识,起始就是加速度与力的方向是一致的这个原理,还有一个就是角速度的积分操作,这个需要使用定时器来完成。 控制部分:控制部分主要分为PID算法,电机驱动 2.1PID算法 PID算法就是比例,积分,微分这三个变量相互作用最后输出到控制器上去。在这里我们只需要P就够了。 2.2电机驱动 电机驱动主要设计的知识就是PWM波的控制,STM32有相关的库操作,只需要按要求设置好就OK了。然后将PID算法产生的结果作为参数输入到这里就可以实现控制了。 附件内容截图:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值