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

上传人:仙人指路1688 文档编号:4142166 上传时间:2023-04-07 格式:DOC 页数:34 大小:308.50KB
返回 下载 相关 举报
红外线遥控逻辑分析仪的设计.doc_第1页
第1页 / 共34页
红外线遥控逻辑分析仪的设计.doc_第2页
第2页 / 共34页
红外线遥控逻辑分析仪的设计.doc_第3页
第3页 / 共34页
红外线遥控逻辑分析仪的设计.doc_第4页
第4页 / 共34页
红外线遥控逻辑分析仪的设计.doc_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《红外线遥控逻辑分析仪的设计.doc》由会员分享,可在线阅读,更多相关《红外线遥控逻辑分析仪的设计.doc(34页珍藏版)》请在三一办公上搜索。

1、毕业设计(论文)课题红外线逻辑分析仪的设计类 别毕业设计论文系 科专 业应用电子技术应用电子技术/应用英语电气自动化技术电气自动化技术/市场营销计算机应用技术计算机应用技术/广告设计与策划班 级姓 名完成日期指导教师红外线遥控逻辑分析仪的设计摘 要在高新技术飞速发展的今天,随着信息技术的普及,红外技术得到了迅猛发展。本设计采用用途广泛的红外线通信技术设计了一款基于计算机串口的红外逻辑分析仪,本课题由SM0038红外接收头、STC89C52单片机、MAX232电平转换器、DB9构成硬件部分,由下位机程序和上位机程序构成软件部分。设计的逻辑分析仪可对各种电器的红外遥控器所发射的控制信号进行识别、存

2、贮和再现。还可通过红外硬件接口识别出红外信号并送入单片机处理,然后利用VB开发的虚拟软件在电脑屏幕上实时显示采集到的红外信号波形便于设计人员对各种调制方式的红外信号进行“可视化”的分析与研究。关键词:串口 红外通信 红外逻辑分析仪Infrared Remote Control Logic AnalyzerAbstract The rapid development of high-tech today, with the spread of information technology, infrared technology has been developing rapidly. This

3、 design uses a wide range of uses infrared communication technology designed a computer-based logic analyzer infrared serial port, this project was supported by SM0038 infrared receiver head, STC89C52 microcontroller, MAX232 level converter, DB9 constitute the hardware part, by the next crew procedu

4、res and upper Machine procedures constitute software. Design logic analyzer can be a variety of electrical infrared remote control signal emitted by the identification, storage and reproduction. Hardware interface can be identified by infrared infrared signal and sent to MCU processing, then use the

5、 VB development of virtualization software on a computer screen real-time display of the infrared signal waveforms collected to facilitate the designer of various modulation infrared signals visual of analysis and research.Key words:Serial Infrared communication Infrared logic analyze.目 录 摘 要IAbstra

6、ctII引言11 红外线介绍12 串口通信原理12.1 波特率选择12.2通信协议的使用22.3 硬件连接23 硬件设计33.1 STC89C52芯片33.1.1主要性能43.1.2 STC89C52单片机芯片引脚介绍43.2 SM0038芯片43.2.1 SM0038引脚接法43.2.2 SM0038与单片机接口电路53.3 MAX232芯片53.3.1 MAX232芯片引脚53.3.2 MAX232芯片功能63.4 电源电路及其说明63.5 总原理图及其说明74 软件设计74.1 红外编码格式74.2 单片机的软件编程84.2.1下位软件编程思路84.2.2 下位机程序84.3 上位机软件

7、设计114.3.1上位机软件编程思路114.3.2 上位机程序115 系统调试245.1硬件调试245.2 软件调试255.3 软硬件联调255.3.1 调试的方法255.3.2 调试中出现的故障及解决方案25总结26参考文献- 1 -致谢- 2 -附录- 3 -引言红外通信技术是一种点对点的数据传输协议,是传统设备之间连接线缆的替代技术,是目前国际上普通采用的一种近程无线传输技术,常用于智能小区控制系统和电话教学交互式远程控制系统中,但是目前的家电(如空调、录像机、VCD机等)有各种不同的品牌和型号,其红外遥控编码及发送格式不尽相同。为了能够用一台通用控制器对多种不同型号的家电进行控制,本文

