<div class="post-body">MC9S08AC16包括3个独立的定时器/PWM模块,支持传统的输入捕捉,输出比较,脉宽调制等。每一个TPM模块都有一个控制位来配置所有通道为中心对齐PWM功能,在每一个TPM模块,定时功能是基于一个独立的十六位模计数器。该定时器时刻控制应用领域,中心对齐pwm可以用于马达控制。
使用刚做的MC9S08AC16板子做了一个正弦波生成程序,使用功率器件将单片机的PWM信号放大,然后经过RC滤波得到正弦波信号,首先上个图,经过滤波后的正弦波信号,tek示波器捕捉的。

程序介绍:
首先正弦表,这个是在matlab中算好的,然后弄到cw里面
unsigned int const sin_tab[181]={0,18,36,54,71,89,107,125,143,160,178,195,213,230,
248,265,282,299,316,333,350,367,384,400,416,433,449,465,
481,496,512,527,543,558,573,587,602,616,630,644,658,672,
685,698,711,724,737,749,761,773,784,796,807,818,828,839,
849,859,868,878,887,896,904,912,920,928,935,943,949,956,
962,968,974,979,984,989,994,998,1002,1005,1008,1011,
1014,1016,1018,1020,1022,1023,1023,1024,1024,1024,
1023,1023,1022,1020,1018,1016,1014,1011,1008,1005,
1002,998,994,989,984,979,974,968,962,956,949,943,935,928,
920,912,904,896,887,878,868,859,849,839,828,818,807,796,
784,773,761,749,737,724,711,698,685,672,658,644,630,616,
602,587,573,558,543,527,512,496,481,465,449,433,416,400,
384,367,350,333,316,299,282,265,248,230,213,195,178,160,
143,125,107,89,71,54,36,18,0};
然后,TPM模块初始化:
TPM1SC=0X68;
TPM1MOD=1024;
TPM1C0SC=0X08;
TPM1C1SC=0X08;
TPM1C0V=512;
TPM1C1V=0X00;
中断子程序,更改PWM波占空比:
void interrupt 11 tpm_int(void){
unsigned char i;
i=TPM1SC;
TPM1SC&=0X7f;
count++;
if(count>360){
count=0;
}
if(count
|