初级会员

- 积分
- 69
- 金钱
- 69
- 注册时间
- 2019-9-24
- 在线时间
- 27 小时
|
10金钱
最近在玩红外遥控,想要发出正确的信号来控制设备,但目前遇到了点问题。下面是我的代码:
TIM3_PWM_CH2_Init(2200-1,1-1);//产生38khz的pwm波
想要发射8个0和8个1,一共16位,但是接收到的最后一位总是出错,要不是接收不到,就是接收到0,或者多接收几个0。有时候接收到15位,最后一个1不见了。有时候接收到16位,可最后一个是0,或者是17位,可最后两位都是0. 总之,不管如何,最后一个1就是不能正确接收到
红外发射管距离板子上的红外接收管很近,大概5厘米这样
信号发射代码://同步码,同步码由一个 9ms 的低电平和一个 4.5ms 的高电平组成
TIM_SetCompare2(TIM3,0); //此时不发射红外信号
delay_ms(9);
TIM_SetCompare2(TIM3,733); //此时占空比约为1/3,发出38khz的红外信号
delay_us(500);
delay_ms(4);
TIM_SetCompare2(TIM3,0);
delay_us(200);//这个延时是为了下面发射0做的
//发射8个0
TIM_SetCompare2(TIM3,733);
delay_us(560);
TIM_SetCompare2(TIM3,0);
delay_us(560);
//0
TIM_SetCompare2(TIM3,733);
delay_us(560);
TIM_SetCompare2(TIM3,0);
delay_us(560);
//0
TIM_SetCompare2(TIM3,733);
delay_us(560);
TIM_SetCompare2(TIM3,0);
delay_us(560);
//0
TIM_SetCompare2(TIM3,733);
delay_us(560);
TIM_SetCompare2(TIM3,0);
delay_us(560);
//0
TIM_SetCompare2(TIM3,733);
delay_us(560);
TIM_SetCompare2(TIM3,0);
delay_us(560);
//0
TIM_SetCompare2(TIM3,733);
delay_us(560);
TIM_SetCompare2(TIM3,0);
delay_us(560);
//0
TIM_SetCompare2(TIM3,733);
delay_us(560);
TIM_SetCompare2(TIM3,0);
delay_us(560);
//0
TIM_SetCompare2(TIM3,733);
delay_us(560);
TIM_SetCompare2(TIM3,0);
delay_us(560);
//发射8个1
TIM_SetCompare2(TIM3,733);
delay_us(560);
TIM_SetCompare2(TIM3,0);
delay_us(680);
delay_ms(1);
//1
TIM_SetCompare2(TIM3,733);
delay_us(560);
TIM_SetCompare2(TIM3,0);
delay_us(680);
delay_ms(1);
//1
TIM_SetCompare2(TIM3,733);
delay_us(560);
TIM_SetCompare2(TIM3,0);
delay_us(680);
delay_ms(1);
//1
TIM_SetCompare2(TIM3,733);
delay_us(560);
TIM_SetCompare2(TIM3,0);
delay_us(680);
delay_ms(1);
//1
TIM_SetCompare2(TIM3,733);
delay_us(560);
TIM_SetCompare2(TIM3,0);
delay_us(680);
delay_ms(1);
//1
TIM_SetCompare2(TIM3,733);
delay_us(560);
TIM_SetCompare2(TIM3,0);
delay_us(680);
delay_ms(1);
//1
TIM_SetCompare2(TIM3,733);
delay_us(560);
TIM_SetCompare2(TIM3,0);
delay_us(680);
delay_ms(1);
//1
TIM_SetCompare2(TIM3,733);
delay_us(560);
TIM_SetCompare2(TIM3,0);
delay_us(680);
delay_ms(1);
//连发码由 9ms 低电平+2.5m 高电平+0.56ms 低电平+97.94ms 高电平组成
delay_ms(9);
TIM_SetCompare2(TIM3,733);
delay_ms(2);
delay_us(500);
TIM_SetCompare2(TIM3,0);
delay_us(560);
TIM_SetCompare2(TIM3,733);
delay_ms(97);
delay_us(940);
TIM_SetCompare2(TIM3,0);
下面是接收到的内容,红外接收解析函数用的是红外例程里面的remote.c
0000000011111110
0000000011111110
00000000111111100
0000000011111110
00000000111111100
00000000111111100
00000000111111100
00000000111111100
0000000011111110
000000001111111
00000000111111100
0000000011111110
0000000011111110
00000000111111100
00000000111111100
0000000011111110
0000000011111110
0000000011111110
0000000011111110
00000000111111100
00000000111111100
0000000011111110
我不知道我代码哪里出了问题,可能是连发码有问题,可是我把连发码注释掉,出现的问题还是一样
|
最佳答案
查看完整内容[请看2#楼]
发现了部分问题:
在连发码前加上
TIM_SetCompare2(TIM3,733);
delay_us(200);
TIM_SetCompare2(TIM3,0);
可以避免与后面连发码信号识别错误,接收到的数据都是8个0和8个1再加上一个0.这个多出的0应该是连发码那里出现了问题,把连发码注释掉之后,接收到的数据都是8个0和8个1,与我设想中的一样
剩下的问题就是:不是每次发射都能接收到信号,可能是发射管的电流不够大或者是电压小了?也可能是接收管的问题,这就不 ...
|