51单片机四驱无线遥控小车制作详解

发布者:石头上种庄稼最新更新时间:2012-06-25 来源: 21ic 关键字:51单片机  四驱  无线遥控小车 手机看文章 扫描二维码
随时随地手机看文章

小车参数:控制键5个:前进、后退、左转、右转、停止;有效距离200米;速度:

  我想遥控小车大家都玩过,网上也有各种DIY小车的制作详解,我做的这个遥控小车和其他的作品大同小异,但作为单片机设计,这次设计我主要强调单片机控制,就是说,这个小车是由单片机控制的,这次我把单片机按键发送程序、无线模块使用、电机驱动作为本教程的核心内容。

  一 硬件组装

  1 小车运动部分

  此图是我师弟组装好的,请大家作为参考

  所需工件:直流电机4个,L293D电机驱动模块,蓄电池一块,车身底盘

  说明:车身底盘大家根据自己的购买力自行购买,蓄电池也是,至于L293D模块,淘宝上卖的比较贵,不过我用的就是成品模块,效果非常好,钱不多的同学可以自己买芯片,自制模块,原理很简单,官方资料是很详细的;或者改为继电器控制都可以,具体看自己的实际购买力。用模块的好处是,模块可以输出5V电源给系统供电,详细请参考淘宝网。

  如果你买的是现成的底盘,那就和我的一样了,组装实在是没啥可说的,把电机固定上去就是,不行?别开玩笑了,小学生都会的!至于想自己做底盘的,我想说,要搞结实点,咱这次的小车马力是很足的,因为有电机驱动,速度比较快(不带减速齿轮的底盘一定要小心,速度非常的快),后劲也足,不小心撞墙很正常,所以不好的底盘就得小心了!

  组装好后,就是电机和驱动模块的接线了,下面我就详细的说一下L293D模块的使用:

  L293D是专门的电机驱动芯片,工作电压5V,驱动电压输入可达36V,输出电流正负600ma,4个控制端,4个输出端,原理如

  图:

  

  其中A为输出控制端,Y为输出控制端,1A即控制1Y,以此类推。1,2EN 3,4EN需要短接,芯片最大工作电压不得超过7V。

  封装图:

  

  Vcc1接工作电压,5V,Vcc2接电机的驱动电源,一般来说,这个电压要比5V高,我用的是12V蓄电池,就把12v的正极接到VCC2,要记住的是,芯片、单片机、蓄电池电源是需要共地的,不要觉得你电机是12V,单片机控制部分是5V就把电源完全独立开来,正极是完全独立的没错,但是GND(负极)都必须是接在一起的。

  驱动芯片与电机的接法:

  例:左边前后轮:

  1Y接电机红线,2Y接电机黑线,左边前轮电机

  3Y接电机红线,4Y接电机黑线,左边后轮电机

  前进指令:1A=1(输出12V),2A=0(输出0V),3A=1(输出12V),4A=0(输出0V)

  后退指令:1A=0(输出12V),2A=1(输出0V),3A=0(输出12V),4A=1(输出0V)

  右边的和左边的接法是完全一样的

  注意:前进和后退并不是绝对的,因为是直流电机,不刻意的强调正负极,就看你电机是怎么接线的,结果完全可以与我的相反。不过一定要保证电机接线的统一性,不能随意,不能说前轮接的是顺时针线序,后轮是逆时针线序,如果买的电机连接线不带颜色,一定要自己测好了那种接法是顺时针的,哪种是逆时针,否则前轮前进后轮后退,很摧残电机的,或者左右边的2对电机转动方向不统一,导致编程麻烦。

  芯片默认输出0V ,所以在没有程序的时候,大家不需要担心电机会转动。一个芯片只能控制2个电机,右边的再接个芯片就可以了,网上卖的模块都是2个驱动芯片的,刚刚好够4个电机。买模块的好处就是拿来可以直接接线,而且模块上有标号,不必担心接错,希望初学者还是买模块,贵是贵了,但是速度有保证的!驱动模块如图:

  

  接好之后,我就说下小车的转动方式:前进后退就是4个电机同时的正转、反转;左转弯和有转弯有2种方式:A一边转动一边不转,B一边正向转动一边反向转动,这两种各有个的好处,各位可以根据自己的实际情况来确定转弯的方式,不同车的底盘效果肯定是不一样的,转弯的方式是程序控制的,本程序是B种方式。
