
开源协议
:GPL 3.0
描述
一、缺陷
空心杯电机+螺旋桨方案不如换用动量轮方案,设计之初是为了低成本,才选择空心杯电机+螺旋桨,但是后面发现调试时噪声实在太大,完全不适合在宿舍调,在实验室也只能等没人才好调,后面发现,换用动量轮成本其实差不多。
二、硬件介绍
第一版:
MCU:GD32F103CBT6
无线模块:海凌科B25
充电芯片:TP4057
电机驱动芯片:DRV8833
第二版:
MCU:GD32F103CBT6
蓝牙模块:海凌科B25
充电芯片:TP4057
电机驱动芯片:RZ7899
第一版存在的问题:太过自信,MCU最小系统没有复位按键,BOOT 按键,导致打板回来,用DAP-Link识别不了芯片,换用ST-Link偶尔能识别芯片,如果预留了复位按键和BOOT按键,那么找问题时就方便很多。由于ST-Link大部分时刻可以下载程序,故开始编写各个部分的代码;直至最后驱动电机时,发现怎么都驱动不了电机,单片机开漏,推挽输出模式都试过了,要么是买的DRV8833有问题(从一家店买的),要么是DRV8833原理图有问题(有大佬知道可以帮忙指出),后面没有重新买DRV8833,因为对原板子不满意,就直接重新打板了。
第二版基本没有啥问题,唯一的问题就是用DAP-Link和ST-Link都识别不了单片机,但是用串口可以下载程序,并且能正常运行;为什么下载器无法识别单片机,我怀疑是焊的时候烧坏了单片机的JTAG外设(但概率很小),有可能也是原理图的问题,但是我实在想不出一个下载电路,原理图有啥问题,还望有大佬能指点一二。
充电IC为TP4057,这个芯片挺好用的,充电电流最高支持500ma,我这里用的是100ma。
海凌科B25这个蓝牙模块也挺好用的,响应速度很不错,后面调参时,曲线基本上是实时的,使用起来也很简单。我调参时,是将平衡摆上的B25设置为从机模式,另一块板子配置为主机模式,另一块板子就是第一版的板子,上面有个B25模块,我就索性将这个废弃板子加给串口模块用来充当平衡摆与PC的通讯桥梁,直观理解如下图:
我最开始的想法是将平衡摆蓝牙模块配置为从机,直接连接PC蓝牙,然后用python将蓝牙虚拟出一个串口与调参软件连接,如下图:
注:RZ7899这个驱动芯片缺点是驱动频率不能太高,据说只能1KHZ,我用的是2KHZ,实测高于2KHZ芯片发热很严重(网上也有很多说的);优点是外围电路简单,宽电压,大电流,价格便宜好买。
三、配件3D模型
总共在立创打了三个零件,并且打印了两次(自己的打印机在家吃灰)
整个平衡摆结构大概是这个样子的
调试X方向时:
调试Y方向时:
四、PID调参心得
用PID做控制算法时,首先要确定是用增量式PID还是位置式PID,具体怎么选可以参考这个视频 【智能平衡车:(2)PID控制算法初步了解】 【精准空降到 12:24】 https://www.bilibili.com/video/BV1jW4y197fD/?share_source=copy_web&vd_source=68337adbea96c8cef50403a4b2809df6&t=744
确定好用什么PID后,写好PID控制程序
’
然后根据平衡摆实际现象先确定三个参数的正负(这一点非常重要)
参数正负确定方法:总共有三项,首先要搞清楚每一项的作用效果是什么
比例效果:抑制误差产生
积分效果:某一方向误差存在的时间越久,抑制误差效果越明显
微分效果:抑制移动
比例系数正负确定:将积分系数和微分系数设为0,然后将比例系数设为正数,产生误差时,如果作用效果是抑制误差,就说明比例系数应该为正数,反之为负数。
积分系数正负确定:将比例系数和微分系数设为0,然后将积分系数设为正数,产生误差是,如果作用效果是 产生误差时,随着时间推移,抑制误差效果越来越明显,就说明积分系数是正数,反之就是负数。
微分系数正负确定:将比例系数和积分系数设为0,然后将微分系数设为正数,然后移动平衡摆,如果作用效果是抑制你移动,就说明微分系数是正,反之就是负数。
除去上述P、I、D三个参数,还有两个参数,一个是目标角度,一个是积分误差最大累加值
其他的调参过程就不多说了,后续会录制一个调参视频,上传B站(录完发布后会发在评论里面),附上今天的调参笔记:
12月12日
用陀螺仪原始角速度配合角度,确定好参数正负后,效果还行,能立起来了,但是稳态误差靠积分无法消除,且还出现增大积分作用,反而误差增大的离奇现象;同时参数没有调好,响应慢。
为此做了以下测试步骤:
1.因为陀螺仪芯片在角速度为0时,输出的角速度不为0,导致微分作用一直存在,故改用自己计算的瞬时角速度输入到微分项——测试结果:自己计算的瞬时角速度变化太快,积分参数要非常大才有效果,且配合其他参数,整体控制效果不如使用陀螺仪的角速度
2.给自己计算的角速度做一个低通滤波,上一次取0.9,本次取0.1,来缓解角速度变化太快——测试结果:微分参数还是很大,且太大时,微分作用会有明显震荡(有可能是微分参数没有试好,反正小了就不起作用,大了就微分项会有震荡),整体效果不如直接用陀螺仪角速度
3.发现陀螺仪角速度在实际角速度为0时,输出的角速度稳定在30上下,故可将获取的陀螺仪角速度直接减去30输入到微分项——测试结果:微分作用的静态误差消除了,但在此基础上的积分项作用效果还是比较玄学
4.搞明白积分作用玄学效果的原因
经测试发现积分作用效果玄学原因:
产生玄学效果时,限幅是对积分输出结果限幅,这就导致积分输入是可以增大到很大的,导致积分响应非常迟缓,就出现了刚开始所说的玄学效果(搞明白这个上述积分作用现象都能合理解释了)
所以正确的做法是对积分输入进行限幅,而不是对输出限幅
测试结果:整体效果非常不错,定目标角度(目标角度不调整)的情况下,可以调参至系统非常稳定,稳态误差非常小,但是存在的问题有以下几个:
4.1 目标角度微调1~2度,效果变化不大,但是目标角度变化大的时候,系统虽然能平衡,但是稳态误差就会变大,此时需要新的参数才能消除稳态误差。
4.2 系统响应速度比较慢,减弱微分作用的话,系统就会震荡,故只能使微分作用较大才能保持系统不震荡,带来的问题就是系统响应较慢(应该是正常现象)
4.3 增加了弹射起步
4.4 以上PID算法所做的事情就是将平衡摆的角度控制到人为设置的目标角度,可以尝试使用自适应目标角度,实现更好的自稳定效果(例如:在一边增加负重的时候,能自动调整向另一边倾斜,使系统以最小的代价保持平衡)
五、程序流程图
程序流程比较简单,就是并行执行三个任务
六、实物展示
【空心杯加螺旋桨做的平衡摆-哔哩哔哩】 https://b23.tv/Vf6erXg
设计图

BOM


评论