新手入门
- 积分
- 11
- 金钱
- 11
- 注册时间
- 2016-4-15
- 在线时间
- 3 小时
|
7金钱
毕设在做一个红外线通信实验。学校配的实验板,芯片是STM32F103 VBT6的。实验原理与原子哥第三十二章差不多,然后我想把它改为一个万能遥控器的程序。
http://www.openedv.com/forum.php?mod=viewthread&tid=13257&highlight=%A1%BEALIENTEK%2B%D5%BD%BD%A2STM32%BF%AA%B7%A2%B0%E5%C0%FD%B3%CC%CF%B5%C1%D0%C1%AC%D4%D8%2B%BD%CC%D1%A7%A1%BF
目前已经能够成功遥控电视机,但是空调就不行了。不知道电视机与空调的红外接收机制有哪些技术上的区别。所以还请大神指教!!!
我知道现在市面上的万能遥控器都使用一体化红外发射头,没有单独的红外接收器,即发射头也用来接收红外信号。
但从原理上来讲,我使用接收器读取红外数据,保存起来再发送出去,也是可行的。
有尝试过用机顶盒的遥控器学习空调遥控器的按键,也是可行的。
初步认为可能是载波频率不一样,但一般的遥控器不都是38KHz的吗?学习型机顶盒遥控器也使用38KHz的载波频率吗?还是更高?以便兼容各种不同制式的遥控器?
我的实验板上得红外接收器型号是TSOP34840,也就是40KHz的工作频率,是可以成功接收38KHz红外信号的。但更高就不行了,比如40KHz,56KHz。
以下是我的实验代码。
void TIM2_Configuration(void)
{
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
TIM_TimeBaseStruct.TIM_Period=947; //初值; 1s/38KHz/2=13.16us,即单个脉冲的宽度; 947=13.16*72 ,72MHz系统主频
TIM_TimeBaseStruct.TIM_Prescaler=0;//预分频
TIM_TimeBaseStruct.TIM_ClockDivision=0;
TIM_TimeBaseStruct.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStruct);
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
TIM_Cmd(TIM2,ENABLE);
}
void TIM2_IRQHandler(void)
{
if(js_count>0)
js_count--;
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
}
#define Nbit 1000
u8 hw_jsm[Nbit];//红外接收码,共8000位数据,一位数据表示一个完整脉冲
void EXTI15_10_IRQHandler(void)
{
if (mode==0)//工作模式,mode=0表示接收模式,mode=1表示发送模式
{
for(i1=0; i1<Nbit; i1++)
{
for(j1=0; j1<8; j1++)
{
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_11)==0)//低电平
{
data=0;
js_count=1;
while(js_count);//等待13.16us
}
else
{
js_count=1;
while(js_count);
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_11)==0)
data=0;
else
data=1;
}
js_count=1;
while(js_count);
hw_jsm[i1]<<=1;
hw_jsm[i1]+=data;
}
}
mode=1;//这里切换为发送模式是为了避免短时间内再次进入接收中断
hw_jsbz=1;//接收标志置为1
}//if(mode)
EXTI_ClearITPendingBit(EXTI_Line11);
}
void hw_fs(void)
{
u16 i,j;
u8 temp;
for(i=0; i<Nbit; i++)
{
temp=0x80; //从高位开始发数据
for(j=0; j<8; j++)
{
if(hw_jsm & temp) //该位数据为“1”
{
GPIO_ResetBits(GPIOC,GPIO_Pin_3);
js_count=2;
while(js_count);
}
else
{
GPIO_WriteBit(GPIOC,GPIO_Pin_3,(BitAction)((1-GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_3))));
js_count=1;
while(js_count);
GPIO_WriteBit(GPIOC,GPIO_Pin_3,(BitAction)((1-GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_3))));
js_count=1;
while(js_count);
}
temp>>=1;
}
}
GPIO_ResetBits(GPIOC,GPIO_Pin_3);
}
工作原理基本上是把接收到的脉冲信号原封不动的发出去。
还请大家帮我分析一下这样做有哪些缺陷,性能瓶颈在哪。
|
-
收发器原理图
最佳答案
查看完整内容[请看2#楼]
空调是打包发送的,状态由遥控器管理。
电视只是单按键。
每家空调都有不同的协议,需要详细的文档才玩得动。
|