朱工

硬件PWM与基于累加的硬件PDM的比较

0
阅读(18000)

硬件PWM基于累加的硬件PDM的比较

- 基于累加的PDM算法(3)

  现在的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在使用上更具优势。


Hardware PWM vs Hardware PDM Based On Addition

- A PDM Algorithm Based On Addition (3)


===

FY_ZHU

2013-08-08 BOS-MA


基于累加的PDM算法(1) - 只用一条加法指令实现的PWM算法,软硬都行

基于累加的PDM算法(2) - 基于累加的PDM算法的原理