对于一个周期函数可以进行傅里叶级数的展开,级数的一般表达式为:
当按上述方法进行PWM调制时,图2下图函数傅里叶级数的an均为0,当n为偶数时,bn也为0。所以正弦波PWM调制的傅里叶级数为:
根据阶梯图形表示连续曲线时,阶梯越细图形越精确的原理,认为用PWM调制正弦波时,时段分割越多,调制出的正弦波越精确。如果不考虑级数中的直流成分,可以得到不同时段的谐波系数,如表1所示。
从表1可以看出,谐波系数随着谐波次数的增加逐渐减小,但在n=K-1处系数会突然增大,之后又逐渐减小。而这种突然增大的比值随着时段分割数的增加总体呈下降趋势。
另一方面,突然增大的比值,随着时段分割数的增加而向高次谐波方向移动。对这种远离基波的高次谐波,只要采用低通滤波器就能很容易将其去除,我们所关心的是如何尽可能减小基波附近谐波的系数。
从表1可以看出,随着时段分割数的增加,离基波较近的谐波系数也呈下降趋势。所以通过对时段的细分,信号的高次谐波,特别是接近基波的谐波成分会进一步减少。
2 信号输出
由于采用了正弦波PWM调制,单片机输出信号只要经过简单的低通滤波器就可以得到平滑的正弦波信号。图3中的74HC04是CMOS反相器,这里它起缓冲驱动作用。
因为单片机的P1~P3口是准双向口。作为输出口时低电平有一定的吸收电流能力,但高电平输出电流的能力很小,这就使输出信号的开关特性有较大差异。而CMOS反相器的输出采用P沟道和N沟道MOS管构成的对称互补结构,使输出信号的“0、1”有相同的开关特性,能保证低电平的吸收电流和高电平的输出电流相同。图3中R1、R2为1kΩ的电阻,C1、C2、C3为0.1μF的独石电容。当时段分割为20,正弦波信号频率为1180Hz时,图3中A、B、C三个端口的输出波形如图4所示。
3 CPFSK调制
软件调制是将正弦波分为若干个时段,并计算出每个时段内高电平和低电平所占用的时间,这些时间在单片机中用软件延时实现。
为了叙述方便,首先定义几个符号:
φ——软件调制所在的相位;
T——相位角为φ时对应时段的机器周期总和;
T1——相位角为φ时对应时段的高电平机器周期;
T0——相位角为φ时对应时段的低电平机器周期;
T1180——相位角为φ时频率为1180Hz正弦波对应时段的机器周期总和;
T980——相位角为φ时频率为980Hz正弦波对应时段的机器周期总和。
根据图2中面积相等,即S1=S2的要求可以得到:
如果单片机的晶振频率为11.0592MHz,完成频率为980Hz的正弦波调制需要=940个机器周期,完成频率为1180Hz的正弦波调制需要=781个机器周期。20等分能够将940整除,得到每个时段的机器周期数T980=47。但=39余1,如果将余数1丢掉,就会造成频率为1180Hz的正弦波频率误差变大。实际编程时可以将余数1插补在20个时段中的某个时段中,也就是19个时段为T1180=39个机器周期,1个时段为T1180=40个机器周期。T0和T1的计算如表2所示。