8、利用功能强大的单片机和编程软件VB设计了一种基于计算机串口的通用型智能红外逻辑分析仪,它可对各种电器的红外遥控器所发射的控制信号进行识别、存贮和再现。还可通过红外硬件接口识别出红外信号并送入单片机处理,然后利用VB开发的虚拟软件在电脑屏幕上实时显示采集到的红外信号波形 便于设计人员对各种调制方式的红外信号进行“可视化”的分析与研究。1 红外线介绍红外线是波长在7 5 0 nm至1mm之间的电磁波,它的频率高于微波而低于可见光,是一种人的眼睛看不到的光线。 红外通讯一般采用红外波段内的近红外线,波长在O,75um至25um之间。红外数据协会(IRDA)成立后,为了保证不同厂商的红外产品能够获得最

9、佳的通讯效果,红外通讯协议将红外数据通讯所采用的光波波长的范围限定在850nm至900nm。2 串口通信原理串口通讯对单片机而言意义重大,不但可以实现将单片机的数据传输到计算机端,而且也能实现计算机对单片机的控制。由于其所需电缆线少,接线简单,所以在较远距离传输中,得到了广泛的运用。2.1 波特率选择波特率就是在串口通信中每秒能够发送的位数(bits/second),MSC51串行端口在四种工作模式下有不同的波特率计算方法。其中,模式0和模式2波特率计算很简单;模式1和模式3的波特率选择相同,故在此仅以工作模式1为例来说明串口通信波特率的选择。在串行端口工作于模式1,其波特率将由计时/计数器1

