PWM全称:脉冲宽度调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。 脉冲宽度调制是一种模拟控制方式,其根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。 PWM控制技术以其控制简单,灵活和动态响应好的优点而成为电力电子技术最广泛应用的控制方式,也是人们研究的热点。由于当今科学技术的发展已经没有了学科之间的界限,结合现代控制理论思想或实现无谐振波开关技术将会成为PWM控制技术发展的主要方向之一。 相信每位搞MCU都会接触到PWM这个功能,所有的PWM实质上就是定时器产生的。 几乎,绝大部分的MCU都支持这一功能的。 今天我就分享我使用TI新出的金刚狼的PWM这一功能吧: 下图就是定时器A的结构图:
OUTMOD就是PWM输出的地方。 在金刚狼中不同计数方式的定时器都有7中的PWM输出模式。 如下图: 定时器向上计数时7种PWM输出 定时器连续计数时7种PWM输出 定时器向上/向下计数时7种PWM输出 而今天我写的程序
这是TI给的例程,写寄存器的,430的寄存器不是很多,写也很容易,代码如下: - #include "io430.h"
- int main( void )
- {
- WDTCTL = WDTPW | WDTHOLD; // Stop WDT
- // Configure GPIO
- P1DIR |= BIT2 | BIT3; // P1.2 and P1.3 output
- P1SEL0 |= BIT2 | BIT3; // P1.2 and P1.3 options select
- // Disable the GPIO power-on default high-impedance mode to activate
- // previously configured port settings
- PM5CTL0 &= ~LOCKLPM5;
- CSCTL0_H = CSKEY >> 8; // Unlock CS registers
- CSCTL1 = DCOFSEL_6; // Set DCO to 8MHz
- CSCTL2 = SELA__VLOCLK | SELS__DCOCLK | SELM__DCOCLK;// Set ACLK = VLO; SMCLK = DCO/8
- CSCTL3 = DIVA__8 | DIVS__8 | DIVM__8; // Set all dividers
- CSCTL0_H = 0;
- TA1CCR0 = 1000-1; // PWM Period
- TA1CCTL1 = OUTMOD_7; // CCR1 reset/set
- TA1CCR1 = 750; // CCR1 PWM duty cycle
- TA1CCTL2 = OUTMOD_7; // CCR2 reset/set
- TA1CCR2 = 250; // CCR2 PWM duty cycle
- TA1CTL = TASSEL__SMCLK | MC__UP | TACLR; // SMCLK, up mode, clear TAR
- __bis_SR_register(LPM0_bits); // Enter LPM0
- __no_operation(); // For debugger
- }
复制代码程序首先关闭看门狗 接着设置时钟 再选择IO的功能。 然后配置定时器。 然后设置频率和占空比。 例程是把P1.2和P1.3作为PWM输出口,分别输出占空比为75%和25%。
附上测试图:
|