资料大纲已规划好,陆续更新中......
平衡车几乎是每个人入坑电子DIY的必做项目,包括了传感器采集处理、电机运动控制、pid算法调节等许多领域,同时兼顾专业性和趣味性,非常适合作为入门练习项目。本项目经过几次版本迭代(见后续介绍),最后确定为当前的形态,在外形结构和软件控制方面实现了比较好的平衡,外观小巧,运动性能卓越。
特别说明:
使用ESP32-WROOM作为主控芯片,MPU6050六轴加速度传感器模块获取姿态信息,DRV8833芯片驱动电机运动,提供较大电流,电机选用N20减速电机,带有AB相霍尔编码器用于测量转速。供电方面选用7.4V锂电池(2s),经线性稳压器LM1084稳压至5V再使用1117稳压至3.3V给ESP32供电。
程序部分基于Arduino IDE,使用开源库实现角度获取和pid算法平衡控制,使用JSON库编写了指令解析程序,用于蓝牙远程调节pid参数,并借助开源的安卓蓝牙APP用来遥控小车运动。
B站演示视频:【自制】超迷你的掌上平衡车,可蓝牙pid调参、远程控制_哔哩哔哩_bilibili
立创开源平台:minibot - 嘉立创EDA开源硬件平台 (oshwhub.com)
第一版:
相关演示视频:刚调好角度环pid的平衡车,还不太稳_哔哩哔哩_bilibili
第二版:
最后的效果见下图,演示视频戳:平衡车第二弹-颤颤巍巍的冰墩墩_哔哩哔哩_bilibili
----------------------------分割线------------------------------------
下面是当前的最终版本,第三版的设计说明。
完整结构建模:原本计划使用两层板堆叠即可(比如第一版),中间位置放置电池,但电机排线需要向上突出,下面放不了电池,所以额外增加了一层,使用三层板堆叠结构,下面两层使用亚克力切割,最上层为电路板,电池放置在上层,下层挖空引出电机排线,亚克力板还需增加电机固定架孔位,将电机安排得尽可能靠近来减小横向间距。solidworks建模如下:
除电路板外,需要定制的仅两块相同的亚克力板,从solidworks导出为DWG文件即可定制。
电源:使用2s电池7.4V标称电压供电,接入点设置开关控制通断。主控供电为3.3V,电池需要经过两次降压处理,为了电路简单都使用了低压差线性稳压器(LDO),第一级使用LM1084降压至5V,第二级使用AMS1117降压至3.3V。
电机驱动:驱动芯片使用DRV8833,比较便宜,虽然驱动电流不太大,但足够带动N20电机。一个芯片可驱动两路电机,功能表如下,每个电机需要两路PWM输入进行调速。两个电机共四路PWM输入。
串口下载电路:Type-C + CH340C实现串口通信,常规的双三极管电路实现自动下载。
MPU6050电路:直接使用了模块,接入四根线(电源、接地、两根信号线)即可正常读取数据。
其余电路细节请查看工程原理图,已添加大量注释说明。
元器件布局:按照主要的信号流向进行布局,主要是电源部分需要集中一点,方便布线。MPU6050模块下方空白处也放置了一些小器件,带一点3D立体电路的感觉。
手动布线:布线仅仅是能用的程度,还有很大的改进空间,再就是稍微注意了一下线宽,电源部分做到尽量宽一点,信号线可以窄点。
电路设计水平有限,欢迎各位提出宝贵意见,共同学习进步,感谢。
电路板焊接测试
CH340缺了一个电容(见debug部分),这个版本暂时飞线解决了,然后上了一坨热熔胶固定。电源接口也加上了热熔胶,防短路。
整体组装
下面两层亚克力板,上面一层PCB,用M3六角铜柱连接固定,长度能短则短,但电池和排线需要一定的空间。下面用的长度15mm,上面是20mm,最下面的电机是用的附赠的电机座,螺丝固定。
CH340 V3接口缺少一个0.1uF电容接地,导致无法正常连接串口,当前版本用飞线接上电容后可以正常工作,PCB已在v1.1版本中修复。
电机排线6p插座方向设置错误,原设计打算放在背面,但根据实际接线顺序需要放在正面,已在v1,.1版中标出,请注意检查,否则容易造成短路风险。
Todo
主要元器件:
名称 | 数量 | 单价 | 说明 | 链接 |
---|---|---|---|---|
ESP32-WROOM | 1 | 12.3 | 型号选ESP-WROOM-32 | 下单链接 |
MPU6050 | 1 | 6 | 常用模块,其他来源的基本也通用 | 下单链接 |
DRV8833 | 1 | 2.5 | 选drv8833模块,模块比芯片便宜,于是选择买模块拆芯片 | 下单链接 |
N20电机 | 2 | 25 | 型号选的是6V-310转 | 下单链接 |
7.4V电池 | 1 | 34.5 | 2s电池,选700毫安时JST接口(还需准备一个2P排针做插座),最好再自己买一个充电器 | 下单链接 |
M3铜柱 | 8 | 7.8(共20个) | 选M3 *15和M3 *20共两种 | 下单链接 |
M3螺母 | 4 | 1.5(共100个) | 在上面铜柱这家店(优信电子)买,搜M3就有 | -- |
ZH1.5-6P母座 | 2 | 2.4(共10个) | 选6P弯针(后面发现直针更美观,只是焊接需注意极性) | 下单链接 |
ZH1.5-6P双头排线 | 2 | 4.2(共5个) | 选6P双头,长度任意 | 下单链接 |
拨动开关 | 1 | 2(共20个) | 型号选SK12D07VG4拨动开关2档3脚,好几个差不多的,注意别选错了 | 下单链接 |
亚克力板 | 2 | -- | 自行定制,定制文件见附件模型装配/亚克力切割.DWG |
-- |
其他元件: 剩下的CH340、AMS1117还有电阻电容等元件比较常规,可根据BOM表配单,立创直接下单或某宝挨个买都行,买的时候注意封装型号。
模型文件都上传到附件了,包含完整的solidworks建模装配体文件,小车按照实际尺寸建模,可以提供一点参考。亚克力板切割用里面的DWG文件,放了两块一样的板,直接某宝定制即可。
电路图部分请直接从末尾的立创EDA工程文件打开,附件就不放了,原理图里添加了大量的注释,供参考。
见附件代码,当前为最新版本,后续优化会标上版本号上传。使用Arduino IDE开发,需要自行下载准备的库有<ArduinoJson.h>、<MPU6050_tockn.h>。工程中的每个模块为.h+.cpp文件的组合,已添加了很多注释,可自行查阅。
蓝牙调参: 需要将最开头的BTMODE 宏定义修改为0(默认为1,即遥控模式)。手机端APP用任意的蓝牙调试APP都行,发送指令格式见代码中的注释说明:
/* 蓝牙发送参数指令,使用JSON格式进行打包和解析,字符串格式:"{"cmd":1,"data":[p,i,d]}" , (p、i、d为常数)
* cmd=1:角度环pid设置
* cmd=2:速度环pid设置
* cmd=3:转向环pid(暂未添加)
* cmd=4:角度平衡值, 发送格式: "{"cmd":4,"data":[angle]}" , (angle为常数)
* cmd=5:速度值,同角度
* cmd=6:转向值,同上
**/
蓝牙遥控: 遥控用的APP已放在附件中,仅限安卓平台。在APP里自行配置的摇杆参数如下图所示:
结构层面: 目前迷你程度几乎已经达到极限(电机大小限制),如果再要减小的话就要换更小的电机才行。从外观来看现在最大的问题在电池接线,大部分暴露在外面降低美观性,同时电机排线也比较突出,倒地的时候撞到排线,可能造成损坏,考虑连接座换成直针,代替目前的弯针即可解决。
软件层面: PID运行的前一分钟,电机运动会出现明显的滞后和超调现象,运行一段时间才能恢复正常的平衡模式,目前未排查到原因,估计是某些变量初始化时的问题,还在排查中。小车运行稳定程度也还有提升空间,静止时还不能很稳,一方面PID算法和参数还可以优化,另一方面可能受编码器分辨率影响,按20Hz采样率,得到编码器数据范围是0-50左右的整数值,数据精度十分有限。
!注意:请使用浏览器自带下载,迅雷等下载软件可能无法下载到有效资源。
器件 | 类型 | 描述 | 数据手册 |
---|---|---|---|
SM05T1GH | 静电放电(ESD)保护器件 | 点击下载 | |
YTS-B013-1A | 轻触开关 | 点击下载 | |
ZH1.5-6AW | 线对板/线对线连接器 | 点击下载 | |
RAT031R00FTP | 贴片电阻 | 点击下载 | |
A2541WV-2P | 排针排母 | 针脚数:2 连接器类型:排针 排数:1 触头类型:公形引脚 间距:0.100"(2.54mm) - | 点击下载 |
RLM12FTCMR001 | 贴片低阻值采样电阻 | 功率:1W 精度:±1% 阻值(欧姆):0.001 温度系数:±200 ppm/℃ | 点击下载 |
LM1084S-5.0/TR | 低压差线性稳压(LDO) | 输出类型:固定 最大输入电压:12V 输出电流:5A 输出电压(最小值/固定值):5V | 点击下载 |
BCP52-10,135 | 三极管(BJT) | 点击下载 | |
GCM1885C2A102FA16D | 贴片电容(MLCC) | 点击下载 | |
19-217/R6C-AL1M2VY/3T | 发光二极管 | 照明颜色:红色 主波长/色坐标:617.5~633.5nm | 点击下载 |
欢迎加入EEWorld参考设计群,也许能碰到搞同一个设计的小伙伴,群聊设计经验和难点。 入群方式:微信搜索“helloeeworld”或者扫描二维码,备注:参考设计,即可被拉入群。 另外,如您在下载此设计遇到问题,也可以微信添加“helloeeworld”及时沟通。
EEWorld Datasheet 技术支持