10、来产生,通常设置定时器工作于模式2(自动再加模式)。在此模式下波特率计算公式为:波特率=(1+SMOD)*晶振频率/(384*(256-TH1)其中,SMOD寄存器PCON的第7位,称为波特率倍增位;TH1定时器的重载值。在选择波特率的时候需要考虑两点:首先,系统需要的通信速率。这要根据系统的运作特点,确定通信的频率范围。然后考虑通信时钟误差。使用同一晶振频率在选择不同的通信速率时通信时钟误差会有很大差别。为了通信的稳定,我们应该尽量选择时钟误差最小的频率进行通信。下面举例说明波特率选择过程:假设系统要求的通信频率在20000bit/s以下,晶振频率为12MHz,设置SMOD=1(即波特率倍增

11、)。则TH1=256-62500/波特率根据波特率取值表,我们知道可以选取的波特率有:1200,2400,4800,9600,19200。列计数器重载值,通信误差如下表2.1所示。表2.1 波特率与计数器重载值关系 因此,在通信中,最好选用波特率为1200,2400,4800中的一个。2.2通信协议的使用通信协议是通信设备在通信前的约定。单片机、计算机有了协议这种约定,通信双方才能明白对方的意图,以进行下一步动作。假定我们需要在PC机与单片机之间进行通信,在双方程式设计过程中,有如下约定: 0xA1:单片机读取P0端口数据,并将读取数据返回PC机; 0xA2:单片机从PC机接收一段控制数据;

12、0xA3:单片机操作成功信息。在系统工作过程中,单片机接收到PC机数据信息后,便查找协议,完成相应的操作。当单片机接收到0xA1时,读取P0端口数据,并将读取数据返回PC机;当单片机接收到0xA2时,单片机等待从PC机接收一段控制数据;当PC机接收到0xA3时,就表明单片机操作已经成功。2.3 硬件连接51单片机有一个全双工的串行通讯口,所以单片机和计算机之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如计算机的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是

13、用专用芯片更简单可靠。我们采用了三线制连接串口,也就是说和计算机的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。这是最简单的连接方法,但是对我们来说已经足够使用了,电路如下图所示,MAX232的第10脚和单片机的11脚连接,第9脚和单片机的10脚连接,第15脚和单片机的20脚连接。图2.1 使用MAX232串口通信电路图串口通讯的硬件电路如上图所示为了能够在计算机端看到单片机发出的数据,我们必须借助一个WINDOWS软件进行观察,这里利用如下图标的一个免费计算机串口调软件来观察。 3 硬件设计3.1 STC89C52芯片 图3.1 STC89C52芯片引脚图 3.

14、1.1主要性能与MCS-51单片机产品兼容 、8K字节在系统可编程Flash存储器、 1000次擦写周期、全静态操作:0Hz33Hz 、三级加密程序存储器 、 32个可编程I/O口线、三个16位定时器/计数器八个中断源、全双工UART串行通道、 低功耗空闲和掉电模式 、掉电后中断可唤醒 、看门狗定时器 、双数据指针、掉电标识符 。3.1.2 STC89C52单片机芯片引脚介绍STC89C52芯片 共40引脚:1-8脚: 通用I/O接口p1.0-p1.79脚:RST复位键10 .11脚:RXD串口输入 TXD串口输出12-19:I/O p3接口 (12,13脚 INT0中断0 INT1中断114

15、,15 : 计数脉冲T0 T1 16,17: WR写控制 RD读控制输出端)18,19: 晶振谐振器 20 地线 2128: p2 接口 高8位地址总线29:PSEN片外ROM选通端,单片机对片外ROM操作时,29脚(PSEN)输出低电平30:ALE/PROG 地址锁存器31:EA ROM取指令控制器,高电平片内取,低电平片外取32-39:p0.7-p0.0(注意此接口的顺序与其他I/O接口不同 与引脚号的排列顺序相反)40:电源+5V3.2 SM0038芯片3.2.1 SM0038引脚接法 图3.2 SM0038外观图 SM0038是红外线传感器,它对外只有3个引脚:GND、VS和1个脉冲信

16、号输出引脚OUT,只能接收38KHZ的红外线信号,外形引脚如图3.2所示。3.2.2 SM0038与单片机接口电路 图3.3 SM0038与单片机接口电路与单片机接口非常方便,如图四所示。VCC接电源+5V并经电容进行滤波,以避免电源干扰; GND接系统的地线(0V);脉冲信号输出接CPU的中断输入引脚(例如8051的13脚INT1)。采取这种连接方法,软件解码既可工作于查询方式,也可工作于中断方式。3.3 MAX232芯片 3.3.1 MAX232芯片引脚Max232产品是由德州仪器公司(TI)推出的一款兼容RS232标准的芯片。该器件包含2驱动器、2接收器和一个电压发生器电路提供TIA/E

17、IA-232-F电平。该器件符合TIA/EIA-232-F标准,每一个接收器将TIA/EIA-232-F电平转换成5-V TTL/CMOS电平。每一个发送器将TTL/CMOS电平转换成TIA/EIA-232-F电平,芯片图如图3.4所示。 图3.4 MAX2323.3.2 MAX232芯片功能为了能使单片机与PC进行通信,必须使其遵循相同的通信协议。由于STC89C52的串行口输入/输出为TTL逻辑电平,高电平为3.8V左右,低电平为0.3V左右,因而这种以TTL电平传送数据的方式的抗干扰性较差。而计算机内部的RS-232C串行口用12V和-12V电平方式,这种方式中,信号0和信号1的电平差别

18、增大,从而增强了抗干扰性。但是,为了解决这种电平不一致的矛盾,必须采用一个RS-232C电平转换器,文中采用的MAX232自身带有电源电压变换器,可把+5V电压变换成RS-232输出电平所需的10V电压,因而采用这种方式进行串行通信具有较好的性能和低廉的价格。如果通信距离较远,还可以通过增加MAX485转换器来连接MAX232以满足要求。 3.4 电源电路及其说明图3.5 电源电路先通过变压器降压为12V,经过整流桥将交流电压变为直流电压,然后再滤波,通过78M05稳压器稳压,输出+5V的电压提供给总电路用,使其电路正常工作。3.5 总原理图及其说明 图3.6 系统电路原理图先通过SM0038

19、的红外接收头接收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(脉冲位置调制

20、)。两种形式编码的代表分别为NEC和PHILIPS的RC-5、RC-6以及将来的RC-7。PWM(脉冲宽度调制):以发射红外载波的占空比代表“0”和“1”。为了节省能量,一般情况下,发射红外载波的时间固定,通过改变不发射载波的时间来改变占空比。例如常用的电视遥控器,使用NEC upd6121,其“0”为载波发射0.56ms,不发射0.56ms;其“1”为载波发射0.56ms,不发射1.68ms;此外,为了解码的方便,还有引导码,upd6121的引导码为载波发射9ms,不发射4.5ms。upd6121总共的编码长度为108ms。但并不是所有的编码器都是如此,比如TOSHIBA的TC9012,其引

21、导码为载波发射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位必然是不可靠的。另外,由于空调的状态远多于电视、音像,并且没有一个标准,所以各厂家都按自己的格式去做一个,造成差异更大

22、。比如:美的的遥控器采用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所

23、记的数值送单片机处理。4.2.2 下位机程序#include#define uchar unsigned char #define uint unsigned intuchar dat2=0;sbit P11=P17;sbit P32=P32;sbit P33=P33;bit tmp=1;void TimeSet()/定时器设置 串口设置TMOD=0x21;/定时器TR1=1;/SM0=0;/串口中断设置/SM1=1;/SM2=1; SCON=0x50;TH1=0xff;TL1=0xff; 22.1184MHZM/TL1=0xff115200EA=1;ES=0;EX0=1;IT0=1; PCO

24、N=0x80;TH0=0x00;TL0=0x00;/TR0=1;ET0=1;void delay(void) /误差 -1.041666666667usunsigned char a,b;for(b=61;b0;b-)for(a=3;a0;a-);void INT() interrupt 0TR0=1;tmp=0;/P2+=1;void Time0() interrupt 1dat0=TH0;dat1=TL0;tmp=1;SBUF=dat0;delay();TI=0;SBUF=dat1;delay();TI=0; TR0=0;/TF0=0;TH0=0;TL0=0;/P33=0;void Tim

25、e1() interrupt 3 RI=0;TI=0;void main()TimeSet();while(1)/SBUF=0x0a;/ P2+=1; if(tmp=0 & P32=1) TF0=1;/P2+=1;4.3 上位机软件设计4.3.1上位机软件编程思路 利用Visual Basic提供的MSComm控件可以简单便携地通过应用程序实现串行通信,也可以创建功能完备、具有事件驱动功能的高级通信工具。与DOS环境下用汇编或C语言等编制的串行通信程序及Windows环境下用Visual C编制的串行通信程序相比,在使用Visual Basic的MSComm控件实现串行通信时,程序员只需关心M

26、SComm控件对Windows通信驱动程序的API函数的接口即可,换句话说,只需要设置和监视MSComm控件的属性和事件即可。4.3.2 上位机程序Modulel (Code)Public Declare Function SetLayeredWindowAttributes Lib user32 (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As LongPublic Const WS_EX_LAYERED = &H80000Public Const GWL_EXS

27、TYLE = (-20)Public Const LWA_ALPHA = &H2Public Const LWA_COLORKEY = &H1Public Declare Function GetWindowLong Lib user32 Alias GetWindowLongA (ByVal hwnd As Long, ByVal nIndex As Long) As LongPublic Declare Function SetWindowLong Lib user32 Alias SetWindowLongA (ByVal hwnd As Long, ByVal nIndex As Lo

28、ng, ByVal dwNewLong As Long) As LongForm1Dim Buffer1(63488) As ByteDim Buffer2(63488) As ByteDim Buffer3(63488) As ByteDim Data_point As LongDim Wave_width As IntegerDim Width_per_BIT As SingleDim n As IntegerDim Time As IntegerDim Data_rate As LongDim temp_long As LongDim Click_flag As BooleanDim O

29、ld_X, Old_Y As SingleDim Flag_about As BooleanFunction Draw_Square_Wave(ByVal Start As Long, ByVal x, Y, Width_per_20us As Integer, ByVal Channel As Integer)Dim Time_long As IntegerDim HEiGHT, LINE_COLOR, START_Y As IntegerDim Temp_buffer, Dp, Dp_old As IntegerSTART_Y = YHEiGHT = 200LINE_COLOR = RGB

30、(0, 0, 255)Picture1.Line (0, START_Y)-(1, START_Y), LINE_COLORTime_long = Picture1.Width / Width_per_20us For i = 0 To Int(Time_long / 8) Select Case Channel Case 1 Temp_buffer = Buffer1(Start + i) Case 2 Temp_buffer = Buffer2(Start + i) Case 3 Temp_buffer = Buffer3(Start + i) End Select k = 0 For j

31、 = 7 To 0 Step -1 k = k + 1 Dp = Int(Temp_buffer / 2 j) If Dp = 0 Then If Dp_old = 0 Then Picture1.Line -(i * 8 + k) * Width_per_20us, START_Y), LINE_COLOR If Dp_old = 1 Then Picture1.Line -(i * 8 + k - 1) * Width_per_20us, START_Y), LINE_COLOR Picture1.Line -(i * 8 + k) * Width_per_20us, START_Y),

