找回密码
 注册

QQ登录

只需一步,快速开始

搜索

STM32的蓝牙遥控小车设计思路分享

[复制链接]
路漫漫 发表于 2020-5-20 20:22:46 | 显示全部楼层 |阅读模式
完整文档: 基于STM32的蓝牙遥控小车设计.doc (3.34 MB, 售价: 1 E币)
部分内容节选:
所谓小车控制实际上就是电机控制,本论文所设计的小车分为蓝牙通信,直流电机控制,舵机控制三大结构。
蓝牙通信使用收发一体式低功耗蓝牙模块HC-05,该模块最大优点是无需了解蓝牙传输协议,只需读取模块串口接受到的数据和通过串口将数据发送数去。
结构上小车使用金属底板,一体充压成型的铝固定件,将电机与传动轴紧密咬合在一起,增加了和汽车原理相似的差速结构,差速结构最大的好处体现在小车转弯时,可以通过内部的动力分配单元使内外侧轮速度不同。电机385高速电机带来更快的速度,后轮加入两颗法兰杯式轴承,确保了电机转动更加灵活。和专业的遥控赛车原理相同,使用两根拉杆通过转向舵机来控制小车的方向,大扭力舵机确保转向角度精确可靠。
动力系统使用一个直流电机和一个舵机。通过舵机控制左右方向,通过直流电机控制前进后退,实现小车的基本运动功能;通过对电机转速的调节控制小车的运动速度。根据实际情况,则表1-1是电机转动状态与小车运动方向的关系表。

表1-1 电机转动状态与小车运动方向关系表
运动状态
直流电机
舵机
前进
正转
居中
后退
反转
居中
左转
正转
左转
右转
正转
右转

2.1.2 主要软件资源

编程语言选用C语言:
C语言是一种计算机程序设计语言,属高级语言范畴。它既具有高级语言的特点,又具有汇编语言的特点。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序,代码清晰知精简,十分灵活。
1、java、.net、c++这些高级语言的基础都跟c语言类似的 所以c语言是编程语言的基础。
2、c语言用途非常广泛,大到卫星导弹,小到一个计算器,都可以用C语言来实现。 现在学的只是C语言的基本语法,要做真正有用的程序,还要道学很多东西,比如windows api,学了之后就知道怎么用C语言调用Windows api画窗口、按钮、进回度条等等,做出像QQ一样实用的程序。
3、C语言只是一门计算答机语言,说到底就是一种工具。它的用处就是可以用它编出能够运行的程序来,而这些程序可以实现某些人需要的功能。人通过学习c语言也可以更加深入的了解计算机,所以很多人都把c语言作为计算机入门的第一门语言来学习,因为学习起来相对简单一些。至于实际的意义,无非是多学会一门技能,更加深入对计算机的了解,为学习其他计算机语言打下好的基础。
采用标准的Windows应用程序μVision4作为开发环境,μVision4 是Keil公司提供的用于开发MCS-51系列芯片的汇编语言与C程序的集成开发环境,μVision4 环境包括工具条、菜单、编辑及显示多种窗口。μVision4 支持使用的Keil C51工具,包括宏汇编器、C编译器、连接定位器、目标代码到HEX的转换器。

2.2 硬件系统设计总框图

系统框图如下:

190.001.jpg
图1-1 小车系统框图

2.3 驱动模块

2.3.1 直流电机驱动模块

