红外遥控HX1838发送与接收原理
时间: 2023-10-01 13:06:12 浏览: 94
HX1838是一种常用的红外遥控接收模块,它可以接收红外信号并输出相应的数字信号,用于遥控器、红外遥控车、红外门禁等场合。下面是它的发送与接收原理:
1. 发送原理
红外遥控HX1838的发送原理比较简单,它内置了一个红外LED,当输入高电平时,LED会发射红外光,用于遥控器发送指令。
2. 接收原理
HX1838的接收原理比较复杂,它可以接收38kHz调制的红外信号,将其解调成数字信号输出。具体操作流程如下:
(1)接收红外信号
当遥控器按下按钮时,遥控器会发射38kHz调制的红外信号,HX1838会接收到这个信号。
(2)解调红外信号
HX1838内置了一个解调电路,可以将38kHz调制的红外信号解调成数字信号。解调电路会将接收到的信号进行整流、滤波等处理,然后输出数字信号。
(3)输出数字信号
当解调电路输出数字信号时,HX1838会将这个信号输出到单片机或其他设备上,用于判断接收到的指令。
以上就是红外遥控HX1838的发送与接收原理。需要注意的是,HX1838的解调电路对红外信号的要求比较高,因此在使用时需要注意避免干扰。
相关问题
hx1838红外遥控原理
HX1838是一种红外接收模块,用于接收红外遥控信号。其工作原理如下:
1. 红外发射器将红外信号发送出去;
2. 经过一定距离后,红外信号到达HX1838模块;
3. HX1838模块接收到红外信号后,会将其转换为电信号;
4. 电信号被传递到解码器中,解码器会将信号解码成对应的遥控指令;
5. 遥控指令被传递给智能设备,智能设备便会执行对应的操作。
HX1838模块一般由红外接收头、放大器、滤波器、解码器等组成,其接收距离一般为10米左右。在使用红外遥控时,需要将遥控器对准HX1838模块,以确保信号能够被正常接收。
stm32f4的红外遥控hx1838程序
以下是基于STM32F4的HX1838红外遥控程序示例:
```c
#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#include "misc.h"
#define IR_PIN GPIO_Pin_0
#define IR_GPIO GPIOA
#define IR_RCC RCC_AHB1Periph_GPIOA
volatile uint32_t tick_count = 0;
volatile uint32_t last_edge_time = 0;
volatile uint32_t ir_code = 0;
void SysTick_Handler(void)
{
tick_count++;
}
void EXTI0_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line0) != RESET)
{
uint32_t current = tick_count;
uint32_t elapsed = current - last_edge_time;
last_edge_time = current;
if(elapsed > 7000) // Start bit
{
ir_code = 0;
}
else if(elapsed > 3500) // End bit
{
// Process received IR code here
}
else // Data bit
{
ir_code <<= 1;
if(elapsed > 1000) // Logic 1
{
ir_code |= 1;
}
}
EXTI_ClearITPendingBit(EXTI_Line0);
}
}
void init_systick(void)
{
SysTick_Config(SystemCoreClock / 1000);
}
void init_ir_receiver(void)
{
GPIO_InitTypeDef gpio_init;
EXTI_InitTypeDef exti_init;
NVIC_InitTypeDef nvic_init;
RCC_AHB1PeriphClockCmd(IR_RCC, ENABLE);
gpio_init.GPIO_Pin = IR_PIN;
gpio_init.GPIO_Mode = GPIO_Mode_IN;
gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
gpio_init.GPIO_OType = GPIO_OType_PP;
gpio_init.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(IR_GPIO, &gpio_init);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);
exti_init.EXTI_Line = EXTI_Line0;
exti_init.EXTI_Mode = EXTI_Mode_Interrupt;
exti_init.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
exti_init.EXTI_LineCmd = ENABLE;
EXTI_Init(&exti_init);
nvic_init.NVIC_IRQChannel = EXTI0_IRQn;
nvic_init.NVIC_IRQChannelPreemptionPriority = 0x00;
nvic_init.NVIC_IRQChannelSubPriority = 0x00;
nvic_init.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&nvic_init);
}
int main(void)
{
init_systick();
init_ir_receiver();
while(1)
{
// Your code here
}
}
```
这个程序使用了STM32F4的SysTick定时器来计算时间,并使用了外部中断EXTI0来接收HX1838红外解码器的信号。当接收到红外信号时,程序将计算时间间隔并解码数据。你可以在"Process received IR code here"注释下面的代码中添加你自己的逻辑来处理解码后的数据。