32、LINE_COLOR End If End If If Dp = 1 Then Temp_buffer = Temp_buffer - 2 j If Dp_old = 1 Then Picture1.Line -(i * 8 + k) * Width_per_20us, START_Y - HEiGHT), LINE_COLOR If Dp_old = 0 Then Picture1.Line -(i * 8 + k - 1) * Width_per_20us, START_Y - HEiGHT), LINE_COLOR Picture1.Line -(i * 8 + k) * Width_p

33、er_20us, START_Y - HEiGHT), LINE_COLOR End If End If Dp_old = Dp Next Next Picture1.Line (0, Y + 200)-(Picture1.Width, START_Y + 200), RGB(200, 200, 255) PrintWord 0, Y + 20, Str(Round(Start * Width_per_BIT * 8 / 1000, 3) & ms For j = 0 To Int(Time_long / 50) Picture1.Line (j * 50 * Width_per_20us,

34、Y + 100)-(j * 50 * Width_per_20us, START_Y + 200), RGB(200, 200, 255) NextEnd FunctionFunction PrintWord(ByVal x, Y As Integer, ByVal toprint As String) Dim temp1, temp2 As Integer temp1 = Picture1.CurrentX temp2 = Picture1.CurrentY With Picture1 .CurrentX = x .CurrentY = Y .ForeColor = RGB(255, 96,

35、 96) End With Picture1.Print toprint With Picture1 .CurrentX = temp1 .CurrentY = temp2 End WithEnd FunctionPrivate Sub Command1_Click()CommonDialog1.Filter = Ird文件|*.irdCommonDialog1.ShowOpenDim temp_Filename As StringDim save_Filename As StringDim temp_counter As Longtemp_Filename = CommonDialog1.F

36、ileNameCommonDialog1.ShowSavesave_Filename = CommonDialog1.FileNameOn Error GoTo fuckOpen temp_Filename For Binary As #1 For temp_counter = 0 To 63488 Get #1, , Buffer1(temp_counter) Next For temp_counter = 0 To 63488 Get #1, , Buffer2(temp_counter) Next For temp_counter = 0 To 63488 Get #1, , Buffe

37、r3(temp_counter) NextClose #1Picture1.Clstemp_long = HScroll1.ValueDraw_Square_Wave temp_long * 2, 0, 900, Wave_width, 1Draw_Square_Wave temp_long * 2, 0, 2200, Wave_width, 2Draw_Square_Wave temp_long * 2, 0, 3500, Wave_width, 3GoTo outfuck:MsgBox 打开文件出错out:End SubPrivate Sub Command2_Click() If MSC

38、omm1.PortOpen = False Then Init_com Select Case MSComm1.PortOpen Case False Data_point = 0 End Select MSComm1.PortOpen = Not MSComm1.PortOpen Select Case MSComm1.PortOpen Case False Timer1.Interval = 0 Label1.Caption = 串口已关闭,数据采集被强行停止 Data_point = 0 Label2.Caption = 0 Bit/s Command2.Caption = 开始采集 P

39、icture1.Cls Command1.Enabled = True Command3.Enabled = True Case True Command2.Caption = 强行停止 Command2.Enabled = True Combo1.Enabled = False Command1.Enabled = False Command3.Enabled = False Label1.Caption = 串口已开启,波特率为115200bps,等待数据中 Time = 0 Timer1.Interval = 200 End SelectEnd SubPrivate Sub Comman

40、d3_Click()CommonDialog1.Filter = Ird文件|*.irdCommonDialog1.ShowSaveDim temp_Filename As StringDim temp_counter As Longtemp_Filename = CommonDialog1.FileNameCommonDialog1.ShowSavesave_Filename = CommonDialog1.FileNameOn Error GoTo fuckOpen temp_Filename For Binary As #1 For temp_counter = 0 To 63488 P

41、ut #1, , Buffer1(temp_counter) Next For temp_counter = 0 To 63488 Put #1, , Buffer2(temp_counter) Next For temp_counter = 0 To 63488 Put #1, , Buffer3(temp_counter) NextClose #1GoTo outfuck:MsgBox 保存文件出错out:End SubPrivate Sub Command5_Click() If Wave_width = 10240 Then Wave_width = 10240 Wave_width

42、= Wave_width * 2 HScroll1.Max = 63486 / 2 - (Picture1.Width / Wave_width) / 8 Picture1.Cls Draw_Square_Wave temp_long * 2, 0, 900, Wave_width, 1 Draw_Square_Wave temp_long * 2, 0, 2200, Wave_width, 2 Draw_Square_Wave temp_long * 2, 0, 3500, Wave_width, 3End SubPrivate Sub Command6_Click() Wave_width = Wave_width / 2 If Wave_width 2.5 Then Wave_width = 2.5 HScroll1.Max = 63486 / 2 - (Picture1.Width / Wave_width) / 8 Picture1.Cls Draw_Square_Wave temp_long * 2, 0, 900, Wave_width, 1 Draw_Square_Wave temp_long * 2, 0, 2200, Wave_width, 2 D

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

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号