目录
一、方案论证 - 1 -
1、主控系统分析与论证: - 1 -
2、机械系统分析与论证: - 1 -
3、电机驱动模块分析与论证: - 1 -
4、遥控系统分析与论证: - 1 -
二、结构图 - 2 -
1、主程序控制流程图 - 2 -
三、硬件电路图 - 3 -
1、整体电路图 - 3 -
2、L298说明 - 3 -
3、7805说明 - 5 -
四、软件 - 7 -
1、程序: - 7 -
五、红外发射接收的原理 - 19 -
1、编码格式 - 19 -
2、遥控指令编码规律 - 19 -
3、遥控器的解码算法 - 19 -
4、资料码表 - 21 -
六、调试过程中遇到的问题及解决的办法 - 22 -
1、在选择电机中遇到的问题及解决办法 - 22 -
2、程序中遇到的问题及解决办法 - 22 -
一、方案论证
1、主控系统分析与论证:
我们采用单片机作为整个系统的核心,用其控制行进中的小车,以实现其既定的性能指标。充分分析我们的系统,其关键在于实现小车的自动控制,而在这一点上,单片机就显现出来它的优势——控制简单、方便、快捷。这样一来,单片机就可以充分发挥其资源丰富、有较为强大的控制功能及可位寻址操作功能、价格低廉等优点。因此,这种方案是一种较为理想的方案,也是我们主要的学习方向。但是在实际应用中,由于该系统所需用到的传感器数目较多,需要处理的敏感量较多,很有可能会引来单片机资源不足的问题。
2、机械系统分析与论证:
本题目要求小车的机械系统稳定、简单,而四轮运动系统具备以上特点。因此我选用市售玩具汽车的机械运动系统并进行了改装。
3、电机驱动模块分析与论证:
方案一:使用功率三极管作为功率放大器的输出控制直流电机。线性型驱动的电路结构和原理简单,成本低,加速能力强,但功率损耗大,特别是低速大转距运行时,通过电阻R的电流大,发热厉害,损耗大。
方案二:采用继电器对电动机的开或关进行控制,通过开关的切换对小车的速度进行调整.此方案的优点是电路较为简单,缺点是继电器的响应时间慢,易损坏,寿命较短,可靠性不高。
方案三:通过PWM脉宽调制的方法,实现对小车速度的控制。这种调速方式有调速特性优良、调整平滑、调速范围广、过载能力大,能承受频繁的负载冲击,还可以实现频繁的无级快速启动、制动和反转等优点。
因此决定采用PWM脉宽调制的方法控制直流电机。
4、遥控系统分析与论证:
红外线遥控是目前使用最广的一种遥控手段。红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,遥控条件指向性较强,受障碍物阻的影响较大指向性较差,受地形或障碍物阻挡的影响较小,综合考虑各种因素,我们决定采用红外的方式
二、结构图
1、主程序控制流程图
三、硬件电路图
1、整体电路图
2、L298说明
恒压恒流桥式2A驱动芯片L298N
L298是SGS公司的产品,比较常见的是15脚Multiwatt封装的L298N,内部同样包含4通道逻辑驱动电路。可以方便的驱动两个直流电机,或一个两相步进电机。
L298N芯片可以驱动两个二相电机,也可以驱动一个四相电机,输出电压最高可达50V,可以直接通过电源来调节输出电压;可以直接用单片机的IO口提供信号;而且电路简单,使用比较方便。
L298N可接受标准TTL逻辑电平信号VSS,VSS可接4.5~7 V电压。4脚VS接电源电压,VS电压范围VIH为+2.5~46 V。输出电流可达2.5 A,可驱动电感性负载。1脚和15脚下管的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。L298可驱动2个电动机,OUT1,OUT2和OUT3,OUT4之间可分别接电动机,本实验装置我们选用驱动一台电动机。5,7,10,12脚接输入控制电平,控制电机的正反转。EnA,EnB接控制使能端,控制电机的停转。表1是L298N功能逻辑图。
15脚是输出电流反馈引脚,其它与L293相同。在通常使用中这两个引脚也可以直接接地。上图是其与51单片机连接的电路图。
3、7805说明
H 7805 系列为 3 端正稳压电路,TO-220 封装,能提供多
种固定的输出电压,应用范围广。内含过流、过热和过载保
护电路。带散热片时,输出电流可达 1A。虽然是固定稳压电
路,但使用外接元件,可获得不同的电压和电流。
主要特点:
输出电流可达 1A
输出电压有:5V
过热保护
短路保护
输出晶体管 SOA 保护
7805原理图
四、软件
1、程序:
TS EQU 1 ;一次按键送出脉冲信号个数
;----------------------------------------------
K1 EQU P2.6 ;按键1引脚定义
K2 EQU P2.7 ;按键2引脚定义
K3 EQU P2.5 ;按键3引脚定义
K4 EQU P2.4 ;按键4引脚定义
;----------------------------------------------
WLED EQU P3.7 ;工作指示灯引脚定义
PUL1 EQU P1.4 ;直流电机控制线1
PUL2 EQU P1.5
PUR1 EQU P1.6 ;直流电机控制线2
PUR2 EQU P1.7
;----------------------------------------------
;IR遥控器按键1~7比较码
CODE_K1 EQU 0FH
CODE_K2 EQU 12H
CODE_K3 EQU 0EH
CODE_K4 EQU 1DH
CODE_K5 EQU 43H
CODE_K6 EQU 13H
CODE_K7 EQU 46H
;----------------------------------------------
IRCOM EQU 30H ;红外线信号译码数据放置变量起始地址
COM EQU 32H ;比较第3字节
GDP EQU 34H
DDP EQU 35H
IRIN EQU P3.2 ;红外线IR信号输入位
;----------------------------------------------
ORG 0000H
JMP START
ORG 0040H
START:
CLR PUL1
CLR PUL2
CLR PUR1
CLR PUR2
CALL LED_BL
MOV P0,#0FFH
MOV COM,#0FFH
MOV GDP,#241
MOV DDP,#1
;----------------------------------------------
LOOP:
MOV R0,#IRCOM ;变量起始地址给R0
CALL IR_IN ;调用解码程序
MOV A,COM ;
MOV P0,A ;把第3字节的数送给P0口
CALL OP
;----------------------------------------------
;按键检测
JB K1,X1
JNB K1,$
CALL LED_BL
CALL GO_FOR ;前进展示
CALL GO_FOR
CALL GO_FOR
JMP LOOP
;----------------------------------------------
X1:
JB K2,X2
JNB K2,$
CALL LED_BL
CALL GO_BACK ;后退展示
CALL GO_BACK
CALL GO_BACK
JMP LOOP
;----------------------------------------------
X2:
JB K3,X3
JNB K3,$
CALL LED_BL
CALL GO_LEFT ;左转展示
CALL GO_LEFT
CALL GO_LEFT
JMP LOOP
;----------------------------------------------
X3:
JB K4,X4
JNB K4,$
CALL LED_BL
CALL GO_RIGHT ;右转展示
CALL GO_RIGHT
CALL GO_RIGHT
JMP LOOP
;----------------------------------------------
X4:
JMP LOOP
;----------------------------------------------
;DELAY R5*10ms;延迟子程序
DELAY:
MOV R6,#50
D1:
MOV R7,#100
DJNZ R7,$
DJNZ R6,D1
DJNZ R5,DELAY
RET
;----------------------------------------------
;工作指示灯闪烁
LED_BL:
MOV R4,#2
L0:
CPL WLED
MOV R5,#5
CALL DELAY
DJNZ R4,L0
SETB WLED
RET
;----------------------------------------------
;伺服机1反转控制
PUL_BACK:
SETB PUL2
CLR PUL1
MOV A,GDP
MOV R4,A
A1:
CALL DEL
DJNZ R4,A1
CLR PUL1
CLR PUL2
MOV A,DDP
MOV R4,A
A2:
CALL DEL
DJNZ R4,A2
RET
;----------------------------------------------
;伺服机1正转控制
PUL_FOR:
SETB PUL1
CLR PUL2
MOV A,GDP
MOV R4,A
B1:
CALL DEL
DJNZ R4,B1
CLR PUL1
CLR PUL2
MOV A,DDP
MOV R4,A
B2:
CALL DEL
DJNZ R4,B2
RET
;--------------------------------------------
;直流电机正转展示
DEMO_FOR:
MOV R3,#TS
C1:
CALL PUL_FOR
DJNZ R3,C1
RET
;--------------------------------------------
;直流电机反转展示
DEMO_BACK:
MOV R3,#TS
E1:
CALL PUL_BACK
DJNZ R3,E1
RET
;--------------------------------------------
;DELAY R5*0.1ms;0.1秒延迟子程序
DEL:
MOV R5,#1
DELAY1:
MOV R6,#2
F1:
MOV R7,#17
DJNZ R7,$
DJNZ R6,F1
DJNZ R5,DELAY1
RET
;----------------------------------------------
;直流电机2反转控制
PUR_BACK:
SETB PUR2
CLR PUR1
MOV A,GDP
MOV R4,A
G1:
CALL DEL
DJNZ R4,G1
CLR PUR1
CLR PUR2
MOV A,DDP
MOV R4,A
G2:
CALL DEL
DJNZ R4,G2
RET
;----------------------------------------------
;直流电机2正转控制
PUR_FOR:
SETB PUR1
CLR PUR2
MOV A,R5
MOV R4,A
H1:
CALL DEL
DJNZ R4,H1
CLR PUR1
CLR PUR2
MOV A,DDP
MOV R4,A
H2:
CALL DEL
DJNZ R4,H2
RET
;----------------------------------------------
;车体前进
GO_FOR:
MOV R3,#TS
J1:
CALL PUL_FOR
CALL PUR_BACK
DJNZ R3,J1
RET
;----------------------------------------------
;车体后退
GO_BACK:
MOV R3,#TS
S1:
CALL PUL_BACK
CALL PUR_FOR
DJNZ R3,S1
RET
;----------------------------------------------
;车体左转
GO_LEFT:
MOV R3,#TS
M1:
CALL PUL_BACK
CALL PUR_BACK
DJNZ R3,M1
RET
;----------------------------------------------
;车体右转
GO_RIGHT:
MOV R3,#TS
Q1:
CALL PUL_FOR
CALL PUR_FOR
DJNZ R3,Q1
RET
;----------------------------------------------
;
OP:
MOV A,COM
CJNE A,#CODE_K1,O1
CALL GO_FOR
RET
O1:
CJNE A,#CODE_K2,O2
CALL GO_BACK
RET
O2:
CJNE A,#CODE_K3,O3
CALL GO_LEFT
RET
O3:
CJNE A,#CODE_K4,O4
CALL GO_RIGHT
RET
O4:
CJNE A,#CODE_K5,O5
;MOV GDP,#61
;MOV DDP,#41
RET
O5:
CJNE A,#CODE_K6,O6
;MOV GDP,#81
;MOV DDP,#21
RET
O6:
CJNE A,#CODE_K7,O7
;MOV GDP,#101
;MOV DDP,#1
RET
O7:
RET
;------------------------------------------------
;IR译码4字节数据
IR_IN:
I1:
JNB IRIN,I2
;MOV COM,#0 ;保持P0口数据输出不变
RET
I2:
MOV R4,#20
I20:
CALL DEL
DJNZ R4,I20
JB IRIN,I1
CLR WLED
I21:
JB IRIN,I3
CALL DEL
JMP I21
I3:
MOV R3,#0
LL:
JNB IRIN,I4
CALL DEL
JMP LL
I4:
JB IRIN,I5
CALL DEL
JMP I4
I5:
MOV R2,#0
L1:
CALL DEL
JB IRIN,N1
MOV A,#8
CLR C
SUBB A,R2
MOV A,@R0
RRC A
MOV @R0,A
INC R3
CJNE R3,#8,LL
MOV R3,#0
INC R0
CJNE R0,#34H,LL
JMP OK
N1:
INC R2
CJNE R2,#30,L1
OK:
SETB WLED
RET
;--------------------------------------------
END
五、红外发射接收的原理
1、编码格式
遥控器发射的信号由一串0和1的二进制代码组成。就拿TOSHIBA电视遥控器为例子来说,0码由0.8ms低电平和0.4ms高电平组合而成.脉冲宽度为1.2ms.1码由0.8ms低电平和1.6ms高电平组合而成.脉冲宽度为2.4ms。在编写解码程序时.通过判断脉冲的宽度,即可得到0或1。
2、遥控指令编码规律
当我们按下遥控器的按键时,遥控器将发出一串二进制代码,我们称它为一帧数据。根据各部分的功能。可将它们分为5部分,分别为引导码、地址码、地址码、数据码、数据反码。遥控器发射代码时.均是低位在前。高位在后。引导码高电平为9ms,低电平为4.5ms。当接收到此码时.表示一帧数据的开始。单片机可以准备接收下面的数据。地址码由8位二进制组成,共256种.图中地址码重发了一次。主要是加强遥控器的可靠性.如果两次地址码不相同.则说明本帧数据有错.应丢弃。不同的设备可以拥有不同的地址码.因此。同种编码的遥控器只要设置地址码不同,也不会相互干扰。在同一个遥控器中.所有按键发出的地址码都是相同的。数据码为8位,可编码256种状态,代表实际所按下的键。数据反码是数据码的各位求反,通过比较数据码与数据反码.可判断接收到的数据是否正确。如果数据码与数据反码之间的关系不满足相反的关系.则本次遥控接收有误.数据应丢弃。在同一个遥控器上.所有按键的数据码均不相同。数据码为十六进制的0CH,数据反码为十六进制的0F3H(注意低位在前).两者之和应为0FFH。
3、遥控器的解码算法
程序必须设计一个精确的0.1ms延时时间当作挤出时间,以计数实际的波形宽度,若读值为4表示波形宽度为0.4ms,若读值为16则表示波形宽度为1.6ms,依此类推。低电平的宽度为0.8ms为固定,因此直接可以判断高电平的宽度的计数值是4还是16,来决定编码为0或是1,程序中可以用减法指令SUBB 来完成判断,指令“SUBB A,R2”中若R2为计数值,A寄存器设为8,思考如下:
当“8-R2”有产生借位,借位标志C=1,表示编码为1。
当“8-R2”无产生借位,借位标志C=0,表示编码为0。
将借位标志C经过右移指令“RRC A”转入A寄存器中,再经由R0寄存器间接寻址存入内存内。程序片段如下:
MOV A,#8 ;设置减数为8
CLR C ;清除借位标志C
SUBB A,R2 ;判断高地位
MOV A,@R0 ;取出内存内原先数据
RRC A ;右移指令,将借位标志C右移进入a寄存器中
MOV @R0,A ;将数据写入内存内
最后收集到4个字节数据后,红外线的结束信号可以不必理会跳过即可。
4、资料码表
| 遥控功能 | 资料码 | 遥控功能 | 资料码 |
| 1 | 01 | 开关 | 13 |
| 2 | 02 | AV | 15 |
| 3 | 03 | CH- | 10 |
| 4 | 04 | CH+ | 0F |
| 5 | 05 | VOL- | 0D |
| 6 | 06 | VOL+ | 0E |
| 7 | 07 | MUTE(喑哑) | 0B |
| 8 | 08 | SLEEP( 睡眠 ) | 14 |
| 9 | 09 | DISPLAY(显示) | 10 |
| 0 | 00 | SMPX | 17 |
| -/--/--- | 0A | MENU(菜单) | 11 |
| POWER( 力量 ) | OB | SCAN( 扫瞄 ) | 1E |
1、在选择电机中遇到的问题及解决办法
在刚着手制作红外遥控小车的时候,买了两个金属齿扭矩减速电机,但是由于两个电机的转速不匹配,相差太多无法正常使用,所以选择在玩具商店买现成的小车底盘。
2、程序中遇到的问题及解决办法
1、由于电机动作周期过长,导致有的红外线号丢失,所以减小了一次按键送出脉冲的信号个数,使动作周期小于9ms。
2、由于数码显示编码是后加进去的,在家数码管的时候,编码无法保持,在经过仔细读程序屏蔽掉了MOV COM,#0这条程序,问题得到了解决。下载本文