TA的每日心情 | 怒 2023-7-25 22:49 |
---|
签到天数: 385 天 连续签到: 1 天 [LV.9]以坛为家II
|
拿到这个板子有一段时间了,硬究了一段时间,今天才开始更新。
要红外分析仪,那必须要有红外的接收头,这个在网上买的HS0038一体化接收头塑封红外接收头红外接收管,这东西很便宜。
0038一共三个引脚,脚位排列(正面):
脚1:OUT
脚2:GND
脚3:VCC
接收范围:12-13米
电压范围:2.7V-5.5V
GD32F450使用3.3v电压,在有效电压范围之内。
红外协议,我这里科普下,已经熟悉的朋友,可以略过。
NEC协议载波:38khz
其逻辑1与逻辑0的表示如图所示:
逻辑1为2.25ms,脉冲时间560us;逻辑0为1.12ms,脉冲时间560us。所以我们根据脉冲时间长短来解码。推荐载波占空比为1/3至1/4。
NEC协议格式:
首次发送的是9ms的高电平脉冲,其后是4.5ms的低电平,接下来就是8bit的地址码(从低有效位开始发),而后是8bit的地址码的反码(主要是用于校验是否出错)。然后是8bit 的命令码(也是从低有效位开始发),而后也是8bit 的命令码的反码。
以上是一个正常的序列,但可能存在一种情况:你一直按着1个键,这样的话发送的是以110ms为周期的重复码,如下图:
就是说,发了一次命令码之后,不会再发送命令码,而是每隔110ms时间,发送一段重复码。
重复码由9ms高电平和2.25ms的低电平以及560us的高电平组成。
因为我们使用的HS0038是一体化接收头,这个接收头内部电路包括红外监测二极管,放大器,限副器,带通滤波器,积分电路,比较器等。红外监测二极管监测到红外信号,然后把信号送到放大器和限幅器,限幅器把脉冲幅度控制在一定的水平,而不论红外发射器和接收器的距离远近。交流信号进入带通滤波器,带通滤波器可以通过30khz到60khz的负载波,通过解调电路和积分电路进入比较器,比较器输出高低电平,还原出发射端的信号波形。
HS0038接收头电路和工作原理如下:
HS0038红外一体接收头为了提高接受灵敏度。输入高电平,其输出的是相反的低电平。如下图:
我们的硬件电路图如下:
测试代码如下:- #include "gd32f4xx.h" // Device header
- //GPIO口和PIN定义
- #define LED4PORT GPIOB
- #define LED6PORT GPIOB
- #define LED5PORT GPIOD
- #define LED4 GPIO_PIN_4
- #define LED5 GPIO_PIN_7
- #define LED6 GPIO_PIN_3
- #define IRPORT GPIOB
- #define IR_PIN GPIO_PIN_2
- void InitLED(void);
- void InitIR(void);
- int main()
- {
- InitLED();
- InitIR();
-
- while(TRUE)
- {
- //测试是否接收到红外信号
- if(gpio_input_bit_get(IRPORT,IR_PIN) == RESET)
- gpio_bit_toggle(LED4PORT,LED4);
-
- //gpio_bit_toggle(LED5PORT,LED5);
- //gpio_bit_toggle(LED6PORT,LED6);
- }
- }
- /*!
- \brief initialize LED Pin
- \param[in] none
- \param[out] none
- \retval none
- */
- void InitLED(void)
- {
- rcu_periph_clock_enable(RCU_GPIOB);
- rcu_periph_clock_enable(RCU_GPIOD);
-
-
- gpio_mode_set(LED4PORT,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,LED4|LED6);
- gpio_output_options_set(LED4PORT,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,LED4|LED6);
-
- gpio_mode_set(LED5PORT,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,LED5);
- gpio_output_options_set(LED5PORT,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,LED5);
-
- gpio_bit_reset(LED4PORT,LED4);
- gpio_bit_reset(LED6PORT,LED6);
- gpio_bit_reset(LED5PORT,LED5);
- }
- /*!
- \brief initialize IR Pin
- \param[in] none
- \param[out] none
- \retval none
- */
- void InitIR(void)
- {
- rcu_periph_clock_enable(RCU_GPIOB);
- gpio_mode_set(IRPORT,GPIO_MODE_INPUT,GPIO_PUPD_PULLDOWN,IR_PIN);
-
- }
复制代码 实验现象:当用遥控器对着红外接收头按下,LD4会不停的闪烁,说明接收到红外信息。使用逻辑分析仪测量PB2的电平得到如下:
下一篇,会对接收到的红外信息进行存储和传输。
|
|