您的位置:首页 > 其它

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

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


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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: