PWM信号是一种具有固定周期(T)不定占空比(t)的数字信号,如下图所示。假如PWM信号的占空比随时刻改变,那么经过滤波之后的输出信号将是起伏改变的模拟信号。因而经过操控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
}