平衡自行车-实践篇
标签:DIY 机器人
nicekwell 发布于 2018-01-23 21:30
Step 1: 一、材料
Step 2: 二、动力和转向部分
所以动力部分的作用就是提供一个恒定的速度,并且这个速度尽可能稳定,尽可能不受外部影响。
电机应选择扭力大一些、转速稳定的减速电机。
电机是直接供电还是使用升压模块供电要根据电机特性,有些电机用升压模块可以提高功率,有些大电流电机用升压模块反而可能限制了电流。
我这里用升压模块升到12v给N20电机供电的。
另外,电机通过三极管受stm32控制,通过控制占空比也可以限制电机输出的功率。
Step 3: 四、电路
用5v稳压芯片给舵机供电。
用12v升压模块给电机供电。
我是用串口给stm32下载程序的。
PA9 | 下载TXD | |
PA10 | 下载RXD |
这个模块通过i2c通信,只需要连接4根线,vcc、gnd、scl、sda。
Step 4: 四、代码结构
代码提交在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到来会执行一次:
- 读取传感器加速度和角速度信息。
- 互补平衡滤波计算当前姿态。
- 用PID算法计算出前轮转角。
3、遥控和调试
两部分:状态输出和指令接收。
状态输出
在main函数的while循环里,利用串口中断构建一个简单的界面显示状态。
指令接收
串口接收到的数据会传给main/control.c,该文件分析串口数据,解释成相应的操作。主要是PID参数调节。