[51单片机] 如何精准产生38k红外调制载波信号?

[复制链接]
24973|33
 楼主| samsunghellome 发表于 2013-10-9 18:55 | 显示全部楼层 |阅读模式
本帖最后由 samsunghellome 于 2013-10-9 18:56 编辑

自己做的红外模块,需要38k调制,本来想用单片机中断直接产生38k,结果38k要独占一格定时器才行,相应中断服务程序里就只能放一句话,i/o口反转,胆敢放些其他语句,用示波器测量出来的波形与38k相差甚远。求坐过红外这块的师傅们帮帮我吧,提供几个产生精准38k载波信号的方案,万分感激!以下是程序部分!一段时间低电平,一段时间38k信号,程序如下,附带我想要产生的波形!
#include <reg51.h>
bit t3;
bit t4;
static unsigned int value3;
static unsigned int value4;                  //Auxiliary register
sbit P32 = P3^2;
void time0init()
{   
    TMOD|= 0x02;                    
    TH0 = 0xF3;                     //初始化计时值
    TL0 = 0xF3;
    TR0 = 1;                        //定时器0开始计时
    ET0 = 1;                        //使能定时器0中断
    EA = 1;
}
void time0() interrupt 1
{   
    /*if(t3==1)
    {value3--;
         if(value3==0)
         {t3=0;
          t4=1;
          value4=50;
         }
        P32=0;
        }
if(t4==1)
    {value4--;
         if(value4==0)
         {t4=0;
          t3=1;
          value3=50;
         }*/
         P32=!P32;
        }                         //将测试口取反
//}
//-----------------------------------------------
void main()
{   
        t3=1;
        t4=0;
        P32=0;
        value3=50;
        time0init();
    while(1);
}
我想产生的波形







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
ZG11211 发表于 2013-10-9 19:05 | 显示全部楼层
都如楼主所说的话,就不会出现11.0592这么奇怪的晶振频率了,呵呵
 楼主| samsunghellome 发表于 2013-10-9 19:10 | 显示全部楼层
ZG11211 发表于 2013-10-9 19:05
都如楼主所说的话,就不会出现11.0592这么奇怪的晶振频率了,呵呵

求解决方法,我的晶振是12M
ZG11211 发表于 2013-10-9 19:16 | 显示全部楼层
本帖最后由 ZG11211 于 2013-10-9 19:18 编辑

我之前也试过。常见的晶振频率怎么也无法整除得到38KHZ.最后只能将就了,实验结果就是,频率只要偏差不大都没什么问题,毕竟一体化接收头有锁相环电路,偏差大了遥控距离就拉不远。
sunlight 发表于 2013-10-9 20:38 | 显示全部楼层
用一片555搞定。
wangke2010 发表于 2013-10-9 21:28 来自手机 | 显示全部楼层
楼主会汇编不?用汇编,用软件,很快就能调出这个频率。
我用6M的晶振,几个nop翻转一次引脚电平,就行了
 楼主| samsunghellome 发表于 2013-10-10 07:33 来自手机 | 显示全部楼层
wangke2010 发表于 2013-10-9 21:28  楼主会汇编不?用汇编,用软件,很快就能调出这个频率。  我用6M的晶振,几个nop翻转一次引脚电平,就行了 ...

我用c需要延时或定时器也调出了38k方波,就是容易受单片机执行其他语句的干扰!
 楼主| samsunghellome 发表于 2013-10-10 07:35 来自手机 | 显示全部楼层
ZG11211 发表于 2013-10-9 19:16  我之前也试过。常见的晶振频率怎么也无法整除得到38KHZ.最后只能将就了,实验结果就是,频率只要偏差不大都 ...

我利用红外线的反射原理并编码,距离不用太远,20厘米足够!
 楼主| samsunghellome 发表于 2013-10-10 07:36 来自手机 | 显示全部楼层
ZG11211 发表于 2013-10-9 19:16  我之前也试过。常见的晶振频率怎么也无法整除得到38KHZ.最后只能将就了,实验结果就是,频率只要偏差不大都 ...

我利用红外线的反射原理并编码,距离不用太远,20厘米足够!正在寻找38k可靠解决方案,接受头有范围在35k到40k之间吧!
 楼主| samsunghellome 发表于 2013-10-10 07:38 来自手机 | 显示全部楼层
sunlight 发表于 2013-10-9 20:38  用一片555搞定。

555定时器硬件电路产生的38k稳定性怎么样呢?可以调制红外线吗?
散装805 发表于 2013-10-10 09:14 | 显示全部楼层
什么单片机?不带pwm控制?
 楼主| samsunghellome 发表于 2013-10-10 09:30 | 显示全部楼层
散装805 发表于 2013-10-10 09:14
什么单片机?不带pwm控制?

stc15L104W,不带pwm控制
coody 发表于 2013-10-10 11:53 | 显示全部楼层
何必呢,红外38KHZ信号不需要那么精确,有一定带宽的,36K~40K都可以的。倒是发送时尽量用1/3占空比。
我一般就是9us发送,17.3us停止,大约就是1/3,很多方法都可以产生。

评分

参与人数 1威望 +2 收起 理由
ocon + 2 赞一个!

查看全部评分

mohanwei 发表于 2013-10-10 15:37 | 显示全部楼层
以前做过是用PWM来产生的……
如果不是追求极限距离,频率偏差7KHz以内都没问题的……
 楼主| samsunghellome 发表于 2013-10-10 16:06 | 显示全部楼层
mohanwei 发表于 2013-10-10 15:37
以前做过是用PWM来产生的……
如果不是追求极限距离,频率偏差7KHz以内都没问题的…… ...

定时器中断产生38khz方波很准,但是产生间断38khz波时出现问题,用示波器测量频率,频率与38k不沾边,只有5k左右!!
coody 发表于 2013-10-10 16:47 | 显示全部楼层
samsunghellome 发表于 2013-10-10 16:06
定时器中断产生38khz方波很准,但是产生间断38khz波时出现问题,用示波器测量频率,频率与38k不沾边,只 ...

STC的1T MCU速度比较快了,几个us的中断,不要处理太多的事,完全没问题的。
m564522634 发表于 2013-10-10 16:59 | 显示全部楼层
做遥控器的吧,好像有许多专用的芯片吧楼主可以考虑下吧
mohanwei 发表于 2013-10-10 17:45 | 显示全部楼层
如果系统允许,发码时直接关了中断,直接翻转IO,两个for循环就全部发走了……
延迟就用宏来delay,配合示波器或逻辑分析仪,稍微调整一下常数就可以做得很精确
lyjian 发表于 2013-10-10 18:50 | 显示全部楼层
用定时器的频率输出模式,简单得要命
黄小俊 发表于 2013-10-10 19:18 | 显示全部楼层
学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

43

主题

198

帖子

0

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