咱们大多数人都知道PWM DAC(数模转换器)。它们很简单完成,也很廉价,十分合适一些低功能的运用。
完成它们的办法是滤除PWM信号中的高频重量,只留下正比于占空比的低频或直流重量。可是低通滤波器并不能彻底滤除PWM频率,因而低频/直流信号中一般都会有必定程度的纹波。
削减PWM DAC纹波的办法一般有两种。一种是下下降通滤波器的截止频率,另一种是进步PWM信号的频率。可是不可避免的是,更低的截止频率会延伸上升时刻;如果是在给定时钟频率点经过减小计数器尺度完成的,那么更快的PWM频率会下降分辨率。
下面要评论的规划实例十分风趣,侧重介绍了别的一种下降PWM DAC纹波的办法。
事实上,咱们能够运用相位差为180°的两个PWM信号来下降上述纹波。从直觉上,当两个相同频率的正弦波的相位相差180°时,它们会互相抵消,因而咱们运用相位差为180°的两个PWM信号也能将互相的谐波重量抵消洁净,是这样吗?确实是这样,但并不是PWM信号的一切谐波重量都能抵消,有些重量能够抵消,有些却抵消不了。这与傅里叶级数有关,比较复杂,这儿就不罗列一大堆数学公式来进行解说了。
两个PWM信号之间180°的相位差是怎么完成的呢?我运用了TI的MSP320FR5969 LaunchPad,这种办法很常用。为了完成相位移动,需求两个定时器。其间一个定时器有必要包括两个比较-捕获-PWM(CCP)模块,另一个只需求一个CCP模块。
在包括两个CCP模块的定时器中,能够用一个CCP模块来设置该定时器的PWM频率和占空比,另一个CCP模块发生中止,用于发动另一个定时器,两者的延时等于PWM周期的一半。另一个定时器中的CCP模块用于设置相同的PWM频率和占空比。你还有必要对这个延时进行“微调”,由于软件会在PWM信号之间添加额定的时刻。举例来说,在我的代码的102行,我将比较寄存器的值从(timer_period+1)/2改为了(timer_period+1)/2-27。
我做了一些小调查,想看看其它微控制器是否具有相同的硬件和才能来完成我所用的办法:许多Atmel微控制器都有1个以上的定时器,每种控制器一般都有两个CCP(比方ATmega 328),因而完成这种办法应该是或许的。别的一个常见的比如是STM32F051R8(这是一些盛行的ST电路板运用的微控制器),它有11个定时器,其间许多定时器都有1个以上的CCP。TI根据ARM的微控制器一般有独立的PWM和定时器模块(如TM4C123GH6PM),因而应该更简单完成相移。运用其间一个定时器,两个PWM模块就能够以一半PWM周期的延时敞开。
图1:单路和双路PWM电路
在相移DAC的Vout端,两个PWM信号被累加在一起,成果有些谐波重量互相抵消,终究完成了下降纹波的作用。
咱们看看运用三种不同电阻值时的状况。每个PWM信号都是占空比为25%、频率为100kHz。
图2:上面的波形是传统PWM,下面的波形是双路相移PWM。从左到右每格的电压递减100mV、50mV、4mV。
从图中的成果能够看出:首要,峰-峰纹波下降了;其次,传统PWM DAC的纹波基频等于 PWM信号的频率(100kHz)。相移PWM DAC的纹波基频等于PWM信号的二次谐波(200kHz),这意味着咱们用相移DAC成功地删除了PWM信号的一次谐波。
这种办法的一个长处是不必添加上升时刻也能下降纹波(或许相同的纹波只需一半的上升时刻)。
别的一个潜在长处是,将两个PWM设置为相隔一个计数值能够获得中心值,从而完成DAC有用分辨率的翻倍。尽管这会导致少量的不对称并添加纹波,可是影响很小能够忽略不计。