OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6270|回复: 6

红外编码的问题!!

[复制链接]

14

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2014-7-23
在线时间
1 小时
发表于 2015-3-9 10:39:48 | 显示全部楼层 |阅读模式
5金钱
最近小弟在做红外编码,用PWM产生38khz载波,通过延时控制pwm的开关实现编码发送,可是怎么都没有接收,不知道哪里出了问题,原子哥和大家有这方面的例子吗,具体如何产生载波,占空比是多少,如何控制0,1的发送等等问题,我不知道问题出在哪里

PWM产生:
void TIM4_Config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  TIM_OCInitTypeDef  TIM_OCInitStructure;
  /* TIM4 clock enable */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
  /* GPIOD Configuration: TIM4 CH1 (PD12) */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOD, &GPIO_InitStructure); 

  GPIO_PinRemapConfig(GPIO_Remap_TIM4 , ENABLE);
  TIM_DeInit(TIM4);
  /* Time base configuration */
  TIM_TimeBaseStructure.TIM_Period = 1894;//38KHZ
  TIM_TimeBaseStructure.TIM_Prescaler = 0;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);

  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;   ///
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse =  631;  //占空比1:3   ///
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  TIM_OC1Init(TIM4, &TIM_OCInitStructure);

  TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);
  TIM_ARRPreloadConfig(TIM4, ENABLE);
  TIM_Cmd(TIM4, ENABLE);
}

//引导码及逻辑0和逻辑1函数
void BootCode(TIM_TypeDef * TIMx)
{
TIM_Cmd(TIMx, ENABLE);
  //  ModeChange(PWM);
delay_ms(9);
TIM_Cmd(TIMx, DISABLE);
//    ModeChange(Low);
delay_us(4500);
}

void Logic_One(TIM_TypeDef * TIMx)
{
 ModeChange(PWM);
 TIM_Cmd(TIMx, ENABLE);
 delay_us(565);//656
 TIM_Cmd(TIMx, DISABLE);
      ModeChange(Low);
 delay_us(1695);//1640
}

void Logic_Zero(TIM_TypeDef * TIMx)
{
  ModeChange(PWM);
TIM_Cmd(TIMx, ENABLE);
delay_us(565);//656
TIM_Cmd(TIMx, DISABLE);
        ModeChange(Low);
delay_us(565);//544
}

void ModeChange(u32 mode)
{
 GPIO_InitTypeDef  GPIO_InitStructure;
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
if(mode==PWM)
{
GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_PinRemapConfig(GPIO_Remap_TIM4 , ENABLE); 
}
else
{
GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_ResetBits(GPIOD,GPIO_Pin_12);
}
}

各位帮助一下,困惑了很多天了

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1818
金钱
1818
注册时间
2014-6-27
在线时间
975 小时
发表于 2015-3-9 11:41:58 | 显示全部楼层
接收端用示波器看有波形出来没有,如果有,波形怎样再定夺。
回复

使用道具 举报

28

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
437
金钱
437
注册时间
2017-2-13
在线时间
110 小时
发表于 2018-5-11 14:46:06 | 显示全部楼层
请问楼主有成功吗?我和你一样的操作,现在载波和NEC编码都搞好了,波形也出来了用原子的外接收代码始终接收不到红外信号。不知道哪里有问题了,如果结局了可以大致说明坑在哪里吗
回复

使用道具 举报

23

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
408
金钱
408
注册时间
2014-3-9
在线时间
103 小时
发表于 2018-5-11 15:57:12 | 显示全部楼层
38khz载波占空比是1/3或1/4吧
魔法王子
回复

使用道具 举报

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2019-11-29
在线时间
27 小时
发表于 2020-6-4 14:19:54 | 显示全部楼层
爱奔跑的IT 发表于 2018-5-11 14:46
请问楼主有成功吗?我和你一样的操作,现在载波和NEC编码都搞好了,波形也出来了用原子的外接收代码始终接 ...

哥你最后弄成了吗?最近困在这好久了
回复

使用道具 举报

6

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
295
金钱
295
注册时间
2016-1-28
在线时间
84 小时
发表于 2020-6-4 16:20:01 来自手机 | 显示全部楼层
26US占空比1/3
回复

使用道具 举报

0

主题

1

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2021-12-24
在线时间
15 小时
发表于 2021-12-28 17:10:28 | 显示全部楼层
定时器时钟分频为啥是0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-20 23:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表