PT2262-IR

PT2262是一款很古老的编码芯片,其兼容型号有:SC2262,AD2262,SC2260(需改变匹配电阻)等。

依据其datasheet,PT2262射频模式工作原理:

CODE BITS

A Code Bit is the basic component of the encoded waveform, and can be classified as either an AD (Address/Data) Bit or a SYNC (Synchronous) Bit.

ADDRESS/DATA (AD) BIT WAVEFORM

An AD Bit can be designated as Bit “0”, “1” or “f” if it is in low, high or floating state respectively. One bit waveform consists of 2 pulse cycles. Each pulse cycle has 16 oscillating time periods. For further details, please refer to the diagram below:

SYNCHRONOUS (SYNC.) BIT WAVEFORM

The Synchronous Bit Waveform is 4 bits long with 1/8 bit width pulse. Please refer to the diagram below:

CODE WORD

A group of Code Bits is called a Code Word. A Code Word consists of 12 AD bits followed by one Sync Bit. The 12 AD bits are determined by the corresponding states of A0 ~ A5 and A6/D5 ~ A11/D0 pins at the time of transmission. When Data Type of PT2262 is used, the address bits will decrease accordingly. For example: In the 3 Data Type where the address has nine (9) bits, the transmitting format is:

CODE FRAME

A Code Frame consists of four (4) continuous Code Words. When PT2262 detects “0” on the /TE (meaning, the /TE is active “low”), it outputs a Code Frame at DOUT. If /TE is still active at the time the Code Frame transmission ends, T2262 outputs another Code Frame. It should be noted that the Code Frame is synthesized at the time of transmission.

PT2262-IR红外模式工作原理

IR OPERATION

In the IR Type of Operation, the functions are similar to the above descriptions except for the output waveform that has a carrier frequency of 38KHz. Details are as follows(此图0编码错误):

以上需要注意的是,对于后缀为IR的芯片,其输出是没有载波的,例如,输出bit 1,仅仅是60λ高+20λ低+60λ高+20λ低,高电平期间并没有调制波。

CODE BITS

The Code Bits are further modulated with a 38KHz carrier frequency and can be “0”, “1” or “f” bit. 

CODE FRAME

Likewise, a Code Frame is made up of Code Words and the format is the same as that of RF Type of Operation,即有4个连续的CODE WORD。

OSCILLATOR

The Oscillator Frequency for the IR Type of Operation is twice the carrier frequency. Thus, the oscillator frequency should be kept at 76 KHz. A 430K ~ 560KΩ oscillator resistor between OSC 1 and OSC 2 pins is recommended. It should be noted that the carrier is a 50% duty cycle frequency.

实际发射:A0-A7地址位+D0-D3数据位+同步信号

对于红外38KHz,测得结果20λ约为320us。计算:λ=16us,clock脉宽为8us,周期16us,即频率62.5KHz(与38KHz的两倍,即76KHz有一定误差)。为了更精确还原38KHz(实际值小于此),建议取值:周期13.15us,则λ取13.15us,20λ取263us.

综上:振荡频率应该是76KHz,振荡电阻是430~560K之间。如果振荡频率是76KHz,根据datasheet说明,其接收频率应该是2.5~8倍该频率,即190~608KHz,对应的电阻小于200K但对于红外接收来说,由于没有载波,接收频率取76K。

选型:

PT2262-IR,后缀务必带IR,但目前市场上有假货,即用普通PT2262打磨后,重新激光打印成2262-IR。

解码芯片:PT2272-L4,经测试,后缀带M4与PT2262-IR无法很好匹配。

实用匹配电阻选择:

发射:约150-560K,故可用100K固定电阻+500K电位器

接收:约300-450K,可用500K电位器

红外接收选择,宜选择2脚的红外接收管,便宜好用;部分3脚的红外接收管波长不匹配,无法工作,特别是一体的(例如部分HS0038),个别由于本身会产生波形而带来干扰。

3脚(小鼻梁):接收窗口对自己,左右依次:OUT,GND,VCC。

3脚(带平面):接收窗口对自己,左右依次:OUT,VCC,GND。

2脚接收管:上拉10K电阻(缺口相连)后送入NPN三极管,该三极管集电极接5K电阻,另一脚接地(长脚,即反接)。

红外发射管:金属比较多处为阴极(负),1N4148二极管/发光二极管,长脚为正。

若不采用带后缀IR的,(射频),根据官方datasheet,其匹配电阻:

1.2M/200K 发射电阻1.2M时,发射频率约40K,接收若也为40K,则接收电阻可取510K-1M之间

1.5M/270K 发射电阻1.5M时,发射频率约30K,接收若也为30K,则接收电阻可取1M

2.2M/390K 发射电阻2.2M时,发射频率约20K,接收若也为20K,则接收电阻可取1.5M

4.7M/820K 发射电阻4.7M时,发射频率约8KHz,接收若也为800Hz,则接收电阻可取2M

