蓝牙串口通信遥控小车.docx
- 文档编号:12122569
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:24
- 大小:1.46MB
蓝牙串口通信遥控小车.docx
《蓝牙串口通信遥控小车.docx》由会员分享,可在线阅读,更多相关《蓝牙串口通信遥控小车.docx(24页珍藏版)》请在冰豆网上搜索。
蓝牙串口通信遥控小车
蓝牙串口通信遥控小车
1系统方案论证及方案选择
2本系统软硬件设计
2.1单元硬件电路设计
2.2软件部分设计
参考文献
附录1原器件清单
附录2电路原理图及印制板图
附录3程序
1.系统方案论证及方案选择
1.总体设计方案
题目要求设计一个蓝牙串口遥控小车,通过对电机转速的控制,调节速度的大小,改变小车角度,并能实现转弯和旋转。
设计主要由主控单片机STC12C5A60S2驱动直流电机,使车轮工作,带动小车的转动。
2.基本工作原理
3.STC89C52RC有定时器T0T1T2,在自动控制领域经常把T1作为串口通信了T0作PWM调速用因此有必要把T2定时器拿出来作定时器作为声音频谱程序。
下面介绍T2的用法
STC89C52RC有定时器T2
•voidmain(void)
•{
•/*T2定时器赋预装载值,溢出16次就是1秒。
*/
•RCAP2H=(65536-5000)/256;
•RCAP2L=(65536-5000)%256;
•ET2=1;//允许T2定时器中断
•EA=1;//打开总中断
•TR2=1;//启动T2定时器
•while
(1);//死循环,等待T2定时器的溢出中断
•}
•voidTimer2_Server(void)interrupt5
•{
•staticuintTimer2_Server_Count;
•//定义静态变量,用来计数T2定时器的溢出次数(进入本函数的次数)
•TF2=0;
•//T2定时器发生溢出中断时,需要用户自己清除溢出标记,而51的其他定时器是自动清除的
•Timer2_Server_Count++;
•if(Timer2_Server_Count==16)//T2定时器的预装载值为0x0BDC,溢出16次就是1秒钟。
•{
•Timer2_Server_Count=0;
•P1_7=~P1_7;//LED11反转显示。
•}
•}
•voidTimer2_Server(void)interrupt5
•{
•staticuintTimer2_Server_Count;
•//定义静态变量,用来计数T2定时器的溢出次数(进入本函数的次数)
•TF2=0;
•//T2定时器发生溢出中断时,需要用户自己清除溢出标记,而51的其他定时器是自动清除的
•Timer2_Server_Count++;
•if(Timer2_Server_Count==16)//T2定时器的预装载值为0x0BDC,溢出16次就是1秒钟。
•{
•Timer2_Server_Count=0;
•P1_7=~P1_7;//LED11反转显示。
•}
•}
2.本系统软硬件设计
系统主要由单片机产生PWM信号,通过电机驱动轮胎的旋转,对其的转速进行控制,使车子行驶前进。
根据题目要求,我们的设计分硬件、软件两部分。
2.1单元硬件电路设计
2.1.151单片机最小系统的制作方案设计
2.1.2小车51系统+驱动(马达)+电池的接线
2.1.3蓝牙与单片机和马达的接线
附录1主要元器件清单
序号
名称
规格
数量
1
锂电池+配套充电器
186507.4V2200mAh锂电池+锂电充电器
1
2
L298N直流电机驱动板带5V3A输出
L298N驱动芯片双H桥直流电机驱动芯片
驱动部分峰值电流2A,带5V3A输出
1
3
ZK-1小车底盘
1个5mm加厚底盘+2个直流减速电机+2个优质橡胶轮胎+万向轮+电机导线+螺丝螺母+铜柱+码盘等
1
4
51蓝牙串口模块
蓝牙串口模块带电源转换电路支持5V供电
1
5
2.54mm杜邦线
40P彩色杜邦线双头1P对1P长20CM一排40根
1
6
瓷片电容
22P插件
2
7
单排针
40P1根
1
8
轻触开关
6*6*6
1
9
电解电容
10uf35V
1
10
电阻
470欧5色环直插
1
11
电阻
10K5色环直插
1
12
电路板
PCB覆铜板板或者5x7万用版
1
13
超声波测距模块
HC-SR04
1
14
超声波测距模块支架
支架需要配套的螺丝螺母
1
15
晶振
11.0592M
1
16
40PIC座
插件DIP40
1
17
单片机学习板
1
附录2电路原理图及印制电路板图
1.
2.
3.
4.
5.超声波串口模块
附录3程序
1.主程序
#include
#defineucharunsignedchar
#defineuintunsignedint
uintma,mb,mc,PWM=6000;
sbitout1=P1^2;//motoA1
sbitout2=P1^3;//motoA2
sbitout3=P1^4;//motoB1
sbitout4=P1^5;//motoB2
bitPWMIO;
voiddelay(uintt)//延时程序1
{
ucharj;
while(t--)
{for(j=1;j>0;j--);}
}
voidinit()
{
TMOD=0x21;//设置定时器1为工作方式2设置定时器0为工作方式1
TH1=0xfd;
TL1=0xfd;
TH0=(65536-20000)/256;//20ms定时器T0中断一次
TL0=(65536-20000)%256;
SCON=0x50;
TR1=1;
EA=1;
ES=1;
ET0=1;
TR0=1;
}
voidyou()//右急弯
{
out1=1;
out2=0;
out3=0;
out4=1;
delay(100);
}
voidzuo()//左急弯
{
out1=0;//右轮正转
out2=1;
out3=1;//左轮反转
out4=0;
delay(100);
}
voidqian()//前进
{
out1=0;
out2=1;
out3=0;
out4=1;
delay(100);
}
voidhou()//后退
{
out1=1;
out2=0;
out3=1;
out4=0;
delay(200);
}
voidleftup()//左前
{
out1=0;//右轮正转
out2=1;
out3=0;//左轮PWMIO输出调慢
out4=PWMIO;
}
voidrightup()//右前
{
out1=0;//右轮PWMIO输出调慢
out2=PWMIO;
out3=0;//左轮正转
out4=1;
}
voidleftdown()//左后
{
out1=1;//右轮后退
out2=0;
out3=PWMIO;;
out4=0;
}
voidrightdown()//右后
{
out1=PWMIO;
out2=0;
out3=1;//左轮后退
out4=0;
}
voidting()//停止
{
out2=0;
out4=0;
out3=0;
out1=0;
}
voidmain()
{
init();
while
(1)
{
if(RI)
{
RI=0;
ma=SBUF;
}
switch(ma)
{
case'a':
qian();break;//前
case'b':
hou();break;//后退
case'c':
zuo();break;//左急弯
case'd':
you();break;//右急弯
case'e':
leftup();break;//左前
case'f':
rightup();break;//右前
case'g':
leftdown();break;//左后
case'h':
rightdown();break;//右后
case's':
ting();break;//停
}
}
}
voidTT0()interrupt1
{
TH0=(65536-(20000-PWM))/256;//20ms定时器T0中断一次,进行PWM切换实现5ms高电平15ms低电平的PWM脉冲
TL0=(65536-(20000-PWM))%256;
PWM=20000-PWM;
PWMIO=~PWMIO;
}
voidser()interrupt4
{
}
2.子程序
#include
#defineucharunsignedchar
#defineuintunsignedint
uintma,mb,mc,PWM=6000;
sbitout1=P1^2;//motoA1
sbitout2=P1^3;//motoA2
sbitout3=P1^4;//motoB1
sbitout4=P1^5;//motoB2
bitPWMIO;
PWMA[3]={10,30,50};
PWMB[3]={10,30,50};
voiddelay(uintt)//延时程序1
{
ucharj;
while(t--)
{for(j=1;j>0;j--);}
}
voidinit()
{
TMOD=0x21;//设置定时器1为工作方式2设置定时器0为工作方式1
TH1=0xfd;
TL1=0xfd;
TH0=(65536-20000)/256;//20ms定时器T0中断一次
TL0=(65536-20000)%256;
SCON=0x50;
TR1=1;
EA=1;
ES=1;
ET0=1;
TR0=1;
}
voidyou()//右急弯
{
out1=1;
out2=0;
out3=0;
out4=1;
delay(100);
}
voidzuo()//左急弯
{
out1=0;//右轮正转
out2=1;
out3=1;//左轮反转
out4=0;
delay(100);
}
voidqian()//前进
{
out1=0;
out2=PWMIO1;
out3=0;
out4=PWMIO2;
delay(100);
}
voidhou()//后退
{
out1=1;
out2=0;
out3=1;
out4=0;
delay(200);
}
voidleftup()//左前
{PWM1=PWMA[1];PWM2=PWMA[0];
out1=0;//右轮正转
out2=PWMIO1;
out3=0;//左轮PWMIO输出调慢
out4=PWMIO2;
}
voidrightup()//右前
{
out1=0;//右轮PWMIO输出调慢
out2=PWMIO;
out3=0;//左轮正转
out4=1;
}
voidleftdown()//左后
{
out1=1;//右轮后退
out2=0;
out3=PWMIO;;
out4=0;
}
voidrightdown()//右后
{
out1=PWMIO;
out2=0;
out3=1;//左轮后退
out4=0;
}
voidting()//停止
{
out2=0;
out4=0;
out3=0;
out1=0;
}
void3dang()//右后
{
i++;
PWM1=PWMA[i];
PMW2=PWMB[i];
if(i==3)
{i=0;}
}
voidmain()
{
init();
while
(1)
{
if(RI)
{
RI=0;
ma=SBUF;
}
switch(ma)
{/*下面程序需要自行另外修改,添加前\后退\左转圈\右转圈\左前弯PWM\右前弯PWM\左自旋\右自旋\PWM换档位\双闪灯+鸣笛\播放音乐\显示运行时间\显示光强\超声波测距并避障等功能*/
case'a':
qian();break;//前
case'b':
hou();break;//后退
case'c':
zuo();break;//左急弯
case'd':
you();break;//右急弯
case'e':
leftup();break;//左前
case'f':
rightup();break;//右前
case'g':
leftdown();break;//左后
case'h':
rightdown();break;//右后
case's':
ting();break;//停
case'x':
3dang();break;//停
}
}
}
voidTT0()interrupt1
{
TH0=(65536-400)/256;
TL0=(65536-400)%256;
t++;
if(t>=PWM1){PWMIO1=1;}
if(t>=PWM2){PWMIO2=1;}
if(t==50){t=0;PWMIO1=0;PWMIO2=0}
}
voidser()interrupt4
{
}
3.串口通信的初始化
4.利用PWMIO的变化改变转弯幅度
5.PWMADJ()函数实现PWM值的加
voidPWMADD()
{
PWM+=1;
if(PWM==4){PWM=1};
}
•case'a':
qian();break;//前
•case‘b’:
hou();break;//后退
•case‘c’:
zuo();break;//左转圈
•case‘d’:
you();break;//右转圈
•case‘g’:
leftdown();break;//左自旋
•case‘h’:
rightdown();break;//右自旋
•2ledbeep();//双闪灯黄灯+鸣笛
•music();//播放音乐
•bizhang();//超声波测距并避障
6.主函数串口接收程序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 蓝牙 串口 通信 遥控 小车
![提示](https://static.bdocx.com/images/bang_tan.gif)