红外线遥控逻辑分析仪的设计毕业设计论文Word下载.docx
- 文档编号:16537740
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:33
- 大小:203.78KB
红外线遥控逻辑分析仪的设计毕业设计论文Word下载.docx
《红外线遥控逻辑分析仪的设计毕业设计论文Word下载.docx》由会员分享,可在线阅读,更多相关《红外线遥控逻辑分析仪的设计毕业设计论文Word下载.docx(33页珍藏版)》请在冰豆网上搜索。
还可通过红外硬件接口识别出红外信号并送入单片机处理,然后利用VB开发的虚拟软件在电脑屏幕上实时显示采集到的红外信号波形便于设计人员对各种调制方式的红外信号进行“可视化”的分析与研究。
1红外线介绍
红外线是波长在750nm至1mm之间的电磁波,它的频率高于微波而低于可见光,是一种人的眼睛看不到的光线。
红外通讯一般采用红外波段内的近红外线,波长在O,75um至25um之间。
红外数据协会(IRDA)成立后,为了保证不同厂商的红外产品能够获得最佳的通讯效果,红外通讯协议将红外数据通讯所采用的光波波长的范围限定在850nm至900nm。
2串口通信原理
串口通讯对单片机而言意义重大,不但可以实现将单片机的数据传输到计算机端,而且也能实现计算机对单片机的控制。
由于其所需电缆线少,接线简单,所以在较远距离传输中,得到了广泛的运用。
2.1波特率选择
波特率就是在串口通信中每秒能够发送的位数(bits/second),MSC51串行端口在四种工作模式下有不同的波特率计算方法。
其中,模式0和模式2波特率计算很简单;
模式1和模式3的波特率选择相同,故在此仅以工作模式1为例来说明串口通信波特率的选择。
在串行端口工作于模式1,其波特率将由计时/计数器1来产生,通常设置定时器工作于模式2(自动再加模式)。
在此模式下波特率计算公式为:
波特率=(1+SMOD)*晶振频率/(384*(256-TH1))
其中,SMOD——寄存器PCON的第7位,称为波特率倍增位;
TH1——定时器的重载值。
在选择波特率的时候需要考虑两点:
首先,系统需要的通信速率。
这要根据系统的运作特点,确定通信的频率范围。
然后考虑通信时钟误差。
使用同一晶振频率在选择不同的通信速率时通信时钟误差会有很大差别。
为了通信的稳定,我们应该尽量选择时钟误差最小的频率进行通信。
下面举例说明波特率选择过程:
假设系统要求的通信频率在20000bit/s以下,晶振频率为12MHz,设置SMOD=1(即波特率倍增)。
则
TH1=256-62500/波特率
根据波特率取值表,我们知道可以选取的波特率有:
1200,2400,4800,9600,19200。
列计数器重载值,通信误差如下表2.1所示。
表2.1波特率与计数器重载值关系
因此,在通信中,最好选用波特率为1200,2400,4800中的一个。
2.2通信协议的使用
通信协议是通信设备在通信前的约定。
单片机、计算机有了协议这种约定,通信双方才能明白对方的意图,以进行下一步动作。
假定我们需要在PC机与单片机之间进行通信,在双方程式设计过程中,有如下约定:
0xA1:
单片机读取P0端口数据,并将读取数据返回PC机;
0xA2:
单片机从PC机接收一段控制数据;
0xA3:
单片机操作成功信息。
在系统工作过程中,单片机接收到PC机数据信息后,便查找协议,完成相应的操作。
当单片机接收到0xA1时,读取P0端口数据,并将读取数据返回PC机;
当单片机接收到0xA2时,单片机等待从PC机接收一段控制数据;
当PC机接收到0xA3时,就表明单片机操作已经成功。
2.3硬件连接
51单片机有一个全双工的串行通讯口,所以单片机和计算机之间可以方便地进行串口通讯。
进行串行通讯时要满足一定的条件,比如计算机的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。
我们采用了三线制连接串口,也就是说和计算机的9针串口只连接其中的3根线:
第5脚的GND、第2脚的RXD、第3脚的TXD。
这是最简单的连接方法,但是对我们来说已经足够使用了,电路如下图所示,MAX232的第10脚和单片机的11脚连接,第9脚和单片机的10脚连接,第15脚和单片机的20脚连接。
图2.1使用MAX232串口通信电路图
串口通讯的硬件电路如上图所示为了能够在计算机端看到单片机发出的数据,我们必须借助一个WINDOWS软件进行观察,这里利用如下图标的一个免费计算机串口调软件来观察。
3硬件设计
3.1STC89C52芯片
图3.1STC89C52芯片引脚图
3.1.1主要性能
与MCS-51单片机产品兼容、8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:
0Hz~33Hz、三级加密程序存储器、32个可编程I/O口线、三个16位定时器/计数器八个中断源、全双工UART串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符。
3.1.2STC89C52单片机芯片引脚介绍
STC89C52芯片共40引脚:
1--8脚:
通用I/O接口p1.0--p1.7
9脚:
RST复位键
10.11脚:
RXD串口输入TXD串口输出
12--19:
I/Op3接口(12,13脚INT0中断0INT1中断1
14,15:
计数脉冲T0T116,17:
WR写控制RD读控制输出端)
18,19:
晶振谐振器20地线
21—28:
p2接口高8位地址总线
29:
PSEN片外ROM选通端,单片机对片外ROM操作时,29脚(PSEN)输出低电平
30:
ALE/PROG地址锁存器
31:
EAROM取指令控制器,高电平片内取,低电平片外取
32--39:
p0.7--p0.0(注意此接口的顺序与其他I/O接口不同与引脚号的排列顺序相反)
40:
电源+5V
3.2SM0038芯片
3.2.1SM0038引脚接法
图3.2SM0038外观图
SM0038是红外线传感器,它对外只有3个引脚:
GND、VS和1个脉冲信号输出引脚OUT,只能接收38KHZ的红外线信号,外形引脚如图3.2所示。
3.2.2SM0038与单片机接口电路
图3.3SM0038与单片机接口电路
与单片机接口非常方便,如图四所示。
VCC接电源+5V并经电容进行滤波,以避免电源干扰;
GND接系统的地线(0V);
脉冲信号输出接CPU的中断输入引脚(例如8051的13脚INT1)。
采取这种连接方法,软件解码既可工作于查询方式,也可工作于中断方式。
3.3MAX232芯片
3.3.1MAX232芯片引脚
Max232产品是由德州仪器公司(TI)推出的一款兼容RS232标准的芯片。
该器件包含2驱动器、2接收器和一个电压发生器电路提供TIA/EIA-232-F电平。
该器件符合TIA/EIA-232-F标准,每一个接收器将TIA/EIA-232-F电平转换成5-VTTL/CMOS电平。
每一个发送器将TTL/CMOS电平转换成TIA/EIA-232-F电平,芯片图如图3.4所示。
图3.4MAX232
3.3.2MAX232芯片功能
为了能使单片机与PC进行通信,必须使其遵循相同的通信协议。
由于STC89C52的串行口输入/输出为TTL逻辑电平,高电平为3.8V左右,低电平为0.3V左右,因而这种以TTL电平传送数据的方式的抗干扰性较差。
而计算机内部的RS-232C串行口用±
12V和-12V电平方式,这种方式中,信号0和信号1的电平差别增大,从而增强了抗干扰性。
但是,为了解决这种电平不一致的矛盾,必须采用一个RS-232C电平转换器,文中采用的MAX232自身带有电源电压变换器,可把+5V电压变换成RS-232输出电平所需的±
10V电压,因而采用这种方式进行串行通信具有较好的性能和低廉的价格。
如果通信距离较远,还可以通过增加MAX485转换器来连接MAX232以满足要求。
3.4电源电路及其说明
图3.5电源电路
先通过变压器降压为12V,经过整流桥将交流电压变为直流电压,然后再滤波,通过78M05稳压器稳压,输出+5V的电压提供给总电路用,使其电路正常工作。
3.5总原理图及其说明
图3.6系统电路原理图
先通过SM0038的红外接收头接收38KHZ的红外线信号,然后将信号通过STC89C52单片机的P1.7口送单片机进行处理,单片机再发出接收到的信号给PC机显示该信号的波形,由于STC89C52的串行口输入/输出为TTL逻辑电平,高电平为3.8V左右,低电平为0.3V左右,因而这种以TTL电平传送数据的方式的抗干扰性较差。
12V和-12V电平方式,所以就需要MAX232电平转换器来将可把+5V电压变换成RS-232输出电平所需的±
10V电压,使得PC机与单片机能够正常的通信。
4软件设计
4.1红外编码格式
现有的红外遥控包括两种方式:
PWM(脉冲宽度调制)和PPM(脉冲位置调制)。
两种形式编码的代表分别为NEC和PHILIPS的RC-5、RC-6以及将来的RC-7。
PWM(脉冲宽度调制):
以发射红外载波的占空比代表“0”和“1”。
为了节省能量,一般情况下,发射红外载波的时间固定,通过改变不发射载波的时间来改变占空比。
例如常用的电视遥控器,使用NECupd6121,其“0”为载波发射0.56ms,不发射0.56ms;
其“1”为载波发射0.56ms,不发射1.68ms;
此外,为了解码的方便,还有引导码,upd6121的引导码为载波发射9ms,不发射4.5ms。
upd6121总共的编码长度为108ms。
但并不是所有的编码器都是如此,比如TOSHIBA的TC9012,其引导码为载波发射4.5ms,不发射4.5ms,其“0”为载波发射0.52ms,不发射0.52ms,其“1”为载波发射0.52ms,不发射1.04ms。
PPM(脉冲位置调制):
以发射载波的位置表示“0”和“1”。
从发射载波到不发射载波为“0”,从不发射载波到发射载波为“1”。
其发射载波和不发射载波的时间相同,都为0.68ms,也就是每位的时间是固定的。
通过以上对编码的分析,可以得出以某种固定格式的“0”和“1”去学习红外,是很有可能不成功的。
即市面上所宣传的可以学习64位、128位必然是不可靠的。
另外,由于空调的状态远多于电视、音像,并且没有一个标准,所以各厂家都按自己的格式去做一个,造成差异更大。
比如:
美的的遥控器采用PWM编码,码长120ms左右;
新科的遥控器也采用PWM编码,码长500ms左右。
如此大的差异,如果按“位”的概念来讲,应该是多少位呢?
64位还是128位显然都不可能包含如此长短不一的编码。
4.2单片机的软件编程
4.2.1下位软件编程思路
我用的是C语言编写的程序,该程序主要由串口初始化子函数、外部中断0中断子函数、单片机内部定时器T0中断子函数、红外信号发送子函数等3大模块组成。
等到红外信号下降沿到来时,进入外部中断0中断子函数,打开T0定时器开关TR0,使得T0工作,在主函数中判断外部中断0接线端为1时,进入T0中断子函数,在T0中断子函数中主要是把TH0,TL0所记的数值送单片机处理。
4.2.2下位机程序
#include<
reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
uchardat[2]={0};
sbitP11=P1^7;
sbitP32=P3^2;
sbitP33=P3^3;
bittmp=1;
voidTimeSet()//定时器设置串口设置
{
TMOD=0x21;
//定时器
TR1=1;
//SM0=0;
//串口中断设置
//SM1=1;
//SM2=1;
SCON=0x50;
TH1=0xff;
TL1=0xff;
22.1184MHZM//TL1=0xff115200
EA=1;
ES=0;
EX0=1;
IT0=1;
PCON=0x80;
TH0=0x00;
TL0=0x00;
//TR0=1;
ET0=1;
}
voiddelay(void)//误差-1.041666666667us
unsignedchara,b;
for(b=61;
b>
0;
b--)
for(a=3;
a>
a--);
voidINT()interrupt0
TR0=1;
tmp=0;
//P2+=1;
voidTime0()interrupt1
{
dat[0]=TH0;
dat[1]=TL0;
tmp=1;
SBUF=dat[0];
delay();
TI=0;
SBUF=dat[1];
TR0=0;
//TF0=0;
TH0=0;
TL0=0;
//P33=0;
voidTime1()interrupt3
RI=0;
voidmain()
TimeSet();
while
(1)
{
//SBUF=0x0a;
if(tmp==0&
&
P32==1)
{
TF0=1;
//P2+=1;
}
}
4.3上位机软件设计
4.3.1上位机软件编程思路
利用VisualBasic提供的MSComm控件可以简单便携地通过应用程序实现串行通信,也可以创建功能完备、具有事件驱动功能的高级通信工具。
与DOS环境下用汇编或C语言等编制的串行通信程序及Windows环境下用VisualC编制的串行通信程序相比,在使用VisualBasic的MSComm控件实现串行通信时,程序员只需关心MSComm控件对Windows通信驱动程序的API函数的接口即可,换句话说,只需要设置和监视MSComm控件的属性和事件即可。
4.3.2上位机程序
Modulel(Code)
PublicDeclareFunctionSetLayeredWindowAttributesLib"
user32"
(ByValhwndAsLong,ByValcrKeyAsLong,ByValbAlphaAsByte,ByValdwFlagsAsLong)AsLong
PublicConstWS_EX_LAYERED=&
H80000
PublicConstGWL_EXSTYLE=(-20)
PublicConstLWA_ALPHA=&
H2
PublicConstLWA_COLORKEY=&
H1
PublicDeclareFunctionGetWindowLongLib"
Alias"
GetWindowLongA"
(ByValhwndAsLong,ByValnIndexAsLong)AsLong
PublicDeclareFunctionSetWindowLongLib"
SetWindowLongA"
(ByValhwndAsLong,ByValnIndexAsLong,ByValdwNewLongAsLong)AsLong
Form1
DimBuffer1(63488)AsByte
DimBuffer2(63488)AsByte
DimBuffer3(63488)AsByte
DimData_pointAsLong
DimWave_widthAsInteger
DimWidth_per_BITAsSingle
DimnAsInteger
DimTimeAsInteger
DimData_rateAsLong
Dimtemp_longAsLong
DimClick_flagAsBoolean
DimOld_X,Old_YAsSingle
DimFlag_aboutAsBoolean
FunctionDraw_Square_Wave(ByValStartAsLong,ByValx,Y,Width_per_20usAsInteger,ByValChannelAsInteger)
DimTime_longAsInteger
DimHEiGHT,LINE_COLOR,START_YAsInteger
DimTemp_buffer,Dp,Dp_oldAsInteger
START_Y=Y
HEiGHT=200
LINE_COLOR=RGB(0,0,255)
Picture1.Line(0,START_Y)-(1,START_Y),LINE_COLOR
Time_long=Picture1.Width/Width_per_20us
Fori=0ToInt(Time_long/8)
SelectCaseChannel
Case1
Temp_buffer=Buffer1(Start+i)
Case2
Temp_buffer=Buffer2(Start+i)
Case3
Temp_buffer=Buffer3(Start+i)
EndSelect
k=0
Forj=7To0Step-1
k=k+1
Dp=Int(Temp_buffer/2^j)
IfDp=0Then
IfDp_old=0ThenPicture1.Line-((i*8+k)*Width_per_20us,START_Y),LINE_COLOR
IfDp_old=1Then
Picture1.Line-((i*8+k-1)*Width_per_20us,START_Y),LINE_COLOR
Picture1.Line-((i*8+k)*Width_per_20us,START_Y),LINE_COLOR
EndIf
IfDp=1Then
Temp_buffer=Temp_buffer-2^j
IfDp_old=1ThenPicture1.Line-((i*8+k)*Width_per_20us,START_Y-HEiGHT),LINE_COLOR
IfDp_old=0Then
Picture1.Line-((i*8+k-1)*Width_per_20us,START_Y-HEiGHT),LINE_COLOR
Picture1.Line-((i*8+k)*Width_per_20us,START_Y-HEiGHT),LINE_COLOR
Dp_old=Dp
Next
Picture1.Line(0,Y+200)-(Picture1.Width,START_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 红外线 遥控 逻辑 分析 设计 毕业设计 论文