如何将简单做个双轮平衡车升级为更高级的版本?
摘要:markdown说明 title: 两轮平衡车 date: 2022915 02:51:25 cover: true mathjax: false summary: 平衡车,外壳设计,PID控制。 categories: Project
--- markdown说明
title: 两轮平衡车
date: 2022/9/15 02:51:25
cover: true
mathjax: false
summary: 平衡车,外壳设计,PID控制。
categories: Project
tags:
小项目
嵌入式
补档声明
由于我的博客服务器和备案到期,所以选择转移到博客园平台来进行保存和记录。以后也有可能会在上面不定期更新一些技术类博客。
写在前面
做这个项目的初衷是想把手头上从学长那里收来的一些电机和电池用上,清一波库存(实际上没用上收来的器件,反而自己又掏钱买了电机和端子╮(╯▽╰)╭)。
于是想到了做一个平衡车,这个算是工科大学自动化类的一个经典项目设计。
虽然咱是EEer,但是秉承要做就做全栈的优良传统,还是想从头到尾完成一个项目。
本文着重于讲解如何从无到有构思并制造出一个完整的系统,并使得它逐渐趋于完美,包括外观设计,接口设计,器件选型,PCB设计,焊接验证,代码编写。
在项目的完成过程中还能顺便学一下PID的思想,体会调参的快乐(痛苦)。
初步构思
首先既然是平衡车,那么一定要有两个轮子,当然还有通过转轴和轮子连接的电机。
而要实现对电机的控制,需要电机控制模块,也就是我们整个系统的控制板。控制板上还要有运动传感器,来检测当前的运动状态。
还需要有电池作为整个系统的电力来源,连接到控制板上。
仅凭一块控制板是难以同时放下电池并固定好电机的,所以我们还需要一层亚力克底板,作为系统的加固和支撑,亚克力材质也方便我们打孔固定。
这是网上的平衡车的3D模型,我们可以依照这个样子,慢慢构想出我们的模型。
选型与设计
这一节我会从系统的每个部件的所要满足的条件出发,环环相扣,完成每一个器件的选型。
电机
可以预见的是,这个平衡小车整个系统的重量并不会太重,可以估算出大概在0.2kg至0.5kg之间,橡胶轮对普通硬质地面的摩擦力系数大概在0.6至0.7左右。
所以让整个系统运动起来所需要提供的力无需太大,也就是不需要选用大力矩电机。
因为大力矩电机的转速往往不高,而我们系统在执行平衡动作的时候需要一个较快的响应,对转速和加速度有一定要求。
这样带来的另一方面的好处就是电机的工作电压无需太大,工作电流也不用太高。减少了变压电路设计的成本。
除此之外,电机还需要带编码器,它能够指示电机转了多少角度,便于我们对系统的速度进行控制。
经过一番挑选,选择了淘宝上的N20减速电机带编码器,6V电压,310转的版本。
电机虽然标称工作电压6V,但是由于电源设计比较常见的是输出5V的LDO,输出6V的比较少见
而这种电机对电压要求没那么严格,标称6V,但是5V下肯定也能使用,只不过力矩和最大转速会稍小一点(粗浅理解,不是机械专业的学生)。所以我们直接供5V电压也是没有问题的
DRV8833电机驱动芯片
比较经典的一款电机驱动芯片,2路输出,通过PWM调解转速,最大能输出2A电流。
运动传感器
选择经典MPU6050,网上有现成的模块,也有很多的例程和文档。
为了板子的整体美观,我选择使用芯片,QFN封装,会稍稍有点难焊接。
不过我有热风枪,也比较容易搞定,不行的话吹下来重新焊一下就可以了。
MCU
个人平常用的比较多的是单片机是ESP32和STM32,对于这个项目的话两者的性能和外设支持都是完全够用的。
为了方便使用手机控制,我选择使用ESP32,它支持蓝牙和WIFI连接,而且使用Aurdino IDE开发的话有一些现成的库可以使用,也避免了自己移植驱动带来的问题。
我手头上正好有个ESP32-Wroom32,乐鑫官方的封装好的模组,可以直接用,不需要自己设计外围的PCB板载天线,只要注意PCB布局的时候设置Keepout区域就可以了。
电源
通过上面的分析,我们需要两个电源域,5V和3.3V,分别供给电机和单片机以及芯片。
而一般的锂电池的供电电压是3.7V,肯定是不能直接供电的。
要么一节电池的3.7V升压到5V,再降压到3.3V。
要么两节电池串联7.4V降压到5V和3.3V。
一节锂电池的优势是轻便,但是带来的劣势是使用时间比较短,而且升压的话是要用到DCDC Boost电路的,对电路设计有一定的要求。
两节锂电池虽然会重一点,占空间会大一些,但是无伤大雅,我们有亚力克底板可以承接。
这样带来的好处是更容易的电路设计,使用两颗LDO就能转换出5V和3.3V的电压。
其实在这里我考虑过电池的充电管理,想的是找一颗适用于2节锂电池串联的充电芯片,SLM6800或者CN3762。
但是转念一想,好像可以直接把电池取出来充电,于是就没有设计这一块。