实验室中比较常见的电机驱动芯片是L298N芯片,L298N 是一种双H桥电机驱动芯片,其中每个H桥可以提供2A的电流,功率部分的供电电压范围是2.5-48v,逻辑部分5v供电,接受5vTTL电平。一般情况下,功率部分的电压应大于6V否则芯片可能不能正常工作。在原理上它内部集成H桥电路,其输出电流比较大,功率可以达到比较高。其固定输出电流可以达到2A,最高电流可以达到4A,最高工作电压50V,可以直接驱动感性负载,比如大功率直流电机,步进电机,电磁阀等,特别是其输入端可以与单片机的IO口直接相联,从而很方便地受单片机控制。当驱动直流电机时,使能端接高电平,两个输入端电平状态决定电流方向即决定电机转动方向,输出端接电机,从而实现电机正转与反转,实现此功能只需改变输入端的逻辑电平。
下图是L298N芯片内部原理图。
190.002.jpg
图2-1 L298N内部电路图
为了在实际使用中方便的使用该芯片,厂商将其设计为模块,仅留出控制接口。在该模块的设计中,续流二极管必不可少。电机类似于电感的性质,在转动过程中,尤其是高速转动时以及电机两端电压较高时,有可能会发生自感,为了防止电源关闭时自感电压击穿开关元件,才设置了这些二极管作为自感能量的释放途经。同时也是防止电机受外力作用运转时发电造成芯片损坏。
在本次小车设计中,因为只需控制一个直流电机,所以只使用到该模块的两个输入,两个输出引脚和一个使能端,输入引脚接入单片机的IO口,同时该IO口接了led指示灯来判断正反转状态,在6脚即EN A接入PWM信号,该信号由单片机的定时器TIM2产生,可实现速度由0-100%控制。具体电路图如下所示。
190.003.jpg
图2-2 L298N驱动模块图

2.3.2 舵机供电及工作原理

关于舵机的定义一直存在比较大的争议,使用者往往无法从根本上说出它与伺服电机的区别,而实际上,“舵机”这个词可以说是民间玩航模以及遥控车的玩家对其的称呼,舵机主要是由外壳、电路板、无核心马达、齿轮与位置检测器所构成。其工作原理是由接收机发出讯号给舵机,经由电路板上的 IC判断转动方向,再驱动无核心马达开始转动,透过减速齿轮将动力传至摆臂,同时由位置检测器送回讯号,判断是否已经到达定位。位置检测器其实就是可变电阻,当舵机转动时电阻值也会随之改变,藉由检测电阻值便可知转动的角度。一般的伺服马达是将细铜线缠绕在三极转子上,当电流流经线圈时便会产生磁场,与转子外围的磁铁产生排斥作用,进而产生转动的作用力。依据物理学原理,物体的转动惯量与质量成正比,因此要转动质量愈大的物体,所需的作用力也愈大。舵机为求转速快、耗电小,於是将细铜线缠绕成极薄的中空圆柱体,形成一个重量极轻的五极中空转子,并将磁铁置於圆柱体内,这就是无核心马达。这里的舵机工作原理是:在每个舵机内部都有一个基准电路,其作用是产生周期为20ms,宽度为1.5ms的基准信号,舵机控制信号(由信号线传入)由接收机的通道接收后进入信号调制芯片,获得直流偏置电压。然后将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转,这就是舵机能控制角度的原因。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。
在本次设计中,采用的是金属齿轮舵机MG996R,该舵机在需要精确控制角度变化的系统中被广泛使用,主要技术参数:无负载速度 0.17 秒/60 度(4.8V),有负载速度,0.13 秒/60 度(6.0V),扭矩: 13KG。从参数上看,其角度控制精确快速,保证转向的可靠性
舵机的控制信号是PWM信号,利用占空比的变化改变舵机的位置。一般舵机的控制要求下图所示。
190.004.jpg
图2-3 舵机控制图
小车的舵机控制信号由单片机的TIM2 CH4通道产生,舵机通过连杆带动前轮转向,实现前轮45-135度的转向角度变化。得益于单片机的强大处理能力和稳压电路供电,实际使用中转向角度准确稳定且精度高,使小车变得更加灵活。
由于舵机工作时所需电流比较大,且波动也比较大,根据实际情况测试发现如果不给舵机单独供电会对其他模块运行产生很大影响。给舵机单独供电,不但能提高电压,增大电流,以提供大的驱动功率,而且能改善单片机体统供电质量,提高抗干扰能力,是一比较优化的供电方案。
供电模块MP1584EN是一个高频率的降压开关稳压器,具有一个内部集成的高端高压功率MOSFET,它提供最大3A的电流输出,输入输出压差可以做大比较大,同时效率很高,体积很小,该模块被广泛应用于各种供电电路。简化示意图如下图所示。
190.005.jpg
图2-4 MP1584EN电源模块图

