PDM是脉冲密度调制(pulse density modulation),PWM是脉冲宽度调制(pulse width modulation)
PWM与PDM是现在运用非常多的电路,现在的MCU一般都内带硬件PWM,用特殊的定时器电路实现。所以一般不会像我们当年那样用软件来做PWM。因此,上述算法的一个用处,是用来做硬件PDM。用PSoC的UDB Datapath来做,就是本算法硬件实现的例子。
十来年前,有几十个宏单元的CPLD就可以做硬件PDM。但是,如果不是对速度和精度有特别要求,MCU外再挂一块CPLD做的硬件PDM“拖油瓶”,好像还是不大合算。现在的FPGA,连MCU都摆进去了,再添上点硬件PDM,就是小意思了。所以,算法就有了用武之地。再说,用该算法做出硬件PDM,恐怕比定时器式的PWD所占用的资源还要小。自从出现Cypress的PSoC3后(以及后来的PSoC5、LP及PSoC4),我们就可以很轻易地把这种算法用MCU内的硬件做出来。第一篇的实例就是在新推出的PSoC4上做的。
我们把这种加法硬件PDM和定时器式的硬件PWM稍做比较,就会发现某些优点。(以下PWM和PDM均指定时器式的硬件PWM和加法硬件PDM)
(1) 相同的输出平均值
PDM和PWM有相同的输出平均值,这是两者比较的前提。即,在N个clk长的时间内,它们都输出了H个1。
只不过对PWM,这H个1是连在一起的;而对PDM,这H个1是近乎均匀地分布的。这也是两者根本区别之所在。
(2) 输出建立时间
假设都是16位,N=65536,且都输出0.7071…。时钟Fclk=1MHz。
那么定时器式PWM的一个PWM脉冲周期是65.536毫秒,在65.536毫秒内输出连续的46340个1和连续的19196个0,过1秒鈡,即15个PWM脉冲周期输出未必已经到达稳定。
而加法硬件PDM,看一下第二篇的例子,经过256个clk,即0.256毫秒,就可稳定到误差1%以内。
对DA输出有上升沿、下降沿要求时,就可以分出优劣。
(3) 滤波
而且对PDM的滤波要容易得多。对PWM,要按T=65.536毫秒,即f=15Hz计算滤波电路。而对PDM,看精度按100KHz、10KHz、1KHz计算滤波电路就能满足要求了。在某些情况下,不用专门的滤波电路,输出的发布电容、引线电感就可起滤波作用。
对PWM输出的噪声频谱做一分析,会发现,在f = Fclk / N的低频率点,有一个不可避免的峰值。而PDM大大压低了低频峰值和整体的噪声电平,使得滤波更加容易。
(4) 任意截断的平均值
在PDM输出中,从任一时刻开始,截取一段任意长度(Nx)的输出,其中1的个数为Hx,我们有:Hx/Nx总是目标输出值的最好分数逼近。
而PWM输出序列中,除了Nx=N,截取下来的Hx/Nx往往远离目标输出值。
(5) 任意时刻改变设定值
PWM只能在N个计数终了时,改变设定值;尽管该设定值已事先送到寄存器。而PDM可以在任意时刻改变设定值,并直接在输出有所反映。
对那些对输出延时有要求的DA,就可以有所选择了。
这些,都使得基于加法的硬件PDM比基于定时器的硬件PWM在使用上更具优势。
来源:网络