[page]

我的小车图:

  

  这种电机是减速的,所以不会很快,如果是直接电机带动的轮子,再用12V电源的话,那速度就非常快了,模块的输出直接连接电机电源线,输出根据标号或根据程序接入到单片机上

  单片机的接线:

  如图:

  

  这是我的最小系统板,全部引出IO,带板载USB下载功能,P0口输出接了8路流水灯(有选通开关),这样设计板子是为了P0口做输出时专门看输出状态的。板子是我们工作室自己设计的,我们所有的作品调试都是建立在它的基础上,网上也有的卖这种USB下载板,40元左右吧!

  我这个人比较懒,用的是电机驱动模块,L293D的输入是有标号的,1——8直接按照顺序接到P1.0——P1.7就可以了,说到这里,我不得不说一下,单片机的接线是非常自由的,因为是程序控制,无法就是改改端口而已,我只根据我的程序来说明接线,有基础的可以自己设计!

  驱动芯片和电机连接好后,就是要把线固定好,留出要与单片机连接的8跟控制线。也要注意给无线模块留一个小空间。

[page]

无线模块解说:

  我们工作室一直使用的是433无线串口模块,具体型号和价格我会附在清单表里,现在我说下它的性能、这种无线模块最大的好处就是有较强的抗干扰性,2个模块直接可以设置ID,只有在一个ID号下的个模块才可以通信,而且可以实现一对多通信;而且这种模块是无需编程的,直接把数据发送到串口即可,模块会自动调制解调,就目前使用的情况而言,还没发现它有调制解调错误的时候,可以说,在数据传输上,这个模块误码率还是极低的,不过需要注意的是,模块2次接收(发送)之间的间隔要大于200ms,这是非常重要的一个参数,如果想做高速数据传输的朋友请慎重选用!(本段文字来源于淘宝睿迪无线模块手册,本人也已经上传,也请读者尊重该店的著作权)。

  模块的接线还是蛮简单的,电源2根线,数据线2根:TX(接单片机RX)、RX(接单片机TX),关于无线模块的设置方案,请参考淘宝睿迪无线XL02-232AP1型号的资料手册。模块在通电的一瞬间红灯绿灯同时会闪一下,然后熄灭,此时进入待机状态,模块发送数据时,红灯亮;接收数据时,绿灯亮。

  组装好之后的图:

  

  我用是12v蓄电池,接到驱动模块后,模块的5V输出又可以直接给无线模块和最小系统部分供电。虽然看起来比较笨重,但是12V的电源,与一般的小车在速度和耐力上,都有了本质的提高!

  遥控部分:

  

  hex代码,仿真提供16进制文件

[page]

