红外遥控电风扇控制系统设计.docx
《红外遥控电风扇控制系统设计.docx》由会员分享,可在线阅读,更多相关《红外遥控电风扇控制系统设计.docx(39页珍藏版)》请在冰豆网上搜索。
红外遥控电风扇控制系统设计
红外遥控电风扇控制系统设计
概述
遥控电风扇是90年代初期在广东珠江三角洲地区作做大量的研发和生产,并有专门的掩模芯片作为主控芯片使用,现本人用单片机作了接收和发射的配套使用的系统方案.红外遥控电路现在已成为一种设计电路的时尚,现简单地介绍了红外线遥控发射、接收系统的原理,给出用89C2051作为遥控接收系统解码器的一种巧妙实现方法,以及完整的51汇编程序代码。
包括发射、接收的原理图及其编程的主程序、发送程序、接收程序、定时中断程序的流程过程,从而完成此设计的要点,参考流程方框图的构思过程,可以编写应用软件。
遥控电风扇控制系统分为两大部分:
遥控器和电风扇控制板,下面分别加以描述。
一、遥控器
为了能远离距的控制电风扇,采用了红外遥控器。
通常红外遥控器由发射和接收两部分组成,发射部分由单片机80C2051等构成。
接收部分装在电风扇的控制器内,由89C51等构成。
1。
工作原理及组成部分
(1)CPU采用AT89C2051单片机,AT89C2051的功能:
和MCS—8051产品兼容、2KB可重编程闪速存储器、耐久性:
1000写/擦除周期、2。
7V~6V的操作范围、全静态操作:
0Hz~24MHz、两级加密程序存储器、128×8位内部RAM、15根可编程I/O引线、6个中断源、可编程串行UART通道、直接LED驱动输出、片内模拟比较器、低耗空载和掉电方式。
(2)电源采用4节7号电池来提供电源,并用一个二极管(IN4148)进行降压。
(3)调制部分:
采用CD40106进行缓冲放大并整形.发送的数字信号与38K的载波进行相与,将其调制在一起,整形并缓冲放大,经过8050进行放大驱动红外发射管,使其发射红外光。
(4)红外发射方原理见图
(1)所示。
(图1)遥控器原理框图
2.红外发射
(1)发射部分包括键盘矩阵、编码调制、红外发送器.使用89C2051芯片将按键信号调制在38KHz的载波信号上通过三极管放大后发射出去.红外编码为:
全码=引导码+系统码+系统反码+数据码+数据反码。
89C2051的P1口构成矩阵式键盘,用T1产生定时中断,驱动P3。
3产生一个38K的方波,作为红外线的调制基波。
将发送的数据和P3.0进行逻辑与后,经过40106整形,用三极管驱动红外发射管发射.
(2)按键功能
K1:
低档、中档、高档;键值为01H
K2彩灯:
键值为02H
K3:
自然风、睡眠风、正常风键;值为03H
K4定时;键值为04H
K5开/关机;键值为05H
(3)当无键按下时,延时10秒后进入待机状态,系统处于低功耗模式.当有按键按下时,INT0中断产生中断,同时唤醒CPU进行工作状态。
3.红外发射的编码方式
遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以日本NEC的uPD6121G组成发射电路为例说明编码原理。
当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同.这种遥控码具有以下特征:
(1)采用脉宽调制的串行码,以脉宽为0.565ms、间隔0。
56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1。
685ms、周期为2。
25ms的组合表示二进制的“1”。
“0”和“1"组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的.然后再通过红外发射二极管发射.
(2)遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。
该芯片的用户识别码固定为十六进制0FFH;后16位为8位操作码(功能码)及其反码.
(3)遥控器在按键按下后,周期性地发出同一种32位二进制码,周期约为108ms。
一组码本身的持续时间随它包含的二进制“0”和“1"的个数不同而不同,大约在45~63ms之间。
(4)其相关的波形图如下:
(图2)遥控编码
4.硬件设计
硬件设计见电路原理图(3)所示。
(图3)遥控器电路原理图
5。
软件设计
(1)采用中断的处理程序完成整个系统的操作,INT0中断处理完成键盘扫描以及发送。
(2)程序流程图:
(图4)遥控器软件流程图
二、电风扇控制板
1。
工作原理及组成部分:
红外接收部分包括光电转换放大器、解调、解码电路。
(1)CPU板将单片机、控制、键盘组合在一起完成了人机对话。
用AT89C51单片机来作主芯片控制,采用红外T1838接收头,用双向可控硅MC97A6控制电机档位,具有红外遥控功能。
(2)电源部分:
交流220V经变压器降压为2×8V,全波整流后再由三端稳压器LM7805稳压,供给控制板。
(3)电风扇控制板框图
(图5)电风扇控制板框图
2.设计方案
(1)控制部分
(图6)电机引线图
K1:
低、中、高档,相应的指示灯亮。
参见(图6)
K2:
控制彩灯,相应的指示灯亮
K3:
自然风、睡眠风、正常风控制。
参见(图8)、(图9)、(图10)
K4:
定时30分钟,1小时,2小时,4小时.相应的指示灯点亮。
参见(图7)
K5:
具有开机功能和关机功能
(图7)定时时循环图
(2)风类
自然风的处理流程:
(图8)自然风的循环图
睡眠风的处理流程:
(图9)自然风的循环图
正常风的处理流程:
(图10)正常风循环
(3)工作方式:
分为手动和遥控两种方式。
4.硬件设计:
参见(图11)
(图11)电风扇控制板电路原理图
5.软件设计:
(1)红外遥控输入在P3。
2(INT0),面板按键P3。
3(INT1).
(2)遥控的解码过程:
(图12)编码
(图13)数据帧图形
单片机收到一个中断后,开始计数, 然后在主程序有一个判断子程序,首先判断是否>8MS,是否有高电平,再判断是否>4MS的低电平,然后再判断是否是0或1,循环32次完成,32个码的接收和存储.
(3)程序流程图:
(图14)控制板主程序流程
(图15)键值处理流程
;=============电风扇红外发射(遥控器)程序=====================================
;按键说明:
;K1:
低风档,键值为01
;K2:
中风档,键值为02
;K3:
高风档,键值为03
;K4:
彩灯档,键值为04
;K5:
自然风档,键值为05
;K6:
睡眠风档,键值为06
;K7:
正常风档,键值为07
;K8:
定时档,键值为08
;K9:
开关机,键值为9
;采用4×1.5V供电,用89C2051作CPU芯片,当没有按键按下时,进入待机状态
;按键采用INT0进行中断,只采用了8个按键
;==============================================================================
$include(2051RAM。
INC)
;$include(REG51。
INC)
ORG 0000H
JMP MAIN
ORG 0003H ;INT0的中断入口
JMP KEY_INT0
ORG 000BH ;T0的中断入口
JMP FM_T0
ORG 0100H
;———---—---—————-——-———--—————————--—----—------———-----——----——-—-----—--—-——-
;进入主程序
;-—--——-—-—---———————-—-—-——-—-—---—-—-———--———--—-----———--—-——-—--———--——-———
MAIN:
MOV R0,#7FH ;预使用单元清0
CLR A
MAIN0:
MOV @R0,A
DJNZ R0,MAIN0 ;清缓冲的地址单元值
MOV SP,#60H
MOV P1,#00001111B ;将P1置输入
CLR KEYON
CLR IT0 ;设置电平触发
SETB PT0
SETB EX0
SETB EA
MOV 40H,#0FFH
MOV 41H,#0FFH
MOV 42H,#0FFH
CLR DATAOUT
CLR FMOUT ;38K的中断初始值
MOV TMOD,#02H ;T0的工作方式2
MOV TH0,#0F7H ;送初值
SETB FMOUT
CLR TR0 ;1/3的高电平标志
MOV R2,#02H ;2/3的循环次数
DJNZ 40H,LOOP1
DJNZ 41H,LOOP1
DJNZ 42H,LOOP1
MOV PCON,#01H ;进入待机
LOOP1:
JMP MAIN
;=============================================================
;中断程序:
完成其按键按下的标志位
;=============================================================
KEY_INT0:
PUSH ACC
PUSH PSW
CLR EX0
MOV A,P1
CPL A
ANL A,#0FH
MOV R2,A ;将行号存入R2中
MOV P1,#0F0H ;将列置输入端
MOV A,P1
CPL A
ANL A,#0F0H ;取列号并存入A中
MOV R1,#03H ;置列初号
MOV R3,#03H ;置循环次数
CLR C
PINT01:
RLC A ;取列号
JC PINT01
DEC R1
DJNZ R3,PINT01
PINT02:
MOV A,R2 ;取行号
MOV R2,#00H
MOV R3,#03H ;置循环次数
PINT03:
RRC A
JC PINT04
INC R2
DJNZ R3,PINT03
PINT04:
MOV A,R2
CLR C
RLC A
RLC A
ADD A,R1
MOV SENDBUF+2,A ;键号存于32H单元中
CPL A
MOV SENDBUF+3,A ;存键号的反码
MOV SENDBUF,#0FFH ;系统码在30H单元中
MOV SENDBUF+1,#00H ;系统反码在31H单元中
LCALL SEND
SETB ET0 ;发送引导码
SETB TR0 ;启动T0
LCALL PP ;发送一帧数据.包括系统码和数据码
CLR TR0 ;当发送完后关断定时器
CLR ET0 ;关T0的中断
SETB EX0 ;执行完后打开外INT0
MOV 40H,#0FFH
MOV 41H,#0FFH
MOV 42H,#0FFH
POP PSW
POP ACC
RETI
;=============================================================================
FM_T0:
JB F0,IT01
DJNZ R2,GRET
MOV R2,#2
IT01:
CPL FMOUT
CPL F0
GRET:
RETI
;==============================================================================
;引导脉冲子程序
SEND:
SETB DATAOUT
LCALL DY9000us
CLR DATAOUT
LCALL DY4500us
RET
;==============================================================================
;发送四个缓冲单元中的内容程序:
PP:
MOV R3,#4 ;发送的字节数
MOV R1,SENDBUF
PP0:
MOV R2,#08H ;让其循环8次
MOV A,@R1 ;将数据首址
CLR C ;清CY
PP1:
RRC A ;右环移带进位
JC ONE ;若C等1
ZER0:
SETB DATAOUT ;若C等0
CALL DY562us
CLR DATAOUT
CALL DY562us
ONE:
SETB DATAOUT
CALL DY562us
CLR DATAOUT
CALL DY1687us
DJNZ R2,PP1
INC R1
DJNZ R3,PP0 ;等四个字节的发送完
RET
;=========================================================================
DY1687us:
MOV R31,#38
L2:
PUSH R31
L3:
DJNZ R31,L3
POP R31
DJNZ R31,L2
RET
;========================================================================
DY562us:
MOV R31,#20
L22:
PUSH R31
L33:
DJNZ R31,L33
POP R31
DJNZ R31,L22
RET
;==========================================================================
;延时9000us子程序:
DY9000us:
MOV R31,#91
L2A:
PUSH R31
L3A:
DJNZ R31,L3A
POP R31
DJNZ R31,L2A
RET
;==============================================================================
;延时4500us子程序
DY4500us:
MOV R31,#67
L2B:
PUSH R31
L3B:
DJNZ R31,L3B
POP R31
DJNZ R31,L2B
RET
;==============================================================================
DY10S:
MOV R6,#10
L2C:
MOV R4,#2
L3C:
MOV R5,#248
DJNZ R5,$
DJNZ R4,L3C
DJNZ R6,L2C
RET
END
INC文件内容
;—-—--—------—--—------——--—-——-—--—-———----—--—-—--————————--—————---—————-————
;AT89C2051内存RAM分配 Fiel=2051ram.INC
;--—-———--—--—-—---—-——-———-———-——-----————-—-——--———-—————-—-———-----—--——-—---
$SAVE
$NOLIST
R31 DATA 1FH
KEYON BIT 20H。
0 ;按键按下的标志
SENDBUF DATA 30H ;定义发送系统码缓冲的地址
FMOUT BIT P3。
3 ;38K输出
DATAOUT BIT P3.0 ;数据输出
$RESTORE
;========================电风扇红外接收(控制板)程序===========
;用89C51单片机来作主芯片控制,采用红外1838接收头,可控硅采用MC97A6
;风扇具有红外遥控功能
;K1:
低档,相应的指示灯亮,中档,相应的指示灯亮,高档,相应的指示灯亮
;K2:
彩灯,相应的指示灯亮
;K3:
自然风控制 睡眠风的控制 正常风的控制
;K4:
定时30分钟,1小时,2小时,4小时
;K5:
开关机功能
;自然风的处理流程:
停-——>开低档-——〉延时6秒———〉开中档-->
;延时6秒-—-〉开高档-——〉循环
;睡眠风的处理流程:
停6S——-〉开低档10S-—-〉停延时10S——〉开中档10S-—〉
;停延时10S-->开高档10S--—>循环
;正常风的处理流程:
开低档10S——>开中档10S—->开高档10S-——〉循环
;==========================================================
$INCLUDE(REG51.INC)
$INCLUDE(89C51RAM.INC)
ORG 0000H
JMP START
ORG 0003H
JMP JISH_INT0 ;红外遥控中断设置
ORG 000BH
JMP LP0 ;定时中断
ORG 0013H
JMP KEY_INT1 ;按键中断
ORG 0100H
START:
MOV R0,#7FH ;预使用单元清0
CLR A
MAIN0:
MOV @R0,A
DJNZ R0,MAIN0
MOV SP,#60H
MOV TMOD,#01H
MOV TH0,#3CH ;定时50MS
MOV TL0,#0B0H
SETB LLOW ;关低风
SETB MDI ;关中风
SETB HIGHT ;关高风
SETB LLAP ;关彩灯
MOV P0,#0FFH ;关所有的指示灯
SETB EX0
SETB EX1
SETB EA ;CPU开中
MAIN:
JB LKEYON,KEYHANDLE ;检按键标志位
JB REC,KEYHANDLE ;检接收中断标志位
JMP MAIN ;转主程序
;==============================================================================
;键值的处理的程序
;键盘处理程序
;K1键:
完成弱、中、强控制,相应的指示灯点亮
;K2键:
完成彩灯控制,相应的指示灯点亮
;K3键:
完成自然风、睡眠风、正常风的控制,相应的指示灯点亮
;K4键:
完成定时的控制,同时0。
5H,1H,2H,4H,相应的指示灯点亮
;K5键:
开/关机
;==============================================================================
KEYHANDLE:
CLR LKEYON
CLR LREC
MOV A,MRD
CJNE A,#01H,KEY2 ;当键值=01H时,
;---—-—--——---—-----—-———----——-—-——-—-—-—--—-———---—---—————-—---—-——--—-----—
;低、中、高、的控制
;—-—-—----—————---——--—--—-——-—--———---—---——-—-—---——————--———--—————--—-——--—
KEY1:
JB DANG01,DIFENG
JB DANG02,ZHONGFENG ;DANG02中档标志位
JB DANG03,QIANGFENG ;DANG03强档标志位
JMP MAIN
;——---——---——————---—-——-———-——-—-——-——--—--———-———-——-———---—--—---———-——----—
;低档控制
DIFENG:
JNB DANG01,FAN0
SETB LLOW ;完成了低档的程序,关低
SETB MDI ;关中
SETB HIGHT ;关高
CALL DY20MS ;保证三个SCR全部为关断状态
CLR LLOW ;开低风
CLR LED_L ;开低档指示灯
CLR DANG01
FAN0:
JMP MAIN
;----———————--—-—-——---———-————-——--———--—--————--—--—--—--———--——--—-————-——--
;中档控制
ZHONGFENG:
JNB DANG02,FAN0
SETB LLOW ;关低
SETB MDI ;关中
SETB HIGHT ;关高
CALL DY20MS ;保证三个SCR全部为关断状态
CLR MDI
CLR LED_M
CLR DANG02
AJMP MAIN ;跳转到
;----—-—-----——-—-—---—---—--————-————-——————-—--————-—-—----—-——--—-—-—-—-——-—
;高档控制
QIANGFENG:
JNB DANG03,FAN0
SETB LLOW ;关低
SETB MDI ;关中
SETB HIGHT ;关高
CALL DY20MS ;保证三个SCR全部为关断状态
CLR HIGHT
CLR LED_H
CLR DANG03
AJMP MAIN ;跳转到
;---——-————---————-—-———--—---——--——--—-—--—————-——-—-—-——--——-——-———-—-——----—
;彩灯控制
;—--—--—------———--—-—-—-——-—------—-----——--——--——--——-——--———--———-—-—-——--—-
KEY2:
CJNE A,#02H,KEY3 ;K4的处理程序彩灯的处理程序
JB PLAP,LED1
CLR LLAP ;第一次按时将彩灯打开,
CLR LED_LAP
SETB PLAP
JMP MAIN ;返回
LED1:
SETB LLAP ;第二次按时将彩灯关断
SETB LED_LAP
CLR PLAP
JMP MAIN ;跳转到
;—-