这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 单片机实现PT2262解码原理

共2条 1/1 1 跳转至

单片机实现PT2262解码原理

高工
2018-06-22 08:46:32     打赏

1、ASK调制

        “幅移键控”又称为“振幅键控”,也有称为“开关键控”(通断键控),所以又记作OOK信号。ASK是一种相对简单的调制方式。幅移键控(ASK)相当于模拟信号中的调幅,只不过与载频信号相乘的是二进制数码而已。幅移就是把频率、相位作为常量,而把振幅作为变量,信息比特是通过载波的幅度来传递的。二进制振幅键控(2ASK), 由于调制信号只有0或1两个电平,相乘的结果相当于将载频或者关断,或者接通,它的实际意义是当调制的数字信号为“1”时,传输载波;当调制的数字信号为“0”时,不传输载波。一般载波信号用余弦信号,而调制信号是把数字序列转换成单极性的基带矩形脉冲序列,而这个通断键控的作用就是把这个输出与载波相乘,就可以把频谱搬移到载波频率附近。

2、几个周期

        2.1、时钟周期:也称为振荡周期或晶振周期,定义为时钟频率的倒数,即晶振的振荡频率的倒数,计为:T(时)=1/f(osc)。时钟周期是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。对于某种单片机,若采用了1MHZ的时钟频率,则时钟周期为1us。

        2.2、状态周期:状态周期是振荡周期的二倍。振荡周期也称为晶振周期,振荡周期是单片机的基本时间单位。振荡脉冲经二分频成为时钟信号,时钟信号的周期称为状态周期。若时钟晶振的振荡频率为fosc,则时钟信号的状态周期Tosc=(1/fosc)*2。(即为振荡频率的倒数的2倍)。例如:晶振频率为12MHZ,则时钟周期Tosc=(1/12us)*2。

        2.3、机器周期:单片机的基本操作周期。在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。一个操作周期内,单片机完成一项基本操作。

        2.4、指令周期:执行一条指令所需要的时间,一般由若干个机器周期组成。指令不同,所需的机器周期数也不同。对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。

        综上所述:一个机器周期 = 6个状态周期 = 12个时钟周期

3、位码

        红外编码波形的基本单位,为分AD(地址码、数据码)位和SYNC(同步码)位,每“位”波形由两个脉冲周期构成,每个脉冲周期含有16个时钟周期。位码使用两个脉冲信号表示一个编码值,其中,两个连续窄脉冲表示编码值“0”;两个连续宽脉冲表示编码值“1”;一个窄脉冲和一个宽脉冲表示“F”,也就是地址码的“悬空”。即每个位码bit用2bit表示:00 或01或10表示0码;11表示1码。

        如下图所示,编码芯片PT2262发出的编码信号经过整形电路之后得到的脉冲波形图。由:地址码、数据码、同步码组成。地址码和数据码都用宽度不同的脉冲来表示,两个窄脉冲表示“0”; 两个宽脉冲表示“1”; 一个窄脉冲和一个宽脉冲表示“F”,也就是地址码的“悬空”;同步码为时间较长的低电平间隔,下图为PT2262编码图: 

 

        如上图,发射端每发送一次信号都会携带多组编码字码,每段编码字码值相同,二进制值为0B010101010101010100001100,对应的十六进制码值为:0x55550C。从图中可以看出,发送码的周期是相等的,只是脉冲宽度不同(宽脉冲与窄脉冲之比为3:1)。而同步码的低电平时间约为这个周期的8倍。

        解码的关键是识别同步码,然后对后面的字码的脉冲宽度进行识别,就可以解出这个编码。PT2262每次发射时至少发射4组字码,每组字码由25个脉冲组成,前24个脉冲为地址和数据,最后一个脉冲和一低电平间隔组成同步码。

 

4、单片机解码思路:

        下面我们来说说如何用51单片机对其进行解码。由于程序结构不复杂,就不再画程序流程图了。

        红外线经一体化接收模块解码后送到单片机的外部中断0,单片机设置外部中断下降沿触发(即外部中断0为跳变沿触发方式,从高到低的负跳变触发进入中断处理函数进行解码操作);

        首先我们把T0设置为16位定时器模式,工作在定时状态,初始化值为0,在晶振的工作频率为11.0592MHz时计满最大值计数值的时间为:71111us。由于同步码周期与地址数据周期都远小于定时器0的定时时间,所在定时器0正常工作时,是不会溢出的;

        T1用作延时,设置其定时为1ms(本示例中没有用到T1功能);

        在EX0=1(外部中断0启动)并且EA=1(使能所有中断)后,当下降沿到来时进入到中断处理函数,T0在TR0的控制下启动与停止计时;

        当接收到下降沿后,先判断当前的电平状态,检测到是低电平时则把T0计时器归零开始计数低电平的时间宽度,电平状态发生变化时停止计数。取TH0和TL0之和即可根据该低电平的时间宽度值来识别是否为同步码。只有先识别出同步码,才开始接收后续脉冲数据进行24位解码操作。

 

        判断电平宽度,检测是否为同步码时,事实上超过10ms即有可能为同步码。初步找出同步码后,根据同步码低电平宽度取得宽脉冲低电平宽度值,根据同步码低电平宽度取得窄脉冲低电平宽度值,由上面的PT2262编码格式图可以看出,同步码低电平持续时间是宽脉冲低电平持续时间的32倍,是窄脉冲低电平持续时间的10(或11)倍,后续的24位数据的宽、窄脉冲低电平持续时间宽度进行比较,满足一定的范围时,即可解析出发射端送出的编码。

        注意:因为生产接收模块的厂家不同,标准不一,我遇到过有的模块把接收信号反向了,这时就需要找寻时间宽度较长的高电平来初步识别同步码了。

        以下为示例代码说明部分:

 

/********************************************************************************************************************************************************************************

文件名:Decode.c  (zqjun@HK 2014-05)

*  描  述:用一个外部中断IO脚配合定时器0实现对2262系列编码信号进行软解码, PT2262的输出信号经LM358整形放大后由单片机P3.2口输入,作为单片机的外部中断源。

编  码:A0 -- A11 中的每bit用2bit表示:0码:00 ;1码:11

硬  件:PT2262发射模块、LM358+R25.接收模块、STC89C52RC单片机

晶  振:11.0592MHz

说  明:

1、PT2262输出编码包括8位地址码、4位数据码、1位同步码,共13位,顺序:A0 A1 -- A10 A11 + 同步码 + A0 A1 -- A10 A11 + 同步码,连续发四次。

2、四个振荡周期为1个编码计时单位,记作T,除同步码外,编码中只有2种类别的组合脉冲取名长脉冲和短脉冲,其中:长脉冲由3T高电平、1T低电平组成;短脉冲由1T高电平、3T低电平组成。

3、同步码,由1T高电平31T低电平组合(实际测试同步码低电平宽度基本在10ms以上)。

4、只需测量低电平或者高电平长短,即可知是长还是短脉冲,超过12T时间没有脉冲变化就有可能是同步码。

**********************************************************************************************************************************************************************************/




管理员
2018-06-25 08:58:53     打赏
2楼

谢谢楼主分享


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]