PIC单片机输出比较(PWM)模块介绍

       在Android红外遥控器项目中使用了输出比较OC1(PWM)模块来产生38KHz PWM脉冲,脉冲占空比与红外信号发射距离以及产品功耗有关。其中占空比越大,发射距离越远,功耗越大。红外载波的占空比一般在1/3左右。

输出比较框图.jpg
3 天前 上传
下载附件 (40.61 KB)

图1:输出比较框图

将输出比较模块配置为PWM 操作,需要以下步骤:
1. 将OCx输出配置为可用的外设引脚选择引脚之一。
2. 计算所需的占空比并将计算结果装入 OCxR 寄存器。
3. 计算所需的周期并将计算结果装入 OCxRS 寄存器。
4. 选择当前的 OCx 作为同步源,方法是把 0x1F写入SYNCSEL<4:0>(OCxCON2<4:0>),把 0 写入OCTRIG (OCxCON2<7>)。
5. 通过写 OCTSEL2<2:0> 位(OCxCON<12:10>)选择时钟源。
6. 如果需要的话,允许定时器和输出比较模块中断。 使用 PWM故障引脚时需要输出比较中断。
7. 通过 OCM<2:0> (OCxCON1<2:0>)位选择所需的PWM模式。
8. 如果定时器被选为时钟源,请设置 TMRy 预分频值,并通过将 TON(TxCON<15>)位置 1 来使能时基。

    我们选择RB13/RP13/AN11作为OC1输出管脚,未分频时钟T2作为时钟源。将OC1RS寄存器写入421, OC1R寄存器写入140,以产生占空比为1/3 38KHz PWM脉冲。1/(421*62.5ns)=38KHz。
PWM1初始化函数
void mInitPWM1(void) 
{
        _RP13R = 18 ; //红外发送,OC1的功能号为18,将OC1重映射到RB13/RP13/AN11        
        OC1CON1 = 0x0006 ; //使用Timer2,边沿对齐PWM模式   
        OC1CON2 = 0x001F ; // 选择OC1为同步源       
        OC1RS = 421 ; //周期421*62.5ns  38K Hz   
        OC1R = 140 ;  //占空比:100/421
}

定时器T2初始化
void T2_On(void)     
{
        T2CON = 0x0000 ;//未分频
        T2CONbits.TON = 1 ; 
}
定时器T2停止
void T2_Off(void)     
{
        T2CONbits.TON = 0 ; 
}
原帖地址: http://www.nwtel.cn/thread-195-1-1.html
PIC单片机中文资料:带专用定时器的输出比较-DS39723A_CN
http://pan.baidu.com/share/link?shareid=148544&uk=3004090951
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值