第2章 电路设计
2.1 整体电路设计根据设计要求,红外遥控音乐台灯可以分为三个模块进行设计:
1.单片机最小系统电路:单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的最小的系统单元。
对51系列单片机来说,最小系统一般应该包括:单片机、时钟电路、复位电路。本设计中使用的单片机为STC89C51,晶振电路使用12MHZ的晶振。复位电路:由电容串联电阻构成,当系统一上电,RST脚将会出现高电平,当RST脚的高电平持续两个机器周期以上就将复位。
2.红外解码电路:本电路主要用于对红外遥控器发出的红外信号进行解码,然后程序根据解码后的不同键值相应完成不同的功能。
3.音乐播放模块:本模块采用ULN2003及扬声器组成语音系统对经单片机解码后所得的音乐代码的数字量放大再转换为模拟量实现音乐的播放。
4.LED灯具组:我们选用耐压值为12V的发光二极管总共为12个。每4个led分为一组,分别与单片机A8、A9、A10管脚相连,从而实现台灯的三档亮度调节。
分析各模块电路的功能,画出原理框图如图2-1所示:
图2-1 红外遥控音台灯原理框图
2.2 电路模块设计
2.2.1 单片机最小系统电路图2-2 单片机最小系统电路图
由图2-2可以知道,单片机最小系统主要由复位电路、时钟电路等组成。
1.复位电路:由电容串联电阻构成,并结合"电容电压不能突变"的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且,这个高电平持续的时间由电路的RC值来决定。
典型的51单片机当RST脚的高电平持续两个机器周期以上就将复位,所以,适当组合RC的取值就可以保证可靠的复位。一般教科书推荐C 取10uF,R取8.2K左右。当然也有其他取法的,原则就是要让RC组合可以在RST脚上产生不少于2个机周期的高电平。单片机复位电路就好比电脑的重启部分,当电脑在使用中出现死机,按下重启按钮电脑内部的程序从头开始执行。单片机也一样,当单片机系统在运行中,受到环境干扰出现程序跑飞的时候,按下复位按钮内部的程序自动从头开始执行。
2.时钟电路:单片机内部有一个高增益反相放大器,引脚XTAL1 和XTAL2 分别是该放大器的输入端和输出端,如果引脚XTAL1 和XTAL2 两端跨接上晶体振荡器(晶振)或陶瓷振荡器就构成了稳定的自激振荡电路,该振荡电路的输出可直接送入内部时序电路。
单片机的时钟可由两种方式产生,即内部时钟方式和外部时钟方式。
(1)内部时钟方式。内部时钟方式即是由单片机内部的高增益反相放大器和外部跨接的晶振、微调电容构成时钟电路产生时钟的方法。外接晶振(陶瓷振荡器)时,C1、C2 的值通常选择为30Pf左右;C1、C2 对频率有微调作用,晶振或陶瓷谐振器的频率范围可在1.2MHz ~12MHz之间选择。为了减小寄生电容,更好地保证振荡器稳定、可靠地工作,振荡器和电容应尽可能安装得与单片机引脚XTALl 和XTAL2 靠近。由于内部时钟方式外部电路接线简单,单片机应用系统中大多采用这种方式。内部时钟方式产生的时钟信号的频率就是晶振的固有频率,常用fsoc 来表示。
(2)外部时钟方式。外部时钟方式即完全用单片机外部电路产生时钟的方法,外部电路产生的时钟信号被直接接到单片机的XTAL1引入,此时XTAL2 开路。
3.内外程序存储器选择控制端EA/Vpp,决定了单片机访问内部或外部的程序存储器。EA高电平时,访问内部程序存储器,但当程序计数器(PC)值超过0FFFFH时,单片机自动转向外部程序存储器。当EA低电平时,不管单片机有无内部存储器,只访问外部存储器[1]。
2.2.2 红外解码电路红外解码电路如图2-3所示:

图2-3 红外解码电路图
由图2-3知道,红外解码电路中主要元件为红外一体化接收头VS1838B。
一体化红外接收头VS1838B是集信号放大、滤波、检波、整形于一体的红外接收器,电路内置PIN二极管和前置放大器,采用可以红外滤波的环氧树脂材料封装,可靠性高,不易受环境影响并可以防止非控制信号的输出脉冲出现。
内部结构如图2-4所示:
图2-4 VS1838B内部结构图
VS1838B内置带通滤波器、积分器、和自动增益控制电路以抑制各种干扰和噪音。数据信号和干扰信号的主要区别在于载波频率、脉冲波长和工作周期上。所以数据信号应该满足载波信号的频率尽量接近带通滤波器的中心频率(38KHZ);脉冲长度在300us以上;数据的编码类型相兼容。而本系统选用的VS1838B在这三方面和NEC编码格式是相配的
2.2.3 音乐播放模块音乐播放模块电路如图2-5所示:
图2-5 音乐播放模块电路图
1.ULN2003:高压大电流达林顿晶体管阵列,由七个硅NPN复合晶体管组成。电路特点: ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路 直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。本设计中用于扬声器的驱动,同时可以为再次扩展时提供驱动电路。
2.2.4 LED灯具组
第3章 程序设计分析红外遥控音乐播放和控制led台灯亮度的功能,包括选择播放三首歌曲、不同歌曲对应不同台灯亮度。根据以上功能,可心得出结论:该程序设计的主要工作,即核心问题是红外信号的解码。因为,无论是播放音乐的哪一个操作,还是控制不同台灯亮度,都是建立在对红外信号的正确解码下的。首先进行正确的红外解码,然后根据解码后的键值进行播放歌曲与显示台灯亮度。按照以上得出的结论,画出程序流程图如图3-1所示:
图3-1 程序流程图
结合程序流程图,可以知道:将整个程序的设计分为两个模块,即:红外解码、播放及亮灯。
3.1 红外解码程序在进行程序设计之前,先分析一下红外信号的波形。每当次按键按下,红外发射器会发出一串脉冲,红外接收器会收到这一串脉冲宽度不等的脉冲波形流,其脉冲流包括:(1)前导码:第1个脉冲波形;(2)用户码1:第2到第9个脉冲波形;(3)用户码2:第10到第17个脉冲波形;(4)数据码:第18到第25个脉冲波形;(5)数据反码:第26到第33个脉冲波形;(6) 连续按键脉冲:第34和第35个脉冲为结束脉冲,在每次按键结束后会有两个结束脉冲,如果一直按键不放的话,会一直发送连续按键脉冲,并可以认为在收到10个连续按键脉冲后是下一个按键(本次设计中不考虑连续按键脉冲)。其码型结构如图3-2所示:
图3-2 红外信号码型图
由图3-2可知:红外信号码型中本次设计中要使用的部分,即是图3-2中的8位键数据码。下面分析具体的怎样进行红外信号的解码。
红外信号为采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,其波形如图3-3所示。
图3-3 红外信号脉冲宽度图
上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线向空间发射,即产生了如图3-2所示的有效码组序列。在图3-3中同样可以看到引导码脉宽为9ms,间隔4.5ms。在红外信号经过解码电路后,原码型中的高低电平进行反转。在得到的新码型中,去掉第一个下降沿(引导码),第二个下降沿开始即为有效码序列,应该进行解码并记录。在本设计中,将解码后的信号引入外部中断1,由于是下降沿有效,故IT1=1[2]。红外解码源码如下:
3.2 播放及亮灯程序分析音乐播放的过程,其为不同频率声音的组合,当一组恰当频率声音组合按照一定的先后顺序与节拍播放时,即可产生音乐。故要产生音频信号,只要算出某一音频的周期,将此周期除以2即为半周期的时间,利用定时器计时此半周期时间,计时到后取反输出,重复此过程即得到此频率的声音信号。此信号从P3.2脚输出,用ULN2003驱动扬声器播放音乐。其中每个音符使用两个字节表示:低位字节(偶地址)代表音级,表示的音级为c、﹟c、d、﹟d、e、f、……a3、﹟a3、b3;高位字节(奇地址)代表音符的时值(节拍),表示拍数为1/8拍(0.10s)~8拍(6.40s)。
程序设计中用软件延时程序来控制音级, 与红外解码共用定时器0进行节拍的控制。红外信号解码后,蜂鸣器播放音乐源码如下:
- #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
-
- typedef unsigned int u16; //对数据类型进行声明定义
- typedef unsigned char u8;
- sbit IRIN=P3^2;
- u8 IrValue[6];
- u8 Time;
- u8 DisplayData[8];
- u8 code smgduan[17]={
- 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0X76};
- //0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F、H的显示码
- /*******************************************************************************
- * 函 数 名 : delay
- * 函数功能 : 延时函数,i=1时,大约延时10us
- *******************************************************************************/
- void delay(u16 i)
- {
- while(i--);
- }/*******************************************************************************
- * 函数名 : IrInit()
- * 函数功能 : 初始化红外线接收
- * 输入 : 无
- * 输出 : 无
- *******************************************************************************/
- void IrInit()
- {
- IT0=1;//下降沿触发
- EX0=1;//打开中断0允许
- EA=1; //打开总中断
- IRIN=1;//初始化端口
- }
- /*******************************************************************************
- * 函 数 名 : main
- * 函数功能 : 主函数
- * 输 入 : 无
- * 输 出 : 无
- *******************************************************************************/
- void main()
- {
- IrInit();
- while(1)
- {
- DisplayData[0] = smgduan[IrValue[2]/16];
- DisplayData[1] = smgduan[IrValue[2]%16];
- DisplayData[2] = smgduan[16];
- DigDisplay();
- }
- }
- /*******************************************************************************
- * 函数名 : ReadIr()
- * 函数功能 : 读取红外数值的中断函数
- * 输入 : 无
- * 输出 : 无
- *******************************************************************************/
- void ReadIr() interrupt 0
- {
- u8 j,k;
- u16 err;
- Time=0;
- delay(700); //7ms
- if(IRIN==0) //确认是否真的接收到正确的信号
- {
-
- err=1000; //1000*10us=10ms,超过说明接收到错误的信号
- /*当两个条件都为真是循环,如果有一个条件为假的时候跳出循环,免得程序出错的时
- 侯,程序死在这里*/
- while((IRIN==0)&&(err>0)) //等待前面9ms的低电平过去
- {
- delay(1);
- err--;
- }
- if(IRIN==1) //如果正确等到9ms低电平
- {
- err=500;
- while((IRIN==1)&&(err>0)) //等待4.5ms的起始高电平过去
- {
- delay(1);
- err--;
- }
- for(k=0;k<4;k++) //共有4组数据
- {
- for(j=0;j<8;j++) //接收一组数据
- {
- err=60;
- while((IRIN==0)&&(err>0))//等待信号前面的560us低电平过去
- {
- delay(1);
- err--;
- }
- err=500;
- while((IRIN==1)&&(err>0)) //计算高电平的时间长度。
- {
- delay(10); //0.1ms
- Time++;
- err--;
- if(Time>30)
- {
- return;
- }
- }
- IrValue[k]>>=1; //k表示第几组数据
- if(Time>=8) //如果高电平出现大于565us,那么是1
- {
- IrValue[k]|=0x80;
- }
- Time=0; //用完时间要重新赋值
- }
- }
- }
- if(IrValue[2]!=~IrValue[3])
- { EX1=1;
- return; }
复制代码
第4章 硬件调试根据上述设计电路画出电路原理图,根据原理图焊接电路板,实物图如图4-1所示:
图4-1 实物图
在本设计中使用的红外遥控器如图4-2所示,遥控器各按键相应码值如图4-3所示:
图4-2 红外遥控器 图4-3 遥控器按键码值
红外遥控音乐台灯的设计中,对于红外遥控器未将全部的按键设计功能,本设计使用按键对应码值及功能如表4-1所示:
表4-1 遥控器按键、码值及功能表
根据设计功能进行硬件调试,调试过程如下:
(1)单片机上电,此时无按键按键,台灯不亮,蜂鸣器不工作。
(2)按下数字键1,对应码值0c,台灯亮度为1档,蜂鸣器工作,播放曲目1:祝你平安
(3)按下数字键2,对应码值18,台灯亮度为2档,蜂鸣器工作,播放曲目2:八月桂花
(4)按下数字键3,对应码值5e,台灯亮度为3档,蜂鸣器工作,播放曲目3:菊花台