OpenEdv-开源电子网

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

求助:怎么样用STM32做一个红外发射器?

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2011-4-18
在线时间
0 小时
发表于 2011-4-18 23:01:18 | 显示全部楼层 |阅读模式
做了很久了.一直没做出来.郁闷的很.NEC协议和调制原理看了好多资料了.高手们指点指点啊。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-4-19 01:08:23 | 显示全部楼层
 NEC协议的比较简单吧?一路PWM就搞定的.
用pwm生成38Khz的红外载波,然后软件控制PWM实现调制,从而发送信号.外部接到一个红外发射管即可.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2011-4-18
在线时间
0 小时
 楼主| 发表于 2011-4-19 15:13:27 | 显示全部楼层
回复【2楼】正点原子:
-------------------------------
     原子哥。我买的您的板子,用的您的不完全开发手册。是您的超级粉丝。
     我先用Timer产生38KHz的载波。然后用sig表示信号。思路是让这两路信号,在Timer的中断里相与,然后产生调制波。可是却发现delay函数在短时间内多次调用,延时不准。您帮我看看应该怎么做,才能使用开发板,外接一个940nm的红外发光管,让板子接收到发射信号并解码啊?谢谢啦原子哥。
    下面是我主程序的一部分。您帮忙指点下哈。
while(1)
{   
     bool addr[16]={0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1},cmd[16]={0,0,0,1,0,1,0,1,1,1,1,0,1,0,1,0};
    u8 j=0,k=0,flag=0;
     

   Stm32_Clock_Init(9);//系统时钟设置
   delay_init(72); //延时初始化
   uart_init(72,9600); //串口1初始化     
   LCD_Init(); //初始化液晶  
   LED_Init();         //LED初始化
  
   Remote_Init();     //初始化红外接收
   
  POINT_COLOR=RED;//设置字体为红色    
LCD_ShowString(60,50,"Mini STM32");
LCD_ShowString(60,70,"REMOTE TEST");
LCD_ShowString(60,90,"");
LCD_ShowString(60,110,"2011/4/2");
 
LCD_ShowString(30,130, "KEYVAL:");
LCD_ShowString(130,130,"KEYCNT:");   
LCD_ShowString(30,150, "SYMBOL:");

delay_ms(1000);
Timerx_Init(12,71); //1Mhz的计数频率,计数到13为13us 
 
LED1=sig;
while(1)
{
sig = 1;LED1=sig; delay_ms(9);
sig = 0;LED1=sig; delay_ms(4);delay_us(500);

   while(flag<16)
   {
          for(j = 0; j< 16 ; j++ )
    {             
         if(addr[j] == 0)     //地址码
      {
       sig = 1;LED1=sig;delay_us(560);
       sig = 0;LED1=sig;delay_us(560);

      }
      else if (addr[j] == 1)
      {   
       sig = 1;  delay_us(560);  
       sig = 0;  delay_us(1680);     
      }
      flag++;
    }      
   }
   while(flag >= 16 && flag <32)  
   {
            for(k = 0; k< 16; k++)
    {
if(cmd[k]==0)//开始发送控制码
     {
       sig=1;delay_us(560);
       sig=0;delay_us(560);

     }
     else if (cmd[k]==1)
     {
       sig=1;delay_us(560);
       sig=0;delay_us(1680);

     }
     flag++;
     }
              
   }

  sig=0; delay_ms(40);
    sig=0; delay_ms(42);delay_us(740);
      j = 0;k = 0 ;flag = 0; 

     sig=1; delay_ms(9);
     sig=0; delay_ms(2);delay_us(250);
     sig=1; delay_us(560);
     sig=0; delay_ms(98);delay_us(90);
     
 
}                  
    }

 }
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-4-19 18:06:41 | 显示全部楼层
频繁的调用延时函数不会导致延时函数不准的.只有频繁的中断,可能导致这个问题.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2011-4-18
在线时间
0 小时
 楼主| 发表于 2011-4-19 19:40:25 | 显示全部楼层