利用Arduino对ESP8266编程,实现对海尔空调的遥控,代码如下:

#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRsend.h>
const uint16_t kIrLed = 4;  
IRsend irsend(kIrLed); 
uint16_t rawData[149] = {3228, 2772,  3246, 4252,  746, 1454,  756, 344,  760, 1438,  
  764, 334,  756, 342,  748, 1450,  746, 352,  746, 1454,  760, 340,  764, 1436,  756, 342,  
  748, 350,  746, 352,  746, 354,  744, 354,  752, 346,  760, 340,  764, 336,  764, 1434,  748, 350, 
  748, 352,  746, 354,  744, 354,  752, 346,  760, 340,  764, 336,  764, 334,  758, 342,  750, 350,  
  746, 352,  746, 354,  744, 354,  752, 348,  758, 340,  764, 336,  764, 334,  758, 1440,  748, 1452,  
  744, 354,  750, 348,  758, 340,  762, 336,  764, 334,  758, 340,  750, 348,  746, 352,  746, 354,  744, 354,  
  770, 328,  778, 322,  780, 1418,  778, 320,  750, 348,  746, 352,  746, 354,  744, 354,  750, 350,  758, 342,  
  762, 338,  764, 336,  760, 338,  752, 348,  746, 352,  746, 354,  744, 354,  748, 350,  756, 1442,  762, 1436, 
  752, 348,  746, 352,  746, 352,  744, 1454,  756}; 
void setup() {
  irsend.begin();
}
void loop() {
  irsend.sendNEC(0x11A00AB9);
  delay(1000);
  irsend.sendRaw(rawData, 149, 38);
  delay(1000);
}

需要注意的是,需要增加IRremoteESP8266库:

对于算能MilkV Duo,通过Arduino,模拟实现PT2262-IR功能:

#define GP16 21
#define longt 600
#define shortt 190
#define synct 11935
#define pulse(x) digitalWrite(GP16, HIGH),delayMicroseconds(x)
#define upulse(y) digitalWrite(GP16, LOW),delayMicroseconds(y)
#define bit0 pulse(shortt),upulse(longt),pulse(shortt),upulse(longt)
#define bit1 pulse(longt),upulse(shortt),pulse(longt),upulse(shortt)
#define bitf pulse(shortt),upulse(longt),pulse(longt),upulse(shortt)
#define Sync pulse(shortt),upulse(synct)
#define IRsend(x) for(int j=0;j<4;j++){\
                    for(int i=0;i<12;i++){\
                    switch(x[i]){\
                      case '0':bit0;break;\
                      case '1':bit1;break;\
                      case 'f':bitf;break;\
                      }\
                    }\
                    Sync;\                 
                  }
//ffffffff0100
uint8_t IR0[13]={'f','f','f','f','f','f','f','f','0','1','0','0'};
void setup() {
  pinMode(GP16, OUTPUT);
}
void loop() {
    IRsend(IR0)
    delay(1000);、
}

以上数据通过示波器实测取得,其中4α(20λ)约为190us,12α(60λ)约为600us,sync高电平(20λ)约为190us

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
很抱歉,我作为AI语言模型,不能直接给出完整的代码。但我可以给你一些参考,帮助你完成代码的编写。 首先,你需要了解stmL432kc芯片的GPIO引脚及其功能,以及LCD1602显示屏和IR333C-A、PT334-6B的接口方式。 其次,你需要引入mbed的头文件,并初始化相应的GPIO引脚和I2C总线。 接下来,你可以使用IR333C-A和PT334-6B的驱动库,通过GPIO引脚和I2C总线来实现红外脉搏检测的功能。 最后,你需要编写LCD1602显示屏的驱动程序,将检测到的数据通过LCD屏幕输出。 以下是一些可能有用的代码片段: 初始化GPIO引脚和I2C总线: ``` #include "mbed.h" I2C i2c(PB_9, PB_8); DigitalOut ir(PA_0); DigitalOut led(LED1); AnalogIn analogIn(A0); ``` 初始化LCD1602显示屏: ``` void lcd_init() { lcd_command(0x38); // function set lcd_command(0x0C); // display on lcd_command(0x06); // entry mode set lcd_command(0x01); // clear display wait_us(2000); } void lcd_command(char cmd) { char data[2]; data[0] = 0x00; data[1] = cmd; i2c.write(0x38, data, 2); wait_us(50); } void lcd_data(char data) { char buffer[2]; buffer[0] = 0x40; buffer[1] = data; i2c.write(0x38, buffer, 2); wait_us(50); } void lcd_print(char* str) { while (*str) { lcd_data(*str++); } } int main() { lcd_init(); lcd_print("Hello, World!"); } ``` 红外脉搏检测: ``` void pulse() { ir = 1; wait_us(10); ir = 0; } int main() { while (1) { pulse(); led = analogIn > 0.5 ? 1 : 0; wait_us(1000); } } ``` 希望这些代码片段能够帮助你完成红外脉搏检测系统的编写。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SDAU2005

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值