资源描述
目录
1、 设计目标
2、 设计背景
3、 设计内容
4、 实验方案
5、 系统软/硬件设计
6、 任务分配
7、 收获体会
8、 参考文献
9、 附件
一、设计目标
设计出一款“基于手机蓝牙技术的遥控小车 ”
二、设计背景
遥控小车起源于美国,由于政府对无线遥控小车研发的资助以及相关资助的推动作用,日本、美国、德国等工业大国在遥控小车技术上占据着明显优势。 我国的无线遥控小车研究工作始于20世纪中后期,在国家的863、973等技术发展计划的重点支持下,国内已大范围地进行无线遥控小车的研究。在研发应用方面取得了重要发展,但是与国际先进还存在一定的差距。 无线遥控实现方法包括蓝牙、红外、射频几种,其中蓝牙技术具有一定优势。目前在信息家电方面应用正在铺。
遥控小车起源于美国,由于政府对无线遥控小车研发的资助以及相关资助的推动作用,日本、美国、德国等工业大国在遥控小车技术上占据着明显优势。 我国的无线遥控小车研究工作始于20世纪中后期,在国家的863、973等技术发展计划的重点支持下,国内已大范围地进行无线遥控小车的研究。在研发应用方面取得了重要发展,但是与国际先进还存在一定的差距。 无线遥控实现方法包括蓝牙、红外、射频几种,其中蓝牙技术具有一定优势。目前在信息家电方面应用正在铺开。各种家电共用遥控,并可组网与公众互联网相接,共享有用信息。目前蓝牙技术实现无线遥控的短板在于传输距离短和芯片价格高方面。随着科技发展,这些问题正在逐步得以解决。 无线遥控机器人有着广阔的应用前景,但是目前国内的无线系统在传输可靠性、传输速度、抗干扰能力等方面仍有不足,亟待提高。
三、设计内容
(1) 利用安卓系统手机的蓝牙功能,配备车载的蓝牙装置,建立无线通信;
(2) 自行设计驱动电路并配备蓝牙模块,实现手机蓝牙遥控小车的进退与转向运动(10米范围内实现蓝牙连接,20米范围内均可操作)。 做到操作准确、响应迅速,实现无线遥控小车运动的设计要求;
(3) 启动手机主控软件,操作手机搜索车载蓝牙模块,搜索到用手机向单片机发送一个确认连接指令,单片机接收到指令以后进行自检并返回给手机一个应答信号,手机再确认连接,通讯建立,再可通过手机向小车发出进退与转向命令;
(4) 单片机对接收到的指令进行处理,而后启动相应电机动作实现命令内容。
图1 系统各结构框图
四、实验方案
1)利用单片机和安卓操作系统的智能手机编制主控界面;
2)蓝牙手机与车载的蓝牙装备配对,建立无线通信单,片机的RX 和TX接蓝牙模块,用于实现十米范围内遥控小车;;
3)自制驱动电机电路,STC89C52的P0~3接L298N的IN1~4,控制小车的转向;P2的0和1口接L298N的EN A和EN B,通过控制使能端实现小车轮子的转速控制,实现小车转弯。由于单片机STC89C52没有直接输出的PWM信号,所以利用单片机的两个定时器输出一定周期内的高低电平给L298N控制小车的转速。
4)嵌入式技术与单片机结合,按键操作遥控小车的行动、转向等运动。
图2 主程序流程图
采用蓝牙技术实现无线通信遥控,在无线兼容性、数据包传输、传输安全性、物联网组网方式等方面具备一定优势。
五、系统软/硬件设计
一、硬件部分:
A、小车底座、轮子、直流电机;
B、蓝牙串口从机模块;
C、STC89C52单片机、MAX232、L298N驱动模块、TLP521-4光耦;
D、单片机USB下载器及相关驱动;
E、蓝牙手机一部(安卓系统);
F、杜邦线若干;G、7.2V电池;
1、单片机主模块:
STC89C52特性:
8K字节程序存储空间;
512字节数据存储空间;
内带4K字节EEPROM存储空间;
可直接使用串口下载;
AT89S52单片机:
8K字节程序存储空间;
256字节数据存储空间;
没有内带EEPROM存储空间;
参数:
(1). 增强型8051 单片机,6 时钟/机器周期和12 时钟/机器周期可以任意 选择,指令代码完全兼容传统8051.[1]
(2). 工作电压:5.5V~3.3V(5V 单片机)/3.8V~2.0V(3V 单片机)
(3). 工作频率范围:0~40MHz,相当于普通8051 的0~80MHz,实际工作 频率可达48MHz
(4). 用户应用程序空间为8K 字节
(5). 片上集成512 字节RAM
(6). 通用I/O 口(32 个),复位后为:P0/P1/P2/P3 是准双向口/弱上拉, P0 口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为 I/O 口用时,需加上拉电阻。
(7). ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无 需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程 序,数秒即可完成一片
(8). 具有EEPROM 功能
(9). 具有看门狗功能
(10). 共3 个16 位定时器/计数器。即定时器T0、T1、T2
(11). 外部中断4 路,下降沿中断或低电平触发电路,Power Down 模式可 由外部中断低电平触发中断方式唤醒
(12). 通用异步串行口(UART),还可用定时器软件实现多个UART
2、电机驱动模块:
直流电机工作原理如下图所示:
电路原理图如下所示:
TLP521 是可控制的光电藕合器件,光电耦合器广泛作用在电脑终机,可控硅系统设备,测量仪器,影印机,自动售票,家用电器,如风扇加热器等。电路之间的信号传输,使之前端与负载完全隔离,目的在于增加安全性,减小电路干扰,减化电路设计。
TLP521-4 提供了4 个孤立的光耦中16 引脚塑料DIP 封装
集电极-发射极电压: 55V(最小值)
经常转移的比例: 50 %(最小)
隔离电压: 2500 Vrms (最小)
L298N是ST公司生产的一种高电压、大电流电机驱动芯片。该芯片采用15脚封装。主要特点是主要特点是主要特点是主要特点是:工作电压高工作电压高工作电压高工作电压高,最高工作电压可达最高工作电压可达最高工作电压可达最高工作电压可达46V;输出电流大输出电流大输出电流大输出电流大,瞬间峰瞬间峰瞬间峰瞬间峰值电流可达值电流可达值电流可达值电流可达3A,持续工作电流为持续工作电流为持续工作电流为持续工作电流为2A;额定功率额定功率额定功率额定功率25W。内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。
使用直流两用驱动器可以驱动两台直流电机。分别为M1和M2。引脚A,B可用于输入PWM脉宽调制信号对电机进行调速控制。对于实现电机正反转,输入信号端IN1接高电平输入端IN2接低电平,电机M1正转。(如果信号端IN1接低电平, IN2接高电平,电机M1反转。)控制另一台电机是同样的方式,输入信号端IN3接高电平,输入端IN4接低电平,电机M2正转。(反之则反转),PWM信号端A控制M1调速,PWM信号端B控制M2调速。
L298N工作性质:
3、晶振:
提供外部时钟
4、单片机复位模块:
5、电源模块:
给单片机供电使用
6、串口通讯模块:R232的通过TXD、RXD给单片机下载程序
串口R232特点:
(1)接口的信号电平值较高,易损坏接口电路的芯片,又因为与TTL电平不兼容故需使用电平转换电路方能与TTL电路连接。
(2)传输速率较低,在异步传输时,波特率为20Kbps;
(3)接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。
(4)传输距离有限,最大传输距离标准值为50英尺,实际上也只能用在15米左右。
串口R232的制作:
使用14个引脚的MAX232驱动器/收发器来制作。MAX232的构成: 第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。
第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。 其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。 8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。
TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。
第三部分是供电。15脚GND、16脚VCC(+5v)。
MAX232工作时序如下图所示:
7、蓝牙模块:
与用户产品的连接原理图 以及实物图
BT20模块的TXD需要和外部单片机的RXD相连,BT20模块的RXD需要和外部单片机的TXD相连。模块供电是3.3V 。
1、核心模块,引出接口包括VCC,GND,TXD,RXD,预留LED状态输出脚,单片机可通过该脚状态判断蓝牙是否已经连接,KEY引脚对从机无效
2、led指示蓝牙连接状态,闪烁表示没有蓝牙连接,常亮表示蓝牙已连接并打开了端口
3、底板设置LDO,输入电压3.6~6V,未配对时电流约30mA,配对后约10mA,输入电压禁止超过7V,绝对禁止接反电源!
4、接口电平3.3V,可以直接连接各种单片机(51,AVR,PIC,ARM,MSP430等),5V单片机也可直接连接,无需MAX232也不能经过MAX232!
5、空旷地有效距离10米,超过10米也是可能的,但不对此距离的连接质量做保证
6、配对以后当全双工串口使用,无需了解任何蓝牙协议,但仅支持8位数据位、1位停止位、无奇偶校验的通信格式,这也是最常用的通信格式,不支持其他格式。
测试方案:
测试指令集如下所示:
a、测试通讯
发送:AT (返回 OK,一秒左右发一次)
返回:OK
b、改蓝牙串口通讯波特率
发送:AT+BAUD1
返回:OK1200
发送:AT+BAUD2
返回:OK2400 ……
BAUD1---------1200
BAUD2---------2400
BAUD3---------4800
BAUD4---------9600 (默认就是这个设置)
BAUD5---------19200
BAUD6---------38400
BAUD7---------57600
BAUD8---------115200
BAUD9---------230400
BAUDA---------460800
BAUDB---------921600
BAUDC---------1382400
Ø 设置超过 115200 后用电脑无法使用,要用单片机编程于高于 115200 才能使用此波特率和重新发 AT 命令设低波特率
Ø 用 AT 命令设好波特率后,下次上电使用不需再设,可以掉电保存波特率。
手机端控制界面如下图所示:
二、软件部分:(1)、Keil uVision;(单片机程序开发端)
(2)、安卓系统控制操控软件;(安卓手机应用程序开发套件)
(1)宏定义以及函数定义
#include<reg52.h>
#define uchar unsigned char
#define V_TH 0XFF
#define V_TL 0XF6
#define V_TMOD 0X01
void init_sys(void); /*系统初始化函数*/
void f_left(); //前进左转
void f_right(); //前进右转
void b_left(); //后退左转
void b_right(); //后退右转
void forward(); //前进
void back(); //后退
void stop(); //停止
//控制小车正反转
sbit IN1 = P0 ^ 0; //STC89C52的P0^0-P0^4输给光耦的
sbit IN2 = P0 ^ 1; D9-D12,光耦光电耦合器后,输出给驱动
sbit IN3 = P0 ^ 2; 芯片L298N IN1-IN4实现小车的正反转
sbit IN4 = P0 ^ 3;
//控制小车转速
sbit ENA = P2 ^ 6; //STC89C52的P2^和 P2^7输出的PWM sbit ENB = P2 ^ 7; 信号给L298ND的ENA 和ENB,调节小
车的转速
uchar ZKB1 = 80, ZKB2 = 80; //控制轮子转速
uchar tmp; //存放串口数据
(2)单片机串口初始化以及小车儿转向控制
void main (void)
{
init_sys();
ENA = 0;
ENB = 0;
ZKB1 = 90;
ZKB2 = 90;
IN1 = 0;
IN2 = 0;
IN3 = 0;
IN4 = 0;
TMOD |= 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率
TH1 = 0xFD; // 波特率9600
TL1 = 0xFD;
SCON = 0x50; // 设定串行口工作方式
PCON &= 0xef; // 波特率不倍增
TR1 = 1; // 启动定时器1
while(1)
{
if(RI) // 是否有数据到来
{
RI = 0;
tmp = SBUF; // 暂存接收到的数据
switch(tmp)
{
case 'a':
forward();
break;
case 'b':
back();
break;
case 'c':
f_left();
break;
case 'd':
f_right();
break;
case 'e':
b_left();
break;
case 'f':
b_right();
break;
case 'g':
stop();
break;
}
}
}
}
/******************************************************
*函数功能:对系统进行初始化,包括定时器初始化和变量初始化*/
void init_sys(void) /*系统初始化函数*/
{
/*定时器初始化*/
TMOD = V_TMOD;
TH0 = V_TH;
TL0 = V_TL;
TR0 = 1;
ET0 = 1;
EA = 1;
}
/*********************************************
*函数功能:控制方向*/
void forward()
{
IN1 = 1;
IN2 = 0;
IN3 = 1;
IN4 = 0;
}
void back()
{
IN1 = 0;
IN2 = 1;
IN3 = 0;
IN4 = 1;
}
void f_left()
{
ZKB1 = 90;
ZKB2 = 45;
IN1 = 1;
IN2 = 0;
IN3 = 1;
IN4 = 0;
}
void f_right()
{
ZKB1 = 45;
ZKB2 = 90;
IN1 = 1;
IN2 = 0;
IN3 = 1;
IN4 = 0;
}
void b_left()
{
ZKB1 = 90;
ZKB2 = 45;
IN1 = 0;
IN2 = 1;
IN3 = 0;
IN4 = 1;
}
void b_right()
{
ZKB1 = 45;
ZKB2 = 90;
IN1 = 0;
IN2 = 1;
IN3 = 0;
IN4 = 1;
}
void stop()
{
IN1 = 1;
IN2 = 1;
IN3 = 1;
IN4 = 1;
}
/********************************************************
/*中断函数*/
void timer0(void) interrupt 1 using 2
{
static uchar click = 0; /*中断次数计数器变量*/
TH0 = V_TH; /*恢复定时器初始值*/
TL0 = V_TL;
++click;
if (click >= 100) click = 0;
if (click <= ZKB1) /*当小于占空比值时输出高电平,高于时是低电平,从而实现占空比的调整*/
{
ENA = 1;
}
if (click > ZKB1)
{
ENA = 0;
}
if (click <= ZKB2) /*当小于占空比值时输出高电平,高于时是低电平,从而实现占空比的调整*/
{
ENB = 1;
}
if (click > ZKB2)
{
ENB = 0;
}
}
六、任务分配:
七、收获体会
八、参考文件
1、ALtiun Designer Winter 09 电路设计入门与提高 化学工业出版社
2、C语言程序设计现代方法第2版 人民邮电出版社
3、51单片机入门、提高、开发、拓展全攻略 电子工业出版社
4、电子技术 清华大学出版社
5、L298N数据手册 http://www.data-
6、
九、附件
1、电路原理图
2、完整程序代码
展开阅读全文