2.3.3 蓝牙模块供电及工作原理

蓝牙模块HC-05 是一个可双向数据传输的蓝牙串口模块,它采用蓝牙 2.0 协议,可与任何版本的蓝牙兼容通讯,包括与具有蓝牙功能的电脑、蓝牙主机、手机、 PDA、PSP 等终端配对,可实现串口透传功能。其最大的特点是驱动 HC-05 模块时只需要使用TTL 电平标准的串口即可(5V/3.3V 电压均可),而且支持的波特率范围很广,支持的波特率范围为 4800~1382400,它的这些特性,非常适合用于单片机系统扩展蓝牙特性。
在小车中,该模块主要功能是接受手机蓝牙的信号,然后将该信号传给单片机,单片机经过处理后作出相应指令。实际测试中发现该模块同样对电源稳定性要求较高,因此也才用单独供电模块,原理图如下。
190.006.jpg 190.007.jpg
图2-5 蓝牙模块及供电模块图
供电模块MP1584EN是一个高频率的降压开关稳压器,具有一个内部集成的高端高压功率MOSFET,它提供最大3A的电流输出,输入输出压差可以做大比较大,同时效率很高,体积很小,该模块被广泛应用于各种供电电路。简化示意图如下图所示。


2.4 总电路 190.008.jpg
图2-6 小车整体电路图

3 软件系统设计3.1 选择编程环境

设计中使用的软件主要有KEIL,Multisim,Visio Studio,Matlab,其中KEIL为主要的软件环境,Visio Studio主要用于图新界面的设计,Matlab为辅助软件用于获取滤波器设计的参数,Multisim主要用于电路仿真。

3.2 建立新工程

首先使用KEIL软件先建立一个新工程,这里命名为DigitalScope,工程建立步骤如下:

1:打卡KEIL软件,点击Project->New uVision Project,新建工程命名为DigitalScope。

190.009.jpg    190.010.jpg

图3-1 新建工程

2:选择所使用的芯片型号,我这里使用的是STM32F407ZET6,所以选择的是这个型号;

3:芯片型号选择完成后我们就完成了新项目的创建了,工程新建完成后的界面如图,此时只是一个空的项目,什么内容都没有添加。

190.011.jpg       190.012.jpg

图3-2 选择芯片型号图 图3-3 新建空的工程

3.3 添加STM32F4官方驱动文件

由于刚才新建的新项目只是一个空的项目,接下来我们需要添加ST公司的官方底层驱动库,ST的官方底层驱动库分为库函数版和寄存器版,这里我们采用的是库函数版本,不过在实际代码编写的时候可以库函数与寄存器混合使用,ST官方驱动库的添加方法如下:

1:打开KEIL的工程项目管理器,如图3.4:

190.013.jpg

图3-4 工程项目管理器

2:将Project Target命名为DigitalScope,然后在Groups中新建ST官方底层标准库文件组StdPeriph_Driver,并且在Files中添加驱动文件:

190.014.jpg

图3-5 新建文件分组以及添加标准库文件

3:要使得芯片能够正常工作。我们还需要添加组基本的启动文件,新建分组MDK-ARM,添加启动文件以及芯片系统文件,如图所示:

190.015.jpg     190.016.jpg

图3-6 添加启动文件


3.4 添加硬件文件


在Keil编写好的代码,通过编译后,下载到单片机。我们只能看到两种结果:第一实验成功,展现出我们想要的效果;第二实验不成功,什么效果都没有看到。失败的原因是什么,通过硬件测试,我们无法看到代码在单片机内部里面如何运行、变量是如何传递、变量的变化情况等等。由此可见,它的调试功能是非常强大而且重要的。

190.017.jpg

图3-7 Keil MDK软件界面图
本次开发使用的是ST公司最新的HAL库,并且使用该公司最新推出的图形化编程软件STM32CubeMx。HAL库对外设操作进行了细致的封装封装,几乎所有外设操作都可以用HAL库中函数实现,让用户不用很了解甚至完全不去学习外设细节就可以编程操作。对于熟悉C语言,但第一次接触STM32甚至单片机的人来说,使用起来非常方便容易。另外HAL库也对中断进行了一定程度的处理,这让用户很大程度上不用理会中断函数了——HAL库中已经有比较完善的中断处理函数,只需要声明回调函数,在回调函数里做相应处理就好了。

3.5程序设计思路及部分模块程序

3.5.1 程序总体设计思路

众所周知整个小车控制系统的程序设计采用模块化的编程思想,整个主程序的流程图如图3-8。
190.018.jpg
图3-8 程序逻辑图
3.5.2 单片机控制程序设计
单片机主要是用来接收手机通过串口发送给蓝牙模块的数据,根据不同的数据做出不同的反应。如图3-9所示:
先进行初始化设置,注意串口和蓝牙模块的波特率一致,本设计选取波特率为9600。再判断接收数据“w”“a”“x”“d”“s”分别对应图3-9的“前进”
“左转”“后退”“右转”“停止”。


190.019.jpg
图9 控制程序流程图

3.5.3 调试蓝牙
HC-05是一个串口蓝牙通信模块,内部的芯片上封装了蓝牙通信协议以及用于调试的AT指令集,功能是:可以通过蓝牙接受数据,再从串口通信协议从针脚发送出去,也可以从串口接受消息,再经过芯片用蓝牙发送出去,相当于通信无线到有线通信的一个桥梁。
AT指令是应用于终端设备与PC应用之间的连接与通信的指令。AT即Attention。每个AT命令行中只能包含一条AT指令;对于AT指令的发送,除AT两个字符外,最多可以接收1056个字符的长度(包括最后的空字符)
我们将蓝牙模块(HC-05)通过转换器(TTL转USB)连接到电脑上, 在电脑上使用串口调试软件(CoolTerm)向蓝牙模块发送特定的AT指令来对蓝牙模块的一些参数,比如设备名称、配对码、主从角色等等。
1 将串口蓝牙模块(HC-05) 与PC相连接
使用 USB转TTL模块 连接 HC-05,连线如下图:
190.020.jpg
连线:GND--GND;5V--5V;RX--TX;TX--RX
190.021.jpg
要按住RST键连接USB,才能进入AT调试模式
按住蓝牙模块上的RST键,插入PC机的USB口,松开RST键,进入AT指令调试模式,标志是蓝牙模块上的红色指示灯慢速闪烁
如果不按住RST键直接连接USB口的话,红色指示灯会快速闪烁,标志进入蓝牙连接模式
2 打开CoolTerm,建立串口通信连接
将蓝牙模块连接到PC上后,查看设备管理器,打开CoolTerm软件,点击【Options】图标进入选项设置,【Port】选项选择设备管理器中CH340对应的端口(根据电脑的不同,不一定是COM5),【Baudrate】修改为 38400,然后点击底部的【OK】确定
190.022.jpg
进入设置,修改端口和波特率
设置完成后,点击软件上方的【Connect】图标
3 使用AT指令调整蓝牙模块的参数
【Connect】成功后,依次点选菜单栏上的【Connection】→【Send String】,会出现一个消息发送框,通过这个可以向蓝牙模块发送AT指令,如下图:
190.023.jpg
输入“AT+回车”
注意,使用AT指令的时候一定要回车到第二行再点击【Send】发送
AT指令集
分别输入如下指令,查看设备的当前状况
“AT”:回复“OK”,说明设备正常。
“AT+UART”:查看设备的串口通信参数,本实验模块蓝牙模式的波特率为9600
“AT+ADDR”:查看设备的蓝牙地址
“AT+ROLE”:查看设备的主从转台,“0”为从模式,“1”为主模式
“AT+PSWD”:查看设备当前的配对码,默认是1234
“AT+NAME”:查看设备当前的名称,默认是 HC-05
“AT+RESET”:重启设备
用AT指令配置设备
发送完上述AT指令查看完设备信息后,需要根据你的情况修改一些设备信息,方法是,在相应的AT指令后加“=”号,输入要修改的信息即可,本项目主要修改信息如下例
  •                               “AT+ROLE=0”:设置蓝牙设备为从模式
  •                               “AT+PSWD=123456”:修改配对码为123456,用户自定义
  •                               “AT+NAME=Carduino”:修改名称为Carduino,用户自定义
  •                               “AT+UART=9600,0,0”:修改蓝牙工作状态波特率为9600,无停止位和校验位
190.024.jpg
注意!每次都要回车到第二行再点击“Send”
由于硬件存在一定的缺陷,HC-05蓝牙模块在设置【NAME】参数时会有些问题,可能需要多设置几次
如果改名不成功,请使用“AT+ADDR”查询蓝牙设备地址,在手机上根据搜索到的设备地址来连接蓝牙模块
4 下载安装BlueSPP软件,设置按键消息
BlueSPP是一个手机端的蓝牙串口通讯通信工具,可以连接蓝牙设备,通过串行通讯协议发送消息,打开APP。
190.025.jpg
进入BlueSPP,连接设备,如图:
190.026.jpg

点右上角图标搜索设备并连接,如图:
190.027.jpg
输入事先配置的配对码,APP首页可以在聊天窗口中向设备发送消息,右滑,进入自定义键盘页面,每个按钮的“名称”可定义,按钮对应的“按下”,“松开”事件都可配置成发送特定消息。
190.028.jpg 190.029.jpg
配置按钮“左转”,其余配置如图表。
[td]
按键名称
按下发送
松开发送
前进
w

后退
x
s
左转
a
w
右转
d
w
停止
s

配置完成,就可以采用BlueSPP控制小车前进转向了。

4 总结
本文根据设计内容和要求,制定了设计方案,并逐步完成了硬件和软件部分的设计。整个系统以STM32为主控芯片,实现对小车简单运动的控制,其中硬件部分包括STM32F103及外围电路、电平转换电路、电机驱动电路、舵机控制电路,完成各部分电路设计并使用Altium Designer14画出电路设计原理图;软件部分在STM32集成开发环境Keil MDK下编写各模块程序,整个设计将硬件与软件相结合,实现对小车的控制,使小车能够做出前进、后退、左转、右转等动作,基本完成一个遥控小车该有的功能。论文基本完成了硬件和软件的设计,并使之符合设计要求。
本设计与实际应用相结合,随着智能控制技术与传感检测技术的飞速发展,作为智能机器人雏形的智能小车在探测、考古、娱乐各领域得到广泛应用,尤其在足球机器人研究方面有很好的发展前景。在智能机器人发展如火如荼之期,智能小车控制系统的研制为其提供了更有利的研制手段和方法,将有助于推动智能机器人的发展。由于初次接触STM32F10x系列芯片,对其先进的中断响应系统未能很好掌握,传感信号的接收选择了一般I/O口,不过基于STM32F103的高性能,其反应速度还是可以满足设计要求,但要充分利用芯片资源及更好的实时控制在这部分还有待改进;另外,对于小车行走中遇到障碍物的处理还未能实现。总的来说,设计方案是比较完善的,基本上达到了设计要求。
最后,在软硬件的结合下,制作出了实物,如下图所示:
190.030.jpg

图3-12 小车实物图

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|ELEOK |网站地图

GMT+8, 2024-4-27 02:30

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表