微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51四驱无线遥控小车(200米有效距离)

51四驱无线遥控小车(200米有效距离)

时间:11-29 来源:互联网 点击:

独立的没错,但是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种方式。

我的小车图:

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

单片机的接线:

如图:

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

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

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

无线模块解说:

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

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

组装好之后的图:

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

遥控部分:

下面是原理图和hex代码,以后程序我会直接挂在网页上,仿真提供16进制文件

本例仿真图和元件清单下载:
http://www.51hei.com/f/原理仿真14.zip
http://www.51hei.com/f/原件清单14.rar

源代码:;接收程序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   ;设置波特率在9600MOV TL1,#0fdH   ;设置波特率在9600SETB EA         ;开起中断clr ET1         ;关闭定时1中断SETB ES         ;开起串口中断SETB TR1        ;启动定时器1mov a,#0        ;mov p1,a        ;设置初始值,即开机p1输出00h小车不动作main:mov p1,a       ;把a值给p1端口sjmp main      ;无限循环main程序LOOP:         jnb  ri,$     ;判断接收位是否接收完clr  ri       ;接收完后清空接收位mov  a,sbuf   ;发送的数据给areti          ;返回后,a的值就会给p1END;发送程序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  ;设置波特率在9600MOV TL1,#0fdHsetb EA        ;开起中断clr  ET1       ;关闭定时1中断setb ES        ;开起串口中断SETB TR1       ;启动定时器1main:lcall kcs      ;调用按键扫描程序jnz   key      ;有键按下则跳转到key程序段sjmp main      ;无限循环main程序kcs: mov p1,#0ffh   ;p1给初值mov a,p1       ;p1的数值给acpl a          ;取反aanl a,#0ffh    ;与运算ret           key:lcall delay     ;软件延时程序,按键去抖jb  acc.0,send1jb  acc.1,send2jb  acc.2,send3jb  acc.3,send4jb  acc.4,send5retDELAY:MOV R5,#20D1:MOV R6,#10D2:MOV R7,#100DJNZ R7,$DJNZ R6,D2DJNZ R5,D1ret    send1:mov  r1,#10101010b     ;前进指令sjmp sendsend2:mov  r1,#01010101b     ;后退指令sjmp sendsend3:mov  r1,#01011010b     ;左转指令sjmp sendsend4:mov  r1,#10100101b     ;右转指令sjmp sendsend5:mov  r1,#00h           ;停止指令sjmp sendsend: MOV SBUF,r1     ;指令给sbufJNB TI,$        ;判断是否发送完reti            ;中断返回END

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top