回复【4楼】正点原子:
-------------------------------
确实啊,原子哥。我下午用示波器观察了。想了一下午,才想到:频繁地用产生38KHz的Timer,去中断delay函数,导致的延时不准。您真是高手啊。
原子哥有啥办法吗,指条明路给小弟吧。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-4-19 21:48:07 | 显示全部楼层
产生38K的TIMER不应该中断.
你只需要通过外部的方法,控制这个PWM的开关即可.比如控制此TIMER的时钟开启与关闭,其他的你就不需要去关心了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2013-4-7
在线时间
9 小时
发表于 2013-8-24 15:34:56 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子 哥,自制红外发射电路,发射管能否推荐个型号,是否有相关设计电路。买的原子哥开发版的遥控器距离还是比较远的,可否设计一个距离可调,1~2m响应的发射电路。谢谢
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-25 23:21:57 | 显示全部楼层
1个8050+1个普通的红外发射二极管+限流电阻。一个PWM控制8050,输出38KhzPWM波,控制发送红外载波,然后控制PWM开关,实现调制,通过限流电阻,控制发射距离,电阻越大,发射距离越近。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

15

主题

204

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
287
金钱
287
注册时间
2013-7-17
在线时间
0 小时
发表于 2013-8-26 08:12:30 | 显示全部楼层
回复【7楼】zbc:
---------------------------------
如果想利用红外编码,可以选择TC9012芯片。
有生之年,只诉温暖不言殇,花味渐浓,茶味渐醇,倾心相遇,安暖相陪。
回复 支持 反对

使用道具 举报

15

主题

204

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
287
金钱
287
注册时间
2013-7-17
在线时间
0 小时
发表于 2013-8-26 08:17:05 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
我用定时器中断每19ns产生一次中断,中断函数里改变引脚电平,这样频率就是38KHz了 ,这种产生中断的方法有什么不好之处吗?
有生之年,只诉温暖不言殇,花味渐浓,茶味渐醇,倾心相遇,安暖相陪。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-26 10:32:53 | 显示全部楼层
回复【10楼】wghfbj:
---------------------------------
19us吧?
没什么不妥,就是中断频繁了点,用PWM多好呢?不需要中断。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

154

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2013-6-8
在线时间
2 小时
发表于 2013-8-26 10:51:43 | 显示全部楼层
回复【10楼】wghfbj:
---------------------------------
19us的频繁中断对于CPU简直就是虐待
即使爬到最高的山上,一次也只能脚踏实地地迈一步。
回复 支持 反对

使用道具 举报

21

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2013-6-12
在线时间
16 小时
发表于 2013-9-12 21:44:07 | 显示全部楼层
我做的一个也是用定时器的,成功模拟发射
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2014-7-14
在线时间
0 小时
发表于 2014-11-15 20:41:36 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
最近也在做这个一个东西。看到很多的方案都是采用定时器中断的方法,也确实实现了调制。但我想问一下原子哥。如果用PWM的方案,又该如何实现调制呢?最近就卡在这个了。不依靠硬件的与门。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-15 21:11:01 | 显示全部楼层
回复【14楼】fzz:
---------------------------------
直接控制pwm的开关即可
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2014-7-14
在线时间
0 小时
发表于 2014-11-15 22:10:33 | 显示全部楼层
回复【15楼】正点原子:
----------------------我也是这么想的,明天再试试看看行不行。今天把原理搞懂了。
回复 支持 反对

使用道具 举报

32

主题

153

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
453
金钱
453
注册时间
2014-11-5
在线时间
0 小时
发表于 2014-11-18 23:01:27 | 显示全部楼层
回复【16楼】fzz:
---------------------------------
楼主--成功了没有,我也想自制一个发射器
酱油团队--
回复 支持 反对

使用道具 举报

32

主题

153

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
453
金钱
453
注册时间
2014-11-5
在线时间
0 小时
发表于 2014-11-18 23:02:16 | 显示全部楼层
楼主成功了分享下吧
酱油团队--
回复 支持 反对

使用道具 举报

8

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2014-5-5
在线时间
0 小时
发表于 2014-12-22 16:09:32 | 显示全部楼层
楼主  还在否  成功分享一下吧
回复 支持 反对

使用道具 举报

8

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2013-5-15
在线时间
8 小时
发表于 2015-2-14 21:44:00 | 显示全部楼层
必须用 8050吗?我这有9014可以吗?
回复 支持 反对

使用道具 举报

5

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2014-5-6
在线时间
21 小时
发表于 2015-5-10 13:11:35 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥   怎么把38KHz的PWM波调制出NEC协议的同步码、逻辑1和逻辑0?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-10 23:02:07 | 显示全部楼层
回复【21楼】金子:
---------------------------------
控制PWM的开关,就是调制啊。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

8

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2015-7-19
在线时间
0 小时
发表于 2015-7-25 16:57:21 | 显示全部楼层
回复【22楼】正点原子:
-----------原子哥怎样控制PWM开关
感觉没什么好
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-26 22:08:17 | 显示全部楼层
回复【23楼】xinshou3213:
---------------------------------
控制CCER寄存器即可。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

37

主题

181

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
485
金钱
485
注册时间
2015-5-5
在线时间
34 小时
发表于 2015-7-29 15:28:56 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
原子哥,是不是用timer产生一路pwm,为38KHZ,(你说pwm的开关控制,是什么意思?具体怎么开关)
弹起华丽的乐章 撕下最后的伪装
回复 支持 反对

使用道具 举报

37

主题

181

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
485
金钱
485
注册时间
2015-5-5
在线时间
34 小时
发表于 2015-7-29 15:32:14 | 显示全部楼层
回复【24楼】正点原子:
---------------------------------
是不是只用CCER的CC1E
弹起华丽的乐章 撕下最后的伪装
回复 支持 反对

使用道具 举报

37

主题

181

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
485
金钱
485
注册时间
2015-5-5
在线时间
34 小时
发表于 2015-7-29 16:07:35 | 显示全部楼层
回复【24楼】正点原子:
---------------------------------
用CCER控制pwm开关了,然后呢?就直接将pwm输出口接到发射管?
弹起华丽的乐章 撕下最后的伪装
回复 支持 反对

使用道具 举报

37

主题

181

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
485
金钱
485
注册时间
2015-5-5
在线时间
34 小时
发表于 2015-7-29 16:09:58 | 显示全部楼层
回复【24楼】正点原子:
---------------------------------
你把发射部分的原理图给我吧
弹起华丽的乐章 撕下最后的伪装
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-30 22:06:55 | 显示全部楼层
回复【28楼】yy叶之舞是秋的讯息:
---------------------------------
这个没有哦。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2018-11-7
在线时间
1 小时
发表于 2018-11-7 17:51:50 | 显示全部楼层
正点原子 发表于 2011-4-19 01:08
&nbsp;NEC协议的比较简单吧?一路PWM就搞定的.
用pwm生成38Khz的红外载波,然后软件控制PWM实现调制,从而发送 ...

原子哥,不明白PWM产生载波38K和红外遥控器数据,是怎么结合起来的。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2018-11-7
在线时间
1 小时
发表于 2018-11-7 17:53:27 | 显示全部楼层
正点原子 发表于 2011-4-19 01:08
&nbsp;NEC协议的比较简单吧?一路PWM就搞定的.
用pwm生成38Khz的红外载波,然后软件控制PWM实现调制,从而发送 ...

PWM 打开后,会产生38K载波,当我想要发送红外数据0xaa的时候,我要怎么去控制PWM?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 20:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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