1、ARM-STM32校园创新大赛项目报告题 目: 基于stm32f4的蓝牙控制小车 学 校: 中南民族大学 指导教师: 视频观看地址:题 目: 基于stm32f4的蓝牙控制小车 关键词: STM32F4 LM2940-5.0 L298N FBT06_LPDB 蓝牙串口通信 androidFBT06_LPDB FBT06_LPDB 摘要 “基于stm32f4的蓝牙控制小车”是一个基于意法半导体与ARM公司生产的STM32F4 DISCOVERY开发板的集电机驱动模块、电源管理模块、stm32f4主控模块、蓝牙串口通信模块、android控制端模块。电机驱动模块使用了两个L298N芯片来驱动4路电机
2、,使能端连接4路来自主控板的PWM波信号,8个输入端接主控板的8个输出端口;电源管理模块使用了LM2940-5.0芯片进行12V到5V的转换,12V用于电机模块的供电,5V用于蓝牙模块、传感器等的供电;主控模块采用了MDK编辑程序,然后下载到主控板,实现硬件与软件的交互;蓝牙串口通信模块则是采用了FBT06_LPDB针插蓝牙模块,与主控板进行串口通信,同时与android手机进行通信;android控制端模块是一个集开启蓝牙、搜索蓝牙、控制小车等功能。用户可以通过android控制端进行控制小车的运动,实现一些用户需要的功能和服务。1. 引言蓝牙的创始人是瑞典爱立信公司,蓝牙技术是一种无限数据
3、与语音通信的开放性全球规范,它以低成本的近距离无线连接为基础,为固定与移动设备通信环境建立一个特别连接。手机之间通过蓝牙实现数据共享成为常理,将手机变为遥控器为人们的生活带来无限方便。遥控小车在工业、国防、科研等领域应用越来越广泛,例如说:消防遥控小车、探测小车等。本文详细阐述了使用蓝牙通信的手机遥控小车前行、倒退、左转、右转和停止等功能的软硬件设计过程。2. 系统方案 该系统分为电机驱动模块、电源管理模块、主控板、蓝牙通信模块、android控制端等5个模块,如图2.1所示:stm32f4主控板电源管理模块超声波测距模块蓝牙通信模块GPS导航模块其它待扩展模块音频输出电机驱动模块指示灯图2.
4、1 系统模块图3. 系统硬件设计3.1 电机驱动模块3.1.1 L298N的封装H 桥电路虽然有着诸多的优点,但是在实际制作过程中,由于元件较多,电路的搭建也较为麻烦,增加了硬件设计的复杂度。由于H 桥电路有诸多的优点,但是在实际制作过程中电路又比较麻烦,因此在本设计中我们采用H 桥集成电机驱动芯片L298。L298N 的工作原理和以上介绍的H 桥相同,引脚图如图3.1 所示:图3.1 L298N封装图3.1.2 L298N的原理图设计L298N 是ST 公司生产的一种高电压、大电流电机驱动芯片。该芯片采用15 脚封装。主要特点是:工作电压高,最高工作电压可达46V;输出电流大,瞬间 峰值电流
5、可达3A,持续工作电流为2A;额定功率25W。内含两个H 桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作有一个逻辑电源输入端,使内部逻辑电路部分在低电 压下工作;可以外接检测电阻,将变化量反馈给控制电路。使用L298N 芯片驱动电机,该芯片可以驱动一台两相步进电机或四相步进电机,也可以驱动两台直流电机。L298 的参考电路图如图3.2所示。图3.2 电机驱动电路原理图3.1.3 电机驱动模块实物1、控制板内部带5V逻辑电平转换芯片,不需要额外的5V供电。2、如果E
6、N1、EN2、EN3、EN4不接PWM调速信号,次脚需要和对应的管教短接。3、GND和12V接电机电源,其中12V可以接7V-24V电平,板子上的电源开关只是控制逻辑5V电平的开关,L298的12V电源不受此开关控制.4、输出端和输入端一一对应,当输入端为5V时,输出端也为高电平,输入端为低电平时输出亦为低电平。图3.3 L298N电机驱动模块实物图3.2 电源管理模块3.2.1 智能车电源设计要点电源是整个系统稳定工作的前提,因此必须有一个合理的电源设计,对于小车来说电源设计应注意两点:1. 与一般的稳压电源不同,小车的电池电压一般在6-8V 左右,还要考虑在电池损耗的情况下电压的降低,因此
7、常用的78 系列稳压芯片不再能够满足要求,因此必须采用低压差的稳压芯片,在本文中以较为常见的LM2940-5.0 为例。2. 单片机必须与大电流器件分开供电,避免大电流器件对单片机造成干扰,影响单片机的稳定运行。现在各种新型的电源芯片层出不穷,各位读者可以根据自己的需求自行选择电源芯片,对于本设计应该主要注意稳压压差和最大输出电流两个指标能否满足设计要求。3.2.2 低压差稳压芯片LM2940 简介LM2940 系列是输出电压固定的低压差三端端稳压器;输出电压有5V、8V、10V 多种;最大输出电流1A;输出电流1A 时,最小输入输出电压差小于0.8V;最大输入电压26V;工作温度-40+12
8、5;内含静态电流降低电路、电流限制、过热保护、电池反接和反插入保护电路。同时LM2940 价格适中而且较容易购买,非常适合在本设计中使用。LM2940-5.0 封装和实物如图3.4所示。图3.4 LM2940 封装和实物图如图3.5所示,采用两路供电,这样可以使用其中一路单独为STM32F4discovery电路板供电,指示灯等供电。另外一路提供L298N、舵机、蓝牙的工作电压,L298N 的驱动电压由电池不经任何处理直接给出。舵机可以用6V 供电,也可以直接用5V 供电。图3.5 电源模块原理图如图3.6中的PCB图:图3.6 电源模块PCB图图3.7 是运用腐蚀液自制的电源管理模块,具有1
9、2v5v的供电模块,可同时给电机模块和主控板(STM32DISCOVERY)供电:图3.7 电源管理模块实物图4. 系统软件设计41 主控板程序设计4.1.1 main程序设计主函数主要分为延迟时间初始化、串口接收模块程序、电机初始化三部分。主函数的流程图如图4.1所示:图4.1 主函数流程图主函数程序代码如下:int main(void) delay_init(168);/延迟时间初始化uart_init(9600);/串口初始化Direction(1);/电机初始化delay_ms(10);/延迟10msprintf( welcome to control the smart car!:n
10、r);/输入语句while(1);4.1.2 串口接收模块程序主控板接收到蓝牙从串口传来的数据后存入Res变量,然后通过分支程序来选择执行前进、后退、左转、右转和停止等功能。该模块的程序流程图如图2所示:图2 串口接收程序流程图4.1.3 修改PWM输出值程序该程序是基于“4_PWM的实现”中的程序改编的。代码如下:void Change_PWM(int duty1,int duty2,int duty3,int duty4)SCB-AIRCR=0x05AF00;/ 中断优先级分组 抢占:响应=3:1 RCC-AHB1ENR|=(1MODER|=0x000AA000;/ pc6789第二功能,
11、推挽输出 GPIOC-OSPEEDR|=0x000FF000;/输出速度为100m GPIOC-PUPDR|=0x00055000;/上拉 GPIOC-AFR0|=0x22000000;/pc6789的第二功能为AF2 GPIOC-AFR1|=0x00000022; RCC-APB1ENR|=(1PSC=83;/对84M时钟进行84分频,使得计数频率为1M TIM3-ARR=10000;/周期为10ms TIM3-EGR|=1;/产生一次更新时间 TIM3-CCMR1|=0x6060;/PWM模式1 TIM3-CCMR2|=0x6060;/PWM模式2 TIM3-CCR1=duty1;/1路P
12、WM TIM3-CCR2=duty2;/2路PWM TIM3-CCR3=duty3;/3路PWM TIM3-CCR4=duty4;/4路PWM TIM3-CCER|=0x1111;/使能比较输出 TIM3-CCMR1|=0x0808;/启动预装载 TIM3-CCMR2|=0x8080; TIM3-CR1|=1;/开始计时4.1.4 设置电机转向程序改程序将电机驱动模块的8个输入端口接到了主控板的8个GPIO口,通过推挽输出,从而控制电机的转向,代码如下:void Direction(int direction)SysTick_Config(SystemCoreClock / 1000); /时
13、钟中断设为1ms RCC-AHB1ENR |= 0x00000005; /使能GPIOA和GPIOD时钟 RCC-APB2ENR |= (1MODER &= 0xffff0000; /设置PA0,1,2,3为输出 GPIOA-MODER |= 0x00005555; GPIOA-OTYPER &= 0xFFFFff00; /设置PA0,1,2,3为推挽输出 GPIOA-OSPEEDR &= 0xffff0000; /设置PA0,1,2,3的输出速度为100M GPIOA-OSPEEDR |= 0x0000ffff; SYSCFG-CMPCR = 0x00000001; /使用IO补偿单元 GP
14、IOA-PUPDR &= 0xffffff00; /设置PA0,1,2,3无上拉,无下拉 GPIOA-BSRRH = 0x00ff; /复位GPIOA_BSRRH寄存器 GPIOA-BSRRL = 0x0055; elseGPIOA-MODER &= 0xffff0000; /设置PA0,1,2,3为输出 GPIOA-MODER |= 0x0000005555; GPIOA-OTYPER &= 0xFFFFff00; /设置PA0,1,2,3为推挽输出 GPIOA-OSPEEDR &= 0xffff0000; /设置PA0,1,2,3的输出速度为100M GPIOA-OSPEEDR |= 0x
15、0000ffff; SYSCFG-CMPCR = 0x00000001; /使用IO补偿单元 GPIOA-PUPDR &= 0xffffff00; /设置PA0,1,2,3无上拉,无下拉 GPIOA-BSRRH = 0x00ff; /复位GPIOA_BSRRH寄存器 GPIOA-BSRRL = 0x00AA;4.2 android客户端程序设计4.2.1 控制界面的布局控制界面主要运用了线性布局、相对布局和表格布局。整体采用线性布局,局部采用相对布局,而控制按钮采用了表格布局。控制界面的布局如图4.1所示:图4.1 控制界面的布局4.2.2 布局的代码如下: 4.2.3 android客户端的
16、界面如图4.2所示:图4.2 android控制界面4.2.4 发送按钮的代码sendButton= (Button)findViewById(R.id.btn_msg_send);sendButton.setOnClickListener(new OnClickListener() Overridepublic void onClick(View arg0) / TODO Auto-generated method stubString msgText =editMsgView.getText().toString();/获取编辑框内的内容if (msgText.length()0) sen
17、dMessageHandle(msgText);/发送编辑框的内容给串口editMsgView.setText();/清空编辑框editMsgView.clearFocus();/close InputMethodManagerInputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(editMsgView.getWindowToken(), 0);elseToast.makeText(mContext, 发送内
18、容不能为空!, Toast.LENGTH_SHORT).show(););4.2.5 控制按钮的代码以左转按钮为例:sendButton= (Button)findViewById(R.id.left);sendButton.setOnClickListener(new OnClickListener() Overridepublic void onClick(View arg0) String msgText =1; / 发送左转命令“l”if (msgText.length()0) sendMessageHandle(msgText);/发送“l”给串口editMsgView.setTex
19、t();/清空编辑框editMsgView.clearFocus();/close InputMethodManagerInputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(editMsgView.getWindowToken(), 0);elseToast.makeText(mContext, 发送内容不能为空!, Toast.LENGTH_SHORT).show(););5. 系统创新自从有了智能手机,机
20、器人的应用也就多了一个新的方向:手机控制机器人。2005年日本第二大电信运营商KDDI和机械制造商I Bee KK联合推出了第一款手机控制机器人。当然了,想要操纵这种机器人,你首先需要使用KDDI网络,并且用户的手机上,本身还需要带有蓝牙功能,然后再通过KDDI提供BREW方式下载机器人的驱动程式和控制系统。不过这种机器人的价格却相对高昂,预售市价约合人民币15000元。随着Android系统技术的普及,可以做个基于Android的客户端,在小车上装个接收蓝牙信号的FBT蓝牙接收模块,然后就可以通过客户端发送蓝牙信号,来对蓝牙小车进行控制控制,其接收可达15米,完全能适应对小车的要求。其中这个
21、FBT蓝牙接收模块是低耗能,这样就把更多的能量用在小车的驱动上。小车需要很大的马力和很好的灵活性以应对不同的地形。这辆车的车轮使用四驱的直流电机来驱动的,用PWM波来控制小车的速度,可以很方便的更改其速度,有主控板通过推挽输出来控制电机的翻转以让车子进行后退的速度。这样就可以胜任对小车的要求。6. 评测与结论首先,给电源模块上12v的电源,然后打开电机驱动模块开关,同时将主控板的供电端连接到电源管理模块。然后,在android手机上安装“蓝牙通信”应用程序后,打开该APP,然后选择“允许打开蓝牙”。点击设备列表中的“开始搜索按钮”,在设备列表中选择蓝牙模块的名字进行连接。完成上述工作以后,就可
22、以在手机上通过按下“start”、“left”、“stop”、“right”、“back”通过蓝牙给小车发送“前进”、“左转”、“停止”、“右转”、“后退”5个命令。小车可以解析命令轻松进行前进、后退、左转、右转和停止。附录图6-1 作品成果1图6-2 作品成果2目 录第一章 总 论 11.1项目概况 11.2研究依据及范围 31.3主要技术经济指标 41.4研究结论及建议 4第二章 项目建设的背景和必要性 62.1项目建设的背景 62.2项目建设的必要性 8第三章 项目服务需求分析 11第四章 项目选址与建设条件 134.1选址原则 134.2项目选址 134.3建设条件 144.4项目建设
23、优势条件分析 15第五章 建设方案 185.1建设规模与内容 185.2总体规划设计 195.3建筑方案 245.4结构方案 265.5给水工程 275.6排水工程 295.7电气设计 315.8暖通设计 345.9项目实施进度 35第六章 节能措施 376.1设计依据 376.2节能措施 37第七章 环境影响分析 397.1 环境影响分析 397.2 环境保护措施及治理效果 40第八章 消防与安全卫生 428.1 消防 428.2 劳动安全 438.3 卫生防护 44第九章 组织机构与运作方式 459.1 组织机构 459.2组织管理 469.3劳动定员 46第十章 投资估算 4710.1编制依据 4710.2 投资估算 4710.3资金筹措 48第十一章 经济效益评价 4911.1 成本核算 4911.2 利润估算 5111.3经济风险分析 5211.4财务评价结论 54第十二章 结 论 55