打印
[STM32F1]

红外数据发送有效距离不稳定,而且有问题

[复制链接]
2616|31
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
用的103做的一个红外遥控器,在测试有效距离的时候,从很近的地方开始发送命令,然后一点一点的使距离增加
在没有超出最远距离之前都可以成功,但是,一旦中间有哪一次没有成功(这个距离是在有效距离之内的),

比如方向错了,那么这个时候 就必须再次非常靠近接收的空调才能继续控制空调。


大家有没有遇到过这种情况?
沙发
布谷鸟2015| | 2015-9-17 20:40 | 只看该作者
没有具体做过,之前做过一款无线调光的,感觉和你这个类似,但是没有楼主这样的情况。

使用特权

评论回复
板凳
稳稳の幸福| | 2015-9-17 21:15 | 只看该作者
那就是彻底不行了

使用特权

评论回复
地板
稳稳の幸福| | 2015-9-17 21:17 | 只看该作者
建议直接从很远开始测试,往近了走。

使用特权

评论回复
5
拉克丝| | 2015-9-17 21:52 | 只看该作者
好像是这个问题,失败时候设个复位不知道行不

使用特权

评论回复
6
airwill| | 2015-9-18 07:11 | 只看该作者
看来是空调的接口板还在接收未完成的数据. 缺乏超时断开机制.

使用特权

评论回复
7
comm2010| | 2015-9-18 08:31 | 只看该作者
软件设计的有问题,缺乏对异常的处理

使用特权

评论回复
8
PhycoKnight|  楼主 | 2015-9-18 16:33 | 只看该作者
稳稳の幸福 发表于 2015-9-17 21:17
建议直接从很远开始测试,往近了走。

测试了,还是不行。

使用特权

评论回复
9
PhycoKnight|  楼主 | 2015-9-18 16:38 | 只看该作者
airwill 发表于 2015-9-18 07:11
看来是空调的接口板还在接收未完成的数据. 缺乏超时断开机制.

刚开始的时候,发送完一个指令后,pwm波依旧在发送。后来我改成每发完一次就把pwm停掉了。然后这个时候发送的距离就非常近。

在示波器上看波形。感觉不对,应为默认电平是低的。就是配置完后是A的波形。但是正确的波形应该是B的波形才对啊。

我程序如下,能否看下有什么地方不对。

GPIO_InitTypeDef GPIO_InitStructure;
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    TIM_OCInitTypeDef TIM_OCInitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
   

    TIM_TimeBaseStructure.TIM_Period = 26 - 1;
    TIM_TimeBaseStructure.TIM_Prescaler = 72 - 1;
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Down;
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);   

    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = 13;
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
    TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;   
    TIM_OC3Init(TIM2, &TIM_OCInitStructure);
   
    TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);
    TIM_ARRPreloadConfig(TIM2, ENABLE);


使用特权

评论回复
10
PhycoKnight|  楼主 | 2015-9-18 16:39 | 只看该作者
comm2010 发表于 2015-9-18 08:31
软件设计的有问题,缺乏对异常的处理

如果做异常处理的话,应该从什么地方考虑呢?因为感觉只是一个遥控器,不会有回复的数据,没发根据数据做出相应处理。

使用特权

评论回复
11
PhycoKnight|  楼主 | 2015-9-18 16:41 | 只看该作者
拉克丝 发表于 2015-9-17 21:52
好像是这个问题,失败时候设个复位不知道行不

额,发送的数据肯定是没错的。如果想要复位,起码应该有个应答数据啥的。但是空调貌似不会返回应答数据。。。

使用特权

评论回复
12
PhycoKnight|  楼主 | 2015-9-18 16:42 | 只看该作者
布谷鸟2015 发表于 2015-9-17 20:40
没有具体做过,之前做过一款无线调光的,感觉和你这个类似,但是没有楼主这样的情况。 ...

你当时的问题出在哪里?

使用特权

评论回复
13
皈依| | 2015-9-18 16:55 | 只看该作者
在软件里面要设置,检测到引导码,后面的部分要做异常处理。
楼主可以在测试的时候按键速度减慢 再测试测试

使用特权

评论回复
14
PhycoKnight|  楼主 | 2015-9-18 16:59 | 只看该作者
皈依 发表于 2015-9-18 16:55
在软件里面要设置,检测到引导码,后面的部分要做异常处理。
楼主可以在测试的时候按键速度减慢 再测试测试 ...

引导码肯定是检测的

在207上是没有问题的。移植到103上出现的问题。

很怪的问题。

使用特权

评论回复
15
皈依| | 2015-9-18 17:03 | 只看该作者
最好能在线调试一下,当出现无法控制的时候检测MCU处于什么状态,程序是跑死还是别的问题

使用特权

评论回复
16
PhycoKnight|  楼主 | 2015-9-18 17:10 | 只看该作者
皈依 发表于 2015-9-18 17:03
最好能在线调试一下,当出现无法控制的时候检测MCU处于什么状态,程序是跑死还是别的问题 ...

程序没有跑死,跑死就复位了。看门狗已经开了。

调试是没有问题的,组出来的数据没问题,发送出去然后接收看波形也没问题。

如果在发送完一个命令后不停止pwm波,虽然距离会远一点,但是距离远的时候会导致“中间一旦有某一次空调没反应,那么后面的命令都没反应,这个时候必须要站到离空调很近的地方才行。在近距离的时候,每次命令空调都可以反应。”

如果每发送完一个命令,就停止pwm波,然后距离就会非常近,非常近。

使用特权

评论回复
17
皈依| | 2015-9-18 17:14 | 只看该作者
那就要多方面找原因了,红外接收头的质量,测试环境有没有红外干扰,红外发射器等等。

使用特权

评论回复
18
PhycoKnight|  楼主 | 2015-9-18 17:28 | 只看该作者
皈依 发表于 2015-9-18 17:14
那就要多方面找原因了,红外接收头的质量,测试环境有没有红外干扰,红外发射器等等。 ...

非常感谢~!

使用特权

评论回复
19
豆腐块| | 2015-9-18 19:59 | 只看该作者
是不是初始化没配置好

使用特权

评论回复
20
尤彼卡| | 2015-9-18 20:31 | 只看该作者
有时候可能是硬件问题,我之前调一个NRF24l01,弄来好长时间不成功,后来发现,模块是坏的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

36

帖子

0

粉丝