基于Basys3的自平衡小车

2017 DDC中国区选拔赛作品 | 机器人

aod321   项目发起人  2017-06-20

基于Basys3和 MPU6050 位置姿态传感器,利用 PID 平衡算法,使用 FPGA 实现两轮小车平衡调节和速度控制。

参与者

黑夜不再来  参与者

中国矿业大学 学生

超人I77  参与者

中国矿业大学 学生

项目详情

项目创意灵感
这个灵感最初是来自于Digilent冬令营的现场制作,尽管当时我们组在现场由于芯片烧坏的原因没能及时地完成,但这激起了我们的兴趣,使我们想采用并发处理的FPGA实现平衡车,会不会有什么独特的优势。虽然本设计中传感器的采样频率有限制,使得FPGA的高速处理优势得不到充分体现,但采用FPGA来尝试实现这个小项目还是具有一定实际意义的。
设计特色创新
采用FPGA采集数据,Microblaze软核负责控制与PID数据处理,使小车达到了完美的平衡状态,并且具有一定的抗干扰能力。
自行编写IIC驱动MPU6050
采用AXI总线读取车轮编码器数据(改进了冬令营给的code_ip
系统原理功能
【系统组成】:Basys3开发板/电源部分/编码器采集部分/姿态采集部分/PID控制部分
此处应该有原理图
【工作原理】双环PID调节,角度环通过调节P、D参数达到车辆基本稳定,接着加入速度环正反馈,调整车辆,让车辆调节平衡后能够稳定停下来,也为控制车辆的前进后退左转右转打下基础。接下来其实只要改变速度环的目标值,就可以控制车辆的运行了。
【功能说明】:通过Microblaze控制PWM输出,达到车模平衡的效果,具体过程为, 初始化完成以后,首先进入车模直立检测子程序。该程序通过读取陀螺仪传感器的数值判断车模是否处于直立状态。同时不断采集编码器数据,获取车模状态信息,然后综合姿态数据PID运算输出PWM值控制车模平衡。
完成情况概述
实现功能如下:1,2点比较完善,第3点未找到解决方案,还请大神们指教。
1、实现基本直立平衡
2、干扰条件下直立平衡,可以实现倒立摆功能
3、蓝牙遥控,控制小车前进后退与转弯(代码写好了,内存不够了,代码无法写入....)
展望项目未来
看看怎么扩展一下RAM,这样就能把蓝牙遥控的代码写进去了。还可以作CCD循迹,不过考研狗的时间比较紧张,估计没戏了。
最近苦逼地准备考试,等最近两周期末考试弄完,再开放详细的制作过程吧。┭┮﹏┭┮
收获感悟分享
自平衡小车制作过程中,我们接触到了很多之前没有接触的理论知识。其中包括:陀螺仪传感器使用获得正确偏角的方法,速度PID控制算法的应用。软件的编写和小车的焊接熟练了我们的编程技能和动手能力。利用FPGA制作虽然没有很大的优势,但也算是对自己FPGA学习成果的一种检验和挑战。感谢Digilent提供的板卡和技术支持,没有冬令营,就没有这次作品;没有工程狮姐姐提供的code_ip,我还真不知道FPGA和软核之间的配合该怎么弄呢~
项目采用平台: