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

[复制链接]
3708|31
 楼主| PhycoKnight 发表于 2015-9-17 13:47 | 显示全部楼层 |阅读模式
用的103做的一个红外遥控器,在测试有效距离的时候,从很近的地方开始发送命令,然后一点一点的使距离增加
在没有超出最远距离之前都可以成功,但是,一旦中间有哪一次没有成功(这个距离是在有效距离之内的),

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


大家有没有遇到过这种情况?
布谷鸟2015 发表于 2015-9-17 20:40 来自手机 | 显示全部楼层
没有具体做过,之前做过一款无线调光的,感觉和你这个类似,但是没有楼主这样的情况。
稳稳の幸福 发表于 2015-9-17 21:15 | 显示全部楼层
那就是彻底不行了
稳稳の幸福 发表于 2015-9-17 21:17 | 显示全部楼层
建议直接从很远开始测试,往近了走。
拉克丝 发表于 2015-9-17 21:52 | 显示全部楼层
好像是这个问题,失败时候设个复位不知道行不
airwill 发表于 2015-9-18 07:11 | 显示全部楼层
看来是空调的接口板还在接收未完成的数据. 缺乏超时断开机制.
comm2010 发表于 2015-9-18 08:31 | 显示全部楼层
软件设计的有问题,缺乏对异常的处理
 楼主| PhycoKnight 发表于 2015-9-18 16:33 | 显示全部楼层
稳稳の幸福 发表于 2015-9-17 21:17
建议直接从很远开始测试,往近了走。

测试了,还是不行。
 楼主| PhycoKnight 发表于 2015-9-18 16:38 | 显示全部楼层
airwill 发表于 2015-9-18 07:11
看来是空调的接口板还在接收未完成的数据. 缺乏超时断开机制.

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

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

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

  1. GPIO_InitTypeDef GPIO_InitStructure;
  2.     TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  3.     TIM_OCInitTypeDef TIM_OCInitStructure;
  4.     NVIC_InitTypeDef NVIC_InitStructure;


  5.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  6.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  7.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  8.     GPIO_Init(GPIOA, &GPIO_InitStructure);
  9.    

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

  15.     TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  16.     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  17.     TIM_OCInitStructure.TIM_Pulse = 13;
  18.     TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  19.     TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
  20.     TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;   
  21.     TIM_OC3Init(TIM2, &TIM_OCInitStructure);
  22.    
  23.     TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);
  24.     TIM_ARRPreloadConfig(TIM2, ENABLE);


 楼主| PhycoKnight 发表于 2015-9-18 16:39 | 显示全部楼层
comm2010 发表于 2015-9-18 08:31
软件设计的有问题,缺乏对异常的处理

如果做异常处理的话,应该从什么地方考虑呢?因为感觉只是一个遥控器,不会有回复的数据,没发根据数据做出相应处理。
 楼主| PhycoKnight 发表于 2015-9-18 16:41 | 显示全部楼层
拉克丝 发表于 2015-9-17 21:52
好像是这个问题,失败时候设个复位不知道行不

额,发送的数据肯定是没错的。如果想要复位,起码应该有个应答数据啥的。但是空调貌似不会返回应答数据。。。
 楼主| PhycoKnight 发表于 2015-9-18 16:42 | 显示全部楼层
布谷鸟2015 发表于 2015-9-17 20:40
没有具体做过,之前做过一款无线调光的,感觉和你这个类似,但是没有楼主这样的情况。 ...

你当时的问题出在哪里?
皈依 发表于 2015-9-18 16:55 | 显示全部楼层
在软件里面要设置,检测到引导码,后面的部分要做异常处理。
楼主可以在测试的时候按键速度减慢 再测试测试
 楼主| PhycoKnight 发表于 2015-9-18 16:59 | 显示全部楼层
皈依 发表于 2015-9-18 16:55
在软件里面要设置,检测到引导码,后面的部分要做异常处理。
楼主可以在测试的时候按键速度减慢 再测试测试 ...

引导码肯定是检测的

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

很怪的问题。
皈依 发表于 2015-9-18 17:03 | 显示全部楼层
最好能在线调试一下,当出现无法控制的时候检测MCU处于什么状态,程序是跑死还是别的问题
 楼主| PhycoKnight 发表于 2015-9-18 17:10 | 显示全部楼层
皈依 发表于 2015-9-18 17:03
最好能在线调试一下,当出现无法控制的时候检测MCU处于什么状态,程序是跑死还是别的问题 ...

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

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

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

如果每发送完一个命令,就停止pwm波,然后距离就会非常近,非常近。
皈依 发表于 2015-9-18 17:14 | 显示全部楼层
那就要多方面找原因了,红外接收头的质量,测试环境有没有红外干扰,红外发射器等等。
 楼主| PhycoKnight 发表于 2015-9-18 17:28 | 显示全部楼层
皈依 发表于 2015-9-18 17:14
那就要多方面找原因了,红外接收头的质量,测试环境有没有红外干扰,红外发射器等等。 ...

非常感谢~!
豆腐块 发表于 2015-9-18 19:59 | 显示全部楼层
是不是初始化没配置好
尤彼卡 发表于 2015-9-18 20:31 | 显示全部楼层
有时候可能是硬件问题,我之前调一个NRF24l01,弄来好长时间不成功,后来发现,模块是坏的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

36

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部