想问一下,如何用一个定时器产生两路PWM信号,最主要的要求是两路信号要有一定的相位差,比如相位差45°,频率相同,占空比可调这个都比较容易,但是相位差这个不知道该怎么弄?
灰小子:
选择合适的PWM输出引脚,比如第1路PWM想用TA0控制,第2路PWM用TA1控制
查器件手册:
TA0支持的引脚有P1.1、P1.2、P1.5、P1.6、P2.6(P2.6一般不用,因为要接晶振哦)
TA1支持的引脚有P2.0 –> P2.5。
选择方便的,假设我选择了P1.6(TA0.1)和P2.2(TA1.1),且第1路由ACLK驱动输出4KHz方波,第2路也有ACLK驱动但是输出2KHz占空比25%的方波。
从网上找了两段程序,你参考下把:P1DIR |= BIT6; // 选择P1.6的第二功能,即TA0.1
P1SEL |= BIT6;
CCR0 = 7; // PWM 周期 = ACLK@32768/4KHz-1 = 8.192-1 = 7
CCTL1 = OUTMOD_6; // CCR1 reset/set
CCR1 = 3; // CCR1 PWM 占空比50% = 8.192*50% – 1 = 3TACTL = TASSEL_1 + MC_1; // ACLK, up mode
P2DIR |= BIT2; // 选择P2.2的第二功能,即TA1.1
P2SEL |= BIT2;
TA1CCR0 = 15; // PWM 周期= ACLK@32768/2KHz-1 = 16-1 = 15
TA1CCTL1 = OUTMOD_6; // CCR1 reset/set
TA1CCR1 = 3; // CCR1 PWM 占空比25% = 16*25% – 1 = 3TA1CTL = TASSEL_1 + MC_1; // ACLK, up mode
灰小子:
回复 灰小子:
TA可以输出完整的2路PWM波形;TB可以输出6路完整的PWM波形。
具体情况还要看你使用的单片机型号。
Heng Zhao:
回复 灰小子:
我想知道的是怎样用一个定时器产生两路具有一定相位差的PWM波。
Viki Shi:
回复 Heng Zhao:
可参考这个: http://wenku.baidu.com/view/803f1c1033687e21af45a9cd.html?re=view
Heng Zhao:
回复 Viki Shi:
你这个是用IO口模拟的,如果PWM频率高的话,系统中断太频繁,资源占用严重,我想用定时器自带的PWM模块实现,有没有什么办法?
Heng Zhao:
回复 kqian0327:
谢谢。
Diandian Zhao1:
回复 灰小子:
您好,看到您的回复说可以用TA产生两位方波,我是用的是MSP430F149,也想用它产生两路40KHz方波,看到您上面的程序,我把频率占空比都改了,但是用示波器显示器产生的都不是40K,而且频率不同,不知道为什么?