红外线遥控逻辑分析仪的设计毕业设计论文.docx

上传人:b****5 文档编号:3632828 上传时间:2022-11-24 格式:DOCX 页数:33 大小:203.78KB
下载 相关 举报
红外线遥控逻辑分析仪的设计毕业设计论文.docx_第1页
第1页 / 共33页
红外线遥控逻辑分析仪的设计毕业设计论文.docx_第2页
第2页 / 共33页
红外线遥控逻辑分析仪的设计毕业设计论文.docx_第3页
第3页 / 共33页
红外线遥控逻辑分析仪的设计毕业设计论文.docx_第4页
第4页 / 共33页
红外线遥控逻辑分析仪的设计毕业设计论文.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

红外线遥控逻辑分析仪的设计毕业设计论文.docx

《红外线遥控逻辑分析仪的设计毕业设计论文.docx》由会员分享,可在线阅读,更多相关《红外线遥控逻辑分析仪的设计毕业设计论文.docx(33页珍藏版)》请在冰豆网上搜索。

红外线遥控逻辑分析仪的设计毕业设计论文.docx

红外线遥控逻辑分析仪的设计毕业设计论文

毕业设计(论文)

课题

红外线逻辑分析仪的设计

类别

毕业设计论文

系科

专业

应用电子技术应用电子技术/应用英语

电气自动化技术电气自动化技术/市场营销

计算机应用技术计算机应用技术/广告设计与策划

班级

姓名

完成日期

指导教师

红外线遥控逻辑分析仪的设计

摘要

在高新技术飞速发展的今天,随着信息技术的普及,红外技术得到了迅猛发展。

本设计采用用途广泛的红外线通信技术设计了一款基于计算机串口的红外逻辑分析仪,本课题由SM0038红外接收头、STC89C52单片机、MAX232电平转换器、DB9构成硬件部分,由下位机程序和上位机程序构成软件部分。

设计的逻辑分析仪可对各种电器的红外遥控器所发射的控制信号进行识别、存贮和再现。

还可通过红外硬件接口识别出红外信号并送入单片机处理,然后利用VB开发的虚拟软件在电脑屏幕上实时显示采集到的红外信号波形便于设计人员对各种调制方式的红外信号进行“可视化”的分析与研究。

关键词:

串口红外通信红外逻辑分析仪

InfraredRemoteControlLogicAnalyzer

Abstract

Therapiddevelopmentofhigh-techtoday,withthespreadofinformationtechnology,infraredtechnologyhasbeendevelopingrapidly.Thisdesignusesawiderangeofusesinfraredcommunicationtechnologydesignedacomputer-basedlogicanalyzerinfraredserialport,thisprojectwassupportedbySM0038infraredreceiverhead,STC89C52microcontroller,MAX232levelconverter,DB9constitutethehardwarepart,bythenextcrewproceduresandupperMachineproceduresconstitutesoftware.Designlogicanalyzercanbeavarietyofelectricalinfraredremotecontrolsignalemittedbytheidentification,storageandreproduction.HardwareinterfacecanbeidentifiedbyinfraredinfraredsignalandsenttoMCUprocessing,thenusetheVBdevelopmentofvirtualizationsoftwareonacomputerscreenreal-timedisplayoftheinfraredsignalwaveformscollectedtofacilitatethedesignerofvariousmodulationinfraredsignals"visual"ofanalysisandresearch.

Keywords:

SerialInfraredcommunicationInfraredlogicanalyze.

引言

红外通信技术是一种点对点的数据传输协议,是传统设备之间连接线缆的替代技术,是目前国际上普通采用的一种近程无线传输技术,常用于智能小区控制系统和电话教学交互式远程控制系统中,但是目前的家电(如空调、录像机、VCD机等)有各种不同的品牌和型号,其红外遥控编码及发送格式不尽相同。

为了能够用一台通用控制器对多种不同型号的家电进行控制,本文利用功能强大的单片机和编程软件VB设计了一种基于计算机串口的通用型智能红外逻辑分析仪,它可对各种电器的红外遥控器所发射的控制信号进行识别、存贮和再现。

还可通过红外硬件接口识别出红外信号并送入单片机处理,然后利用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电平传送数据的方式的抗干扰性较差。

而计算机内部的RS-232C串行口用±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

#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>0;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];

delay();

TI=0;

TR0=0;

//TF0=0;

TH0=0;

TL0=0;

//P33=0;

}

voidTime1()interrupt3

{

RI=0;

TI=0;

}

voidmain()

{

TimeSet();

while

(1)

{

//SBUF=0x0a;

//P2+=1;

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"user32"Alias"GetWindowLongA"(ByValhwndAsLong,ByValnIndexAsLong)AsLong

PublicDeclareFunctionSetWindowLongLib"user32"Alias"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

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

EndIf

EndIf

Dp_old=Dp

Next

Next

Picture1.Line(0,Y+200)-(Picture1.Width,START_

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小升初

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1