平衡自行车-实践篇

标签:DIY 机器人

nicekwell 发布于 2018-01-23 21:30

balance_bike.jpg
在本文将会介绍平衡自行车的具体制作过程,包括机械、电路和代码。
平衡自行车完整的代码托管在 https://github.com/nicekwell/balance_bike

Step 1: 一、材料

temp.jpg
表格上传不上来,看上面截图吧。

Step 2: 二、动力和转向部分

1.jpg 3.jpg
1、传动方式
如上图,我用的是皮带传送的方式,因为比较好实现。

2、电机选择
这个DIY是不考虑变速情况的,平衡的参数都是按照一个固定速度调的。
所以动力部分的作用就是提供一个恒定的速度,并且这个速度尽可能稳定,尽可能不受外部影响。
电机应选择扭力大一些、转速稳定的减速电机。

3、电机供电

电机是直接供电还是使用升压模块供电要根据电机特性,有些电机用升压模块可以提高功率,有些大电流电机用升压模块反而可能限制了电流。

我这里用升压模块升到12v给N20电机供电的。

另外,电机通过三极管受stm32控制,通过控制占空比也可以限制电机输出的功率。


4、转向
转向部分用一个舵机带动把手转动即可。如上图2。

Step 3: 四、电路

4.jpg 5.jpg
在github工程里有详细的引脚连接表 https://github.com/nicekwell/balance_bike
1、供电
用3.3v稳压芯片给整个控制系统供电,包括单片机、GY521模块、蓝牙模块。
用5v稳压芯片给舵机供电。
用12v升压模块给电机供电。
2、下载

我是用串口给stm32下载程序的。

PA9下载TXD 
PA10下载RXD 
3、GY521

这个模块通过i2c通信,只需要连接4根线,vcc、gnd、scl、sda。

4、电机
点击用12v升压模块供电,由于不需要反转,用三极管即可直接驱动,电路图上面图1。
加三极管的目的是为了可以通过调节PWM占空比来限制输出功率,但我的实际情况是100%输出时动力才勉强足够。所以如果你不需要限制电机输出功率,或者通过其他方式限制输出功率,也可以不要三极管,不通过单片机控制。
5、舵机
舵机是用5v供电的,而单片机是3.3v电平,对于pwm控制脚可以通过2个三极管实现同相的电平转换,如上图2。
6、蓝牙模块
下图是我使用的蓝牙串口模块,可以实现串口透传,只需要4根线连接:vcc、gnd、txd、rxd。
蓝牙模块是用来调试和遥控的,没有它也能跑。建议还是加上这个模块,在调试PID擦数时会非常方便。
关于调试方面的内容可以参考我写的另一片文章:谈一谈单片机开发的几种调试方案

Step 4: 四、代码结构

t.jpg

代码提交在github https://github.com/nicekwell/balance_bike

主要分为3个部分:1、基础的驱动程序,实现电机、舵机、gy521数据读取;2、平衡控制系统,核心是一个20ms定时器,每20ms进行一次数据采集、计算和响应;3、遥控和调试系统,实现log输出、接收遥控信息。

1、驱动

如上图1。

2、平衡控制

main函数会初始化一个定时器20ms中断一次,调用 main/balance.c 里的 balance_tick 函数,平衡算法在 main/balance.c 实现。

每20ms到来会执行一次:

  1. 读取传感器加速度和角速度信息。
  2. 互补平衡滤波计算当前姿态。
  3. 用PID算法计算出前轮转角。

3、遥控和调试

两部分:状态输出和指令接收。

状态输出
在main函数的while循环里,利用串口中断构建一个简单的界面显示状态。

指令接收
串口接收到的数据会传给main/control.c,该文件分析串口数据,解释成相应的操作。主要是PID参数调节。

Step 5: 五、广告

ad.jpg
老婆做毕业设计,给我下了死命令,一定要找300个程序员研究一下,请各位同行做个调查问卷,可扫描下面二维码或者直接点击此链接:https://www.wjx.cn/jq/17710478.aspx,多谢!
更多文章欢迎访问 http://nicekwell.net/
 

作者

nicekwell

安徽,合肥

14粉丝 6作品 0随笔
  关注 私信

作者的最新作品


阅读数: 5627