IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 三天让车立起来!STM32平衡车入门PID —— 第一天(硬件搭建) -> 正文阅读

[嵌入式]三天让车立起来!STM32平衡车入门PID —— 第一天(硬件搭建)

说明:本文章适用于STM32初学者,想完成一个好玩且有深度的项目但不知道从何下手的同学。
平衡车是我入门STM32的第一个实战项目,前前后后和我搭硬件的队友路总(硬件大佬,专注于PCB画板)搭了有七八版。从第一版V1.0手焊版到嘉立创PCB打板到最终的无线充电平衡车,我们碰到了几乎所有可能出现的问题,熬了几天夜硬着头皮解决,功能也是一项一项的添加,最终在学校的电赛选拔赛上拿到了一等奖,也是不负众望。毕竟经历过,所以写这篇文章的目的是让大家少走弯路,能够快速的、有目的性的做出属于自己的那个DIY平衡车,从实战中学习到知识才是最有效率最能检验你对知识的掌握程度。所以跟着我,三天让车站起来,不是梦!

任务需求

我们要做一个东西必须要清楚我们的目的是什么?这个东西要干什么,有什么作用,最终我们理想的效果是什么?在此我罗列一下我们做出来的平衡车所应达到的效果需求.如下所示:

  1. 平衡车能够实现基本的直立平衡;
  2. 平衡车相对静止时,前后抖动的距离不超过1cm;前后的倾斜角度不超过3度;
  3. 相对较强的抗干扰能力,收到外力干扰后能迅速调整到原来状态;
  4. 使用手机APP通过蓝牙可在一定范围内对小车的运动状态进行无线自由控制;

任务分析

首先呢,平衡车平衡车,第一要素是要平衡即就是能够立起来,立不起来其他的要求都白搭。我们要平衡,实际上是角度平衡那么我们就要有检测角度的模块。我们要对车轮速度进行控制,我们就要检测速度。通过实际角度的测量与平衡时的角度对比从而控制电机的前进或后退的速度从而达到平衡的目的。这就引出了我们的控制原理:PID闭环控制
所以说非常考验我们的代码能力就是我们要把控制原理转化成代码从而实现MCU对硬件的控制。
材料(基础部分)

  • 编码电机(A/B相)(2个):获取速度信息并作为控制目标。
  • 电机驱动TB6612FNG:驱动电机(STM32I/O口直接驱动电机能力不足)优点:体积小。
  • MPU6050陀螺仪:获取平衡车角度信息。
  • OLED:显示采集到的角度以及PID参数等(方便调试)。
  • HC-05蓝牙模块:无线控制小车状态。
  • 12V航模电池/3节18650电池:给电机供电
  • LM2596降压模块:降压给MCU供电

材料(拓展部分)

  • 红外循迹模块:二次开发——平衡车循迹
  • 超声波模块HC-SR04:二次开发——平衡车避障(跟随)
  • 大功率无线接收端模块:二次开发——无线充电
  • 大功率无线发射端模块:二次开发——无线充电

模块使用方法(硬件连接)

众所周知,硬件和软件是相辅相成的,硬件的接线是跟着软件部分的,例如我们驱动模块所需要的PWM波,stm32测速所需要开的定时器等等,所以我们在软件部分要有一个提前规划。
硬件框图

在这里插入图片描述
TB6612电机驱动
在这里插入图片描述

AIN1 AIN2 接单片机的I/O口,通过置高置低来控制电机旋转方向
真值表:
AIN1 0 0 1
AIN2 0 1 0
停止 正传 反转

HC-05蓝牙模块
使用前要先在AT模式进行配置。配置蓝牙名称、密码、波特率、主从机等(AT指令),蓝牙模块指示灯快闪是普通模式,慢闪是进入AT模式。
我们拿到蓝牙模块后
(1)通过杜邦线将蓝牙模块的VCC,GND,TX,RX分别接入USB TO TTL模块(串口)的VCC,GND,RX,TX引脚。
在这里插入图片描述

(2)打开串口上位机软件本人使用的是正点原子配套的XCOM,先按住蓝牙模块上的黑色按键在上电,我们可以看到蓝牙模块上的指示灯开始慢闪,这样我们就进入了AT模式。???注意:以这种方式进入AT模式,我们在串口上位机中波特率要设置为38400才能保持正常通信。
(3)在上位机中发送AT注意要以回车结尾,若收到OK,说明通信成功之后就可以设置其他内容了。我们可以查询手册,去发送相关指令,我只提咱们常用的几个指令:以下若配置成功则返回OK;

  • 设置/查询设备名称:

AT+NAME =Beijing\r\n ——设置模块设备名为:“Beijing”
AT+NAME?\r\n ——查询模块设备名

  • 设置/查询-配对码:
    AT+PSWD=Param\r\n Param:配对码(自己随意设置)
    AT+ PSWD?\r\n 默认值:1234
  • 设置/查询-串口参数:
    设置串口波特率:115200,2 位停止位,Even 校验
    AT+UART=115200,1,2,\r\n
    AT+ UART?——查询波特率

(4)设置波特率为115200;密码,名称随便设随自己心意;这样我们就配置好了,到时候接单片机串口通信的管脚就好(随程序而定)

在这里插入图片描述
MPU6050陀螺仪
在这里插入图片描述

原理大家有兴趣的可以百度,我就不在此赘述。
简言之,这个模块自带DMP可以解算出欧拉角,MPU6050得出来的姿态角有三种:PITCH(俯仰角)、ROLL(横滚角)、YAW(航向角)。我们安装时,要平放着放在车上。那么我们的车要立起来,要么是俯仰角要么是横滚角,航向角是Z轴上的我们暂时不用。
SCL和SDA是连接MCU的IIC接口,MCU通过这个IIC接口来控制MPU6050,INT是中断触发接口,陀螺仪每成功捕捉到一次数据,INT引脚的电平就会拉低触发外部中断。如果接GND,则MPU6050的IIC地址是:0X68,如果接VDD,则是0X69,我们默认接地。
我们所用到的管脚:
VCC,GND,SCL,SDA,AD0,INT(关键)
???陀螺仪要水平放置不然可能会自检过不了,从而无法使用。
电源部分
我们使用12V航模电池或者三节18650电池串联构成一个电压12V的电源,12V的电直接接入TB6612电机驱动模块的VM引脚,之后再通过LM2596降压(通过调节降压模块的电位器来控制电压降到5V)给单片机供电。所以设计时要在电源线路中加入开关,来控制开启和关闭。
OLED显示以及编码电机测速我放在软件部分来说
至此我们所需要的模块就可以焊接了。至于搭建一层还是两层大家自己可以选择,一层的话重心低程序好调,二层难度稍大。可以发动脑筋想一想其他新颖的布局,焊接时可以加几个按键,以备之后PID调参或模式的切换。建议先手焊或杜邦线连接,之后熟练了可以学习画PCB,打板制作更精美的平衡车。

硬件效果展示

第一版1??
在这里插入图片描述
第二版2??
在这里插入图片描述
最终版3??
在这里插入图片描述
在这里插入图片描述

搭建一个好的硬件是最终效果良好的一个保障,也能让我们的程序调参变得简单,我们只有再动手之后才能有提升。提升自己的动手能力,焊接能力,设计能力等等。
希望大家都能设计出属于自己的那个小车车。加油!奥里给!

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-10 13:34:55  更:2021-08-10 13:38:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:45:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码