智能小车硬件解析
(蓝牙遥控、循迹)智能小车硬件解析
- 智能小车硬件解析
- 前言
- 一、单片机
- 1.什么是单片机
- 2.STM32F103C8T6
- 3.小车项目总览
- 4.器材清单
- 二、电机
- 1.直流减速电机
- (1)驱动方法
- (2)电机参数
- 2.带编码器的直流减速电机
- (1)驱动方法
- (2)什么是编码器
- (3)编码器对应参数
- 三、电机驱动
- 1.硬件简介
- 2.使用方法
- 3.对应逻辑
- 四、降压模块
- 1.硬件简介
- 2.使用方法
- 五、循迹模块
- 1.硬件简介
- 2.工作原理
- 3.循迹方法
- 六、蓝压模块
- 1.硬件简介
- 2.使用方法
- 后记
前言
- 本文针对智能小车项目的硬件部分进行解析,包括硬件的使用,和需要特别了解的硬件参数等。
- 肝了两宿凌晨2点多,希望能够让学弟学妹,对一个小车项目的硬件部分有一个宏观的认知,带着如何利用单片机去驱动这些硬件的思维去学习单片机,相信一定会有意想不到的效果。
- (什么意想不到的效果?忽悠人呢?)通读全篇后,见后记。
一、单片机
常用的单片机有Arduino,51单片机,STM32,MSP432等,本文使用的是STM32F103C8T6最小系统板。
1.什么是单片机
***{理解}:***
单片机相当于是人的大脑,能够控制与其连接的设备进行某种工作。
- 比如人脑可以通过神经信号,驱动手臂的抬起;单片机可以通过单片机上的某个特定地方输出信号,使和这个地方用导线相连接的器件进行某种工作。
- 人脑也可以通过手臂感受周围环境;单片机也可以通过某种器件采集环境信息,通过导线传回给单片机。
***{疑问}:***
人脑产生的是神经信号来控制整个人体。那单片机是通过什么信号来控制和他相连接的设备呢,如何控制呢?
***{答案}:***
单片机通过电信号,也就是高电平或低电平来控制外部设备和获取信息。和电平机连接的外部设备一般也是通过接收高电平或者低电平来执行某种动作,或者根据外界环变化来转化成高低电平,传回给单片机。
***{完善}:***
我们刚刚的例子可以说成:
-
eg:单片机可以通过单片机上的某个特定地方输出信号,使和这个地方用导线相连接的器件进行某种工作。
-
eg:单片机通过某个特定地方(IO口)输出高电平的电信号,使和这个IO端口用导线相连接的LED灯接收到高电平信号,从而点亮LED灯。驱动其他外设同理。
2.STM32F103C8T6
此单片机教程可参考B站正点原子官方教程,只需看重点的几个部分即可,后续整理后给出。
3.小车项目总览
【智能小车,要有能够处理事情的大脑,有能够观察环境的眼睛,有能够走动的腿】
- 主控芯片:像是人的大脑,根据感知系统反馈回来的信号完成对整个系统的控制。
- 感知系统:像是人的眼睛,将外界环境信息转化成高低电平信号,传给主控芯片。
- 执行系统:像是人的腿脚,根据主控芯片的指令,执行对应的前进,后退,转向等操作。
- 显示系统:根据主控芯片指令,显示一些想显示出来的信息,方便调试和使用整个系统。
- 供电系统:为整个系统提供合适各个器件工作的电压。
4.器材清单
这便是整个小车项目的总览,我们需要用到:
- STM32F103C8T6最小系统板 1块
- 小车底盘 1个
- 直流减速电机 2个
- 电机驱动 1个
- 12V电源 1个
- 降压模块 1个
- 循迹模块 4个
- 蓝牙模块 1个
- 杜邦线 若干
二、电机
电机分类很多很杂,比如直流电机,步进电机等。由于能力有限,读者可查询其他文章,详细了解各个电机的区别及适用场合。针对智能小车项目,本文将介绍直流减速电机和带编码器的直流减速电机。
1.直流减速电机
(1)驱动方法
- 驱动方法十分简单,只需要给两个端口分别接上12V电压的正负极即可。
- 哪个端口是正极,哪个端口是负极都可,分别对应电机正转和反转两种情况。
(2)电机参数
- 电机转速:单位是rpm时,代表每分钟转多少圈。
eg:200rpm,代表每分钟转200圈。 - 减速比:减速比是通过电机内部齿轮结构,将输入的转速按照一定比例减小到更低的转速后输出的比例,其目的是为了减速后可以获得更大的扭矩,计算公式=输入转速÷输出转速。
eg:100减速比,假设输入1000rpm,经过内部减速后获得10rpm的转速输出。
2.带编码器的直流减速电机
带编码器的直流减速电机,顾名思义,就是直流减速电机加上编码器。
(1)驱动方法
- 电机驱动:将漏在外面的两个电机驱动端子集成到一个接线端子里面,位列在接线端子的最上和最下处,对应M+和M-,接线方法同上,接电源正负极。
- 编码器驱动:编码器也是一个外设器件,故需要提供电压,且为5V。两个信号线A,B连接到单片机,提供给单片机脉冲数----->电机转动时,对应的脉冲数。
- 形象理解:也就是编码器每输出一个脉冲,对应电机走一个小位移,通过脉冲信号的累加,就能知道走了多少个小位移,在知道编码器转一圈的对地距离,就能算出这些个总共的小位移,折算成几圈,通过几圈就知道了,行走的距离。
- 疑惑:为什么要有两个信号线A,B?其实这两个信号线传递的脉冲,会永远存在90°的相位差,通过判断A,B输出的脉冲信号哪个在前哪个在后,来判断编码器是正转还是反转,也就对应了可以判断,电机是正传还是反转。
(2)什么是编码器
- 编码器,就是通过输出的脉冲数进行换算,能够告诉单片机,我当前电机运动的速度是多少,位移是多少。
- 不完全理解是,通过内部机械结构,能够在电机转动一圈后,发射出对应数量的脉冲数。
eg:电机转动一圈,编码器发射出13个脉冲数,这些脉冲数就可以被单片机捕获到,当单片机捕获到13个脉冲数后,就可以判断出电机是转动了1圈。 - 测量速度:通过读取单位时间脉冲信号的数量,就可以达到测速的效果。
- 测量距离:通过脉冲信号的累加,和编码器的码盘周长(转一圈对地的距离)便可以计算出行走的距离。
(3)编码器对应参数
-
线数:单位是ppr,含义是编码器的分辨率,也就是电机转一圈发出的脉冲数。
eg:如500线,也就是500ppr,代表电机转动1圈,编码器发射出了500个脉冲。当编码器的线数越高,其分辨率越高,代表能够识别到电机转动的最小刻度越小,代表能够控制的越精准。 -
倍频:编码器没有倍频技术,是单片机接收编码器的脉冲后,处理编码器脉冲时通过编码器输出脉冲(A与B相)的相位差关系实现倍频技术,STM32通常将读取到的编码器脉冲设置成4倍频,这样分辨率提高,方便更精准的控制。
三、电机驱动
电机驱动,顾名思义,就是驱动电机的装置。
- 疑问:电机不是只需要给两个端口加上电压就可以转动了,为什么还要用到电机驱动呢?
- 回答:因为直流电机是大电流感性负载,单片机IO口的带负载能力较弱,因此我们需要功率放大器件,也就是用到了电机驱动,并且使用电机驱动后,就可以通过单片机IO口输出高低电平的不同排列组合,从而控制电机的前进,后退,停止等。
- 模块:常用的电机驱动模块有TB6612FNG电机驱动模块和L298N电机驱动模块。
- 介绍:本文电机驱动原理不做讲解,可以通过阅读其他文章了解。本文仅从应用的角度介绍L298N电机驱动模块的使用方法。
1.硬件简介
一个L298N模块可以驱动两个电机,假设为电机1和电机2,且L298N电机驱动模块供电部分已连接好:
- A通道使能、A通道使能旁边相邻的两个单片机IO控制输入端口(IN1和IN2)、马达A输出端口,这三部分为控制电机1的输入和输出端口。
- 其中单片机发送控制信号给A通道使能和A通道使能旁边相邻的两个单片机IO控制输入端口;经过电机驱动内部转换后,由马达A端口输出,起到由单片机经过电机驱动控制电机的效果。
- 电机2的控制同电机1,只不过输入输出端口不同,其为B通道使能,单片机IO口输入的地方对应为(IN3和IN4),经过电机驱动转换后,马达B输出信号,控制电机的运动。
2.使用方法
-
前置知识:板载5V输出使能,是一个电平为5V的控制信号,当此信号输入有效时,且电机驱动模块供电正常时,电机正常工作。否则即使电机驱动模块供电正常,电机也不能正常工作。
-
模块供电:
1.1: 常规接法:输入电压为12V时,将板载5V输出使能处的跳线帽插上,将12V输入接入12V电压,电源地接负极,5V不接入。
1.2 :非常规接法:输入电压为18V左右时,首先要将板载5V输出使能处的跳线帽拔除,将12V输入接入18V电压,电源地接负极,5V输入端口外部接入5V电压对L298N内部逻辑电路供电。注意的是,若5V输入端口输入的电源和给单片机供电的电源不是一个的话,需要将L298N的地和单片机的地连接在一起。 -
马达输出:
马达A输出的两个端口对应了一个电机的电源线正负极,马达B输出的两个端口对应了另一个电机的电源线正负极。 -
信号输入:
3.1: 控制电机全速运动:对于使电机1全速运动而言,逻辑输入端IN1, IN2经过电机驱动内部转化后,对应马达A输出口,全速则不用拔去ENA的跳线帽,此时使能端为5V电机满占空比驱动,全速运行;电机2同理。
3.2: 控制电机变速运动:对于使电机1变速运动,只需要将ENA跳线帽拔出,在A通道使能引脚上接上单片机输出的PWM即可,其他操作同控制电机全速运动;电机2同理。
PWM使啥?:不完全理解就是,在合适的信号频率下,通过改变一个周期内的占空比,来改变输出的有效电压。可参考:链接: STM32学习笔记(白话文理解版)—搞懂PWM输出
3.对应逻辑
一定要根据自己购买的L298N资料来对应逻辑关系:
以上图为例:
- 通过使能口A和使能口B接收单片机传来的PWM波,通过电机驱动内部转化后经过马达A和马达B输出,从而使小车控制车轮的电机得到对应的不同大小的电压值,从而控制小车速度。
- 通过IN1,IN2,IN3,IN4控制小车前进,后退,停止,旋转:
当IN1=1,IN2=0时,电机1正转;IN3=1,IN4=0时,电机2正转,对应了小车前进。
当IN1=0,IN2=1时,电机1反转;IN3=0,IN4=1时,电机2反转,对应了小车后退。
当IN1=1,IN2=0时,电机1正转;IN3=0,IN4=1时,电机2反转,对应了两个车轮一个正转,一个反转,就产生了差速,对应了小车的旋转。
四、降压模块
降压模块,就是将高电压转化成适合单片机工作的低电压的模块,可根据自己的需求,自行选择对应的降压模块。例如本文用到的电机驱动需要12V的电压,所以我购买了可以输出12V电压的电池,但给单片机供电需要5V的电压,故利用降压模块,将12V电压转化成5V电压,这样我就可以利用每转化前的12V给电机驱动供电,用转化后的5V给单片机供电,用一块电池解决了不同模块需要用到不同电压的问题。用到的模块为LM2596HVS降压模块。
1.硬件简介
- 输入:未降压前的电压正负极
- 输出:降压后的电压
- 调节电位器:通过调节旋钮改变降压后输出电压的值
2.使用方法
- 先正确的接输入电源(4.5-50V之间)
- 再用万用表监测输出电压并调电位器到想要的幅值
- 一般顺时转动是升压,逆时转动是降压
五、循迹模块
常用的循迹方式有,利用摄像头OpenMV进行循迹,灰度传感器进行循迹,红外传感器进行循迹,本文详细介绍TCRT5000红外反射传感器
1.硬件简介
- VCC:接电源正极(3.3V-5V)
- GND:接地
- DO: 数字信号高低电平输出
- AO:模拟信号输出(不同距离输出不同的电压,一般不接)
2.工作原理
TCRT5000传感器的红外发射二极管不断发射红外线
- 当遇到黑线时,由于黑色具有较强的吸收能力,发射出的红外线没有被反射回来,导致其上的光敏三极管处于关闭状态,此时开关指示灯熄灭,DO引脚输出高电平
- 当遇到白线时,发射出的红外线被反射回来,导致其上的光敏三极管处于打开状态,此时开关指示灯点亮,DO引脚输出低电平
- 利用单片机检测DO引脚输出的信号是高电平还是低电平,即可根据检测到的高低电平控制小车的方向。
总结:
感应到黑线,指示灯灭,DO引脚输出高电平
感应到白线,指示灯亮,DO引脚输出低电平
3.循迹方法
当XJ1、XJ2、XJ3、XJ4都没有碰触到黑线时,小车执行直走程序
当XJ1、XJ2、XJ4没有碰到黑线,XJ3碰到黑线时,小车执行右转程序
当XJ1、XJ2、XJ3没有碰到黑线,XJ4碰到黑线时,小车执行右转程序,只不过右转程度更大
左转同理,如此循环,便达到了只能使黑线在小车正中间行驶的效果,也就是小车沿着黑线行驶,这便是循迹效果。可对比上图小车转弯角度。
六、蓝压模块
蓝牙我们在熟悉不过了,同无线蓝牙耳机的使用方法一样,我们将蓝牙模块和单片机连接后,就能通过特定的手机端APP发送给蓝牙信息,蓝牙根据得到的信息,就可以告诉小车该进行什么操作。
注意:蓝牙只是传递信息,具体控制小车执行前进,后退,转向等操作还是单片机完成的,只不过我们可以设置成,当蓝牙接收到前进指令后,单片机根据蓝牙传来的数据去执行让小车前进的操作。
1.硬件简介
蓝牙模块一共有两种模式:配置模式和正常模式
-
配置模式接线:
(1) 准备一个USB转串口的模块:
(2)蓝牙模块有四个引脚:TX、RX、VCC、GND接线方式如下:
(3)将USB端口插入电脑,即可利用AT指令对蓝牙模块进行自定义设置
eg:主从机、波特率、密码、连接等一系列信息,并且蓝牙模块具有断电保存的功能,一般只需要配置一次。 -
正常模式接线:
按照下图将蓝牙模块引脚和单片机相连接即可:
2.使用方法
配置模式:配置模式需要将蓝牙模块经过USB转串口模块连接到电脑上,按住蓝牙模块上小按键,即可进入配置模式。在电脑上通过串口调试助手,利用AT指令,对蓝牙模块进行设置,如设置蓝牙名称,蓝牙密码等,能力有限,本文不做介绍。
正常模式:配置后断电在上电,进入正常模式,通过手机蓝牙串口APP连接蓝牙,即可通过蓝牙给单片机无线发送数据,通过编写软件程序,起到控制小车运动状态的效果。注:一般蓝牙模块在买回来时都是配置好的,可根据对应的使用说明进行蓝牙的连接。
后记
- 为什么说能有意想不到的效果呢?我自学单片机时就会产生很多疑惑,学会了输出高低电平,学会了输出PWM,学会了输入捕获…,但到头来,又好像什么也没学会,因为我根本不知道PWM,输入捕获都是干嘛的。所以,从应用单片机的角度去学习单片机,我想是个不错的法子,所以便有了这篇文章,但能力有限,有错误的地方和理解不对的地方还请批评指正。
- 言归正传:比如我想让电机转动,那么我就得了解,单片机是怎么从IO口输出高电平或者低电平的呢?怎么输出PWM呢,要想输出PWM我就得理解啥是定时器呢?要想从编码器中读取到脉冲我就得了解怎么才能设置定时器为输入捕获形式呢?要想和蓝牙模块产生通信,就需要了解,什么是USART串口?要想知道循迹模块返回的电平是高是低,就得了解读取IO口输出的电平…
- 写这么多吧,水平有限,希望能对大家有一点点帮助吧,写作业去了。