源代码:

  ;接收程序

  ORG 0 ;程序起始地址

  SJMP STAR ;跳转到主程序

  ORG 30H ;串口中断地址

  sjmp loop ;跳转到中断服务程序

  STAR:

  MOV SP,#5FH ;设置堆栈

  MOV SCON,#50H ;串行数据格式(详情请参考51手册)

  MOV TMOD,#20H ;定时器工作方式(请参考51手册)

  MOV PCON,#0 ;波特率不倍速(请参考51手册)

  MOV TH1,#0fdH ;设置波特率在9600

  MOV TL1,#0fdH ;设置波特率在9600

  SETB EA ;开起中断

  clr ET1 ;关闭定时1中断

  SETB ES ;开起串口中断

  SETB TR1 ;启动定时器1

  mov a,#0 ;

  mov p1,a ;设置初始值,即开机p1输出00h小车不动作

  main:

  mov p1,a ;把a值给p1端口

  sjmp main ;无限循环main程序

  LOOP:

  jnb ri,$ ;判断接收位是否接收完

  clr ri ;接收完后清空接收位

  mov a,sbuf ;发送的数据给a

  reti ;返回后,a的值就会给p1

  END

  ;发送程序

  ORG 0 ;程序起始地址

  SJMP START ;跳转到主程序

  ORG 30H ;串口中断地址

  START:

  MOV SP,#5FH ;设置堆栈

  MOV TMOD,#20H ;定时器工作方式(请参考51手册)

  MOV PCON,#0 ;波特率不倍速(请参考51手册)

  MOV SCON,#50H ;串行数据格式(详情请参考51手册)

  MOV TH1,#0fdH ;设置波特率在9600

  MOV TL1,#0fdH

  setb EA ;开起中断

  clr ET1 ;关闭定时1中断

  setb ES ;开起串口中断

  SETB TR1 ;启动定时器1

  main:

  lcall kcs ;调用按键扫描程序

  jnz key ;有键按下则跳转到key程序段

  sjmp main ;无限循环main程序

  kcs:

  mov p1,#0ffh ;p1给初值

  mov a,p1 ;p1的数值给a

  cpl a ;取反a

  anl a,#0ffh ;与运算

  ret

  key:

  lcall delay ;软件延时程序,按键去抖

  jb acc.0,send1

  jb acc.1,send2

  jb acc.2,send3

  jb acc.3,send4

  jb acc.4,send5

  ret

  DELAY:

  MOV R5,#20

  D1:MOV R6,#10

  D2:MOV R7,#100

  DJNZ R7,$

  DJNZ R6,D2

  DJNZ R5,D1

  ret

  send1:

  mov r1,#10101010b ;前进指令

  sjmp send

  send2:

  mov r1,#01010101b ;后退指令

  sjmp send

  send3:

  mov r1,#01011010b ;左转指令

  sjmp send

  send4:

  mov r1,#10100101b ;右转指令

  sjmp send

  send5:

  mov r1,#00h ;停止指令

  sjmp send

  send:

  MOV SBUF,r1 ;指令给sbuf

  JNB TI,$ ;判断是否发送完

  reti ;中断返回

  END

关键字:51单片机  四驱  无线遥控小车 引用地址:51单片机四驱无线遥控小车制作详解

上一篇:用Atmel89S51单片机仿真PLC控制
下一篇:51单片机的高精度除法使用及程序清单

推荐阅读最新更新时间:2024-03-16 13:01

51单片机-再次熟悉串口
串口是非常常用的一个调试工具,我们都必须熟练使用串口的各个功能。 1.题目要求和解决方案 我们要做的是,电脑端发送字符串过来给单片机,然后单片机这边接收完之后要回复给电脑端,回复内容为“接收完成!”。单片机这边把接收到的数据存放在定义好的全局变量数组里面,我们可以通过按K4发送回去给电脑端查看刚刚接收到的内容并把它显示出来。 我们要知道,一个汉字是需要两个字节内存的,比如电脑端发送的字符串为“好好学习,天天向上!”其中的两个标点符号也是中文输入法打上的话,一个标点符号也是占用两个字节,这个字符串就是一共占用10*2=20个字节内存。 那么怎样判断是否把字符串的数据都接收完成了呢?我们参考了宋老师的编程思想,使用定时
[单片机]
<font color='red'>51单片机</font>-再次熟悉串口
基于51单片机实现74LS164串入并出移位寄存器
对于串入并出移位寄存器以下是我个人的理解和实际开发工程中得出的经验 图一: 由我上图所画 可以得出 一个8位串入数据输入, 8位并行输出。可以看出先移的是高位, 就是第一个位进去的到最后会在最高位。 图为时序图 A B 是输入 clean 是清0端,低电平有效。就是如果给个低电平那么输出都为0强制都输出0。一般接高电平 clock 是时钟 上升沿有效 由上图可以得出如果 A B 有一个为低电平 ,那么阻止新数据的进入,并在下一个时钟上升沿时,将 QA 端清0. 如果A B端都为高电平则会使能信号输入,并在下一个时钟脉冲的上升沿之前使输出端QA置1.每一个时钟脉冲上升沿到来时,输出端的数据会移动一个位
[单片机]
基于<font color='red'>51单片机</font>实现74LS164串入并出移位寄存器
51单片机—用蜂鸣器播放音乐
#include reg52.h #include ./delay/delay.h //sbit key1 = P1^0; sbit beep = P2^7; #define SEGPORT P0 #define KEYPORT P1 sbit bit_select = P2^0; sbit seg_select = P2^1; unsigned char segdata = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; unsigned char bitdata = {0xfe,0xfd,0xfb
[单片机]
8051单片机定时器溢出中断误差补偿示例
  1 前言   单片机内部一般有若干个定时器。如8051单片机内部有定时器0和定时器1。在定时器计数溢出时,便向CPU发出中断请求。当CPU正在执行某指令或某中断服务程序时,它响应定时器溢出中断往往延迟一段时间。这种延时虽对单片机低频控制系统影响甚微,但对单片机高频控制系统的实时控制精度却有较大的影响,有时还可能造成控制事故。为扩大单片机的应用范围,本文介绍它的定时器溢出中断与CPU响应中断的时间误差、补偿误差的方法和实例。   2 误差原因、大小及特点   产生单片机定时器溢出中断与CPU响应中断的时间误差有两个原因。一是定时器溢出中断信号时,CPU正在执行某指令;二是定时器溢出中断信号时,CPU正在执行某中断服务程序。
[单片机]
51单片机对SAA3010T编码芯片进行解码的方法
  单片机电路原理图见下图硬件还可以加个蜂鸣器加以指示。      //功能实现对p1口八个发光二级管控制,程序中设置了串行口来查看遥控器的发送的编码IRCode
[单片机]
用<font color='red'>51单片机</font>对SAA3010T编码芯片进行解码的方法
89C51单片机+X25045构成的看门狗电路
采用89C51单片机和X25045组成的 看门狗电路 ,X25045硬件连接图如图1所示。X25045芯片内包含有一个看门狗定时器,可通过软件预置系统的监控时间。在看门狗定时器预置的时间内若没有总线活动,则X25045将从RESET输出一个高电平信号,经过微分电路C2、R3输出一个正脉冲,使CPU复位。图1电路中,CPU的复位信号共有3个:上电复位(C1、R2),人工复位(S、R1、R2)和Watchdog复位(C2、R3),通过或门综合后加到RESET端。C2、R3的时间常数不必太大,有数百微秒即可,因为这时CPU的振荡器已经在工作。   
[电源管理]
89C<font color='red'>51单片机</font>+X25045构成的看门狗电路
51单片机实验18:蜂鸣器
关于蜂鸣器的内容参考:https://blog.csdn.net/cax1165/article/details/87634433 开发板蜂鸣器模块原理图如下: #include reg52.h #define uc unsigned char sbit beep=P1^5; void delay(uc x) { uc i,j; for(i=1;i =x;i++) for(j=1;j =110;j++); } void main() { while(1) { beep=~beep; delay(5);//调节音调 } }
[单片机]
<font color='red'>51单片机</font>实验18:蜂鸣器
怎样研发一个以80C51单片机为核心的压力测量控制系统?
1 引言 目前我国发展煤炭生产机械化发展迅速。综采设备的应用,是提高效率、改善安全状况的措施。 影响开机率的一个主要因素是支架对工作面的顶板控制的好坏,因此,对综采工作面进行矿压监测与控制是很有必要的。要做到这一点,首先需要对井下工作面的液压支架的实际工作状况进行监测,通过对检测数据处理、分析,评定其效果,并采取相应措施,以提高开机率、提高产量。本文以监测综采液压支架的压力为研究内容,开发了一套基于单片机的压力测量控制系统。 2 压力测量控制系统功能设计 压力测量控制系统用于监测支架压力, 每台测量控制系统配有四只传感器, 可分别通过高压油管连接支架的立柱、平衡千斤顶, 前探梁千斤顶的油压腔。压力测量控制系统接收到通讯测量控制
[单片机]
怎样研发一个以80C<font color='red'>51单片机</font>为核心的压力测量控制系统?
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
Your system folder path does not appear to be set correctly. Please open the following file and correct this: index.php
设计资源 培训 开发板 精华推荐

Your system folder path does not appear to be set correctly. Please open the following file and correct this: index.php
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

Your system folder path does not appear to be set correctly. Please open the following file and correct this: index.php Your system folder path does not appear to be set correctly. Please open the following file and correct this: index.php
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved