蓝牙串口通信遥控小车_第1页
蓝牙串口通信遥控小车_第2页
蓝牙串口通信遥控小车_第3页
蓝牙串口通信遥控小车_第4页
蓝牙串口通信遥控小车_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、蓝牙串口通信遥控小车目录1系统方案论证及方案选择 2 本系统软硬件设计 2.1单元硬件电路设计 2.2 软件部分设计参考文献附录1 原器件清单附录2电路原理图及印制板图附录3程序1. 系统方案论证及方案选择1 总体设计方案题目要求设计一个蓝牙串口遥控小车,通过对电机转速的控制,调节速度的大小,改变小车角度,并能实现转弯和旋转。设计主要由主控单片机STC12C5A60S2驱动直流电机,使车轮工作,带动小车的转动。 2.基本工作原理3.STC89C52RC有定时器T0 T1 T2,在自动控制领域经常把T1作为串口通信了T0作PWM调速用因此有必要把T2定时器拿出来作定时器作为声音频谱程序。下面介绍

2、T2的用法STC89C52RC有定时器T2 void main (void) /* T2定时器赋预装载值,溢出16次就是1秒。 */ RCAP2H=(65536-5000)/256; RCAP2L= (65536-5000)%256; ET2=1; / 允许T2定时器中断 EA=1; / 打开总中断 TR2=1; / 启动T2定时器 while(1); / 死循环,等待T2定时器的溢出中断 void Timer2_Server(void) interrupt 5 static uint Timer2_Server_Count; / 定义静态变量,用来计数T2定时器的溢出次数(进入本函数的次数)

3、 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反转显示。 void Timer2_Server(void) interrupt 5 static uint Timer2_Server_Count; / 定义静态变量,用来计数T2定时器的溢出次数(进入本函数的次数) TF2=0; / T2定时器发生

4、溢出中断时,需要用户自己清除溢出标记,而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.1 51单片机最小系统的制作方案设计2.1.2 小车51系统 +驱动(马达)+电池

5、的接线2.1.3 蓝牙与单片机和马达的接线附录1主要元器件清单序号名称规格数量1锂电池+配套充电器18650 7.4V 2200mAh锂电池+锂电充电器12L298N直流电机驱动板 带5V 3A输出L298N驱动芯片双H桥直流电机驱动芯片驱动部分峰值电流2A,带5V 3A输出13ZK-1小车底盘1个5mm加厚底盘+2个直流减速电机+2个优质橡胶轮胎+万向轮+电机导线+螺丝螺母+铜柱+码盘等1451蓝牙串口模块蓝牙串口模块带电源转换电路支持5V供电152.54mm杜邦线40P彩色杜邦线 双头1P对1P 长20CM 一排40根16瓷片电容22P 插件27单排针40P 1根18轻触开关6*6*619

6、电解电容10uf 35V110电阻470欧 5色环直插111电阻10K 5色环直插112电路板PCB覆铜板板或者5x7万用版113超声波测距模块HC-SR04114超声波测距模块支架支架需要配套的螺丝螺母115晶振11.0592M11640P IC座插件DIP40117单片机学习板1附录2 电路原理图及印制电路板图1.2.3. 4.5. 超声波串口模块附录3程序1. 主程序#include<reg52.h>#define uchar unsigned char #define uint unsigned intuint ma,mb,mc,PWM=6000;sbit out1 = P

7、12 ; /motoA1sbit out2 = P13 ; /motoA2sbit out3 = P14 ; /motoB1sbit out4 = P15 ; /motoB2bit PWMIO;void delay(uint t) /延时程序1 uchar j; while(t-)for(j=1;j>0;j-); void init() TMOD=0x21;/设置定时器1为工作方式2 设置定时器0为工作方式1TH1=0xfd;TL1=0xfd;TH0=(65536-20000)/256; /20ms定时器T0中断一次TL0=(65536-20000)%256;SCON=0x50;TR1=

8、1;EA=1;ES=1;ET0=1;TR0=1;void you ()/右急弯 out1=1; out2=0; out3=0; out4=1; delay(100);void zuo() /左急弯 out1=0;/右轮正转 out2=1; out3=1; /左轮反转 out4=0; delay(100);void qian() /前进 out1=0; out2=1; out3=0; out4=1; delay(100);void hou() /后退 out1=1; out2=0; out3=1; out4=0; delay(200);void leftup() /左前 out1=0;/右轮正转

9、 out2=1; out3=0;/左轮PWMIO输出调慢 out4=PWMIO;void rightup() /右前 out1=0;/右轮PWMIO输出调慢 out2=PWMIO; out3=0;/左轮正转 out4=1;void leftdown() /左后 out1=1;/右轮后退 out2=0; out3=PWMIO; out4=0;void rightdown() /右后 out1=PWMIO; out2=0; out3=1;/左轮后退 out4=0; void ting() /停止 out2=0; out4=0; out3=0; out1=0;void main() init();

10、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 &

11、#39;h':rightdown();break; /右后 case 's':ting();break; /停 void TT0() interrupt 1 TH0=(65536-(20000-PWM)/256; /20ms定时器T0中断一次,进行PWM切换实现5ms高电平15ms低电平的PWM脉冲 TL0=(65536-(20000-PWM)%256; PWM=20000-PWM; PWMIO=PWMIO; void ser() interrupt 4 2. 子程序#include<reg52.h>#define uchar unsigned char #

12、define uint unsigned intuint ma,mb,mc,PWM=6000;sbit out1 = P12 ; /motoA1sbit out2 = P13 ; /motoA2sbit out3 = P14 ; /motoB1sbit out4 = P15 ; /motoB2bit PWMIO;PWMA3=10,30,50;PWMB3=10,30,50;void delay(uint t) /延时程序1 uchar j; while(t-)for(j=1;j>0;j-); void init() TMOD=0x21;/设置定时器1为工作方式2 设置定时器0为工作方式1T

13、H1=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;void you ()/右急弯 out1=1; out2=0; out3=0; out4=1; delay(100);void zuo() /左急弯 out1=0;/右轮正转 out2=1; out3=1; /左轮反转 out4=0; delay(100);void qian() /前进 out1=0; out2=PWMIO1; out3=0; out4=PWMIO2;

14、 delay(100);void hou() /后退 out1=1; out2=0; out3=1; out4=0; delay(200);void leftup() /左前PWM1=PWMA1; PWM2=PWMA0; out1=0;/右轮正转 out2=PWMIO1; out3=0;/左轮PWMIO输出调慢 out4=PWMIO2;void rightup() /右前 out1=0;/右轮PWMIO输出调慢 out2=PWMIO; out3=0;/左轮正转 out4=1;void leftdown() /左后 out1=1;/右轮后退 out2=0; out3=PWMIO; out4=0;

15、void rightdown() /右后 out1=PWMIO; out2=0; out3=1;/左轮后退 out4=0; void ting() /停止 out2=0; out4=0; out3=0; out1=0;void 3dang() /右后 i+; PWM1=PWMAi; PMW2=PWMBi;if(i=3)i=0;void main() init(); while(1) if(RI) RI=0; ma=SBUF; switch(ma) /*下面程序需要自行另外修改,添加前 后退左转圈右转圈左前弯PWM右前弯PWM左自旋右自旋PWM换档位双闪灯+鸣笛播放音乐显示运行时间显示光强超声波

16、测距并避障等功能*/ 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; /停 void TT0() interrupt 1TH0=(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=0void ser() interrupt 4 3. 串口通信的初始化4. 利用PWMIO的变化改变转弯幅度5. PWMADJ()函数实现PWM值的加void PWM

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论