msp430单片机实现PWM
msp430单片机利用Timer_A或者Timer_B可以很好的实现产生任意PWM信号。
Timer_A定时器的计数器工作在增计数方式,输出采用模式7(复位/置位模式),则可以利用CCR0控制PWM波形的周期,用某个寄存器CCRx控制占空比。原理图如下:(注:这幅图片为网上下载,他用的是Timer_B定时器,故输出TBx)
摘录下面一段:http://www1.ti.com.cn/customer/article/article12161.asp
将Timer_B配置为16-bit、up模式。在这种模式下计数器计数至CCR0,然后复位从0开始重新计数。给CCR0赋值255也就意味着计数器的长度为8bits。CCR1和TB1用于产生正弦波,CCR2和TB2用于产生直流电平。输出模式都选为模式7,即PWM复位/置位模式。如图2所示,在这种模式下,复位后每一个定时器的输出都为高电平,直到计数器达到各自的CCRx值时变为低电平,当计数器达到CCR0时再置位。也就是说CCRx的值决定了各自正脉冲的宽带。若CCRx的值是变化的,就可以产生可变宽度的脉冲,下文中的正弦波就是用这种办法产生的;若不变则产生的是固定宽度的脉冲,下文中的直流电平就是这样产生的。最后SMCLK用作Timer_B的时钟源。系统采用32768Hz的钟表晶振,通过采用内部硬件锁频环FLL(frequency-locked-loop),来校准DCO(DigitalControlOscillator)频率为系统提供MCLK/SMCLK时钟。
示例程序:
#include
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P1DIR |= 0x0C; // P1.2 and P1.3 output
P1SEL |= 0x0C; // P1.2 and P1.3 TA1/2 otions
CCR0 = 512-1; // PWM Period
CCTL1 = OUTMOD_7; // CCR1 reset/set
CCR1 = 384; // CCR1 PWM duty cycle
CCTL2 = OUTMOD_7; // CCR2 reset/set
CCR2 = 128; // CCR2 PWM duty cycle
TACTL = TASSEL_2 + MC_1; // SMCLK, up mode
_BIS_SR(LPM0_bits); // Enter LPM0
}
msp430单片机PW 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)