差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
pwm [2022/02/23 13:49]
gongyusu [3. PWM的实现方式]
pwm [2022/09/06 04:48] (当前版本)
gongyu [3. PWM的实现方式]
行 70: 行 70:
 #### 3.1 单片机(MCU)生成PWM #### 3.1 单片机(MCU)生成PWM
 使用MCU生成PWM是最简单的方式,PWM发生功能和定时器功能是一起的,一种方法是使用软件设置定时器的定时时间,定时时间到翻转IO的高低电平,由于是软件来翻转电平,因此精度不能做到非常精确;另一种是直接使用定时器中的PWM功能,在定时器模块中已经集成了专用的PWM发生电路,用户只需要配置一下该模块的寄存器,在寄存器中配置好PWM的频率和占空比,软件使能该功能后,就可以输出精准的PWM波形。 使用MCU生成PWM是最简单的方式,PWM发生功能和定时器功能是一起的,一种方法是使用软件设置定时器的定时时间,定时时间到翻转IO的高低电平,由于是软件来翻转电平,因此精度不能做到非常精确;另一种是直接使用定时器中的PWM功能,在定时器模块中已经集成了专用的PWM发生电路,用户只需要配置一下该模块的寄存器,在寄存器中配置好PWM的频率和占空比,软件使能该功能后,就可以输出精准的PWM波形。
-{{ :​contenteetimes-images-edn-design-ideas-make-dac-microcontroller-pwm-timer-figure1.png |}}<WRAP centeralign>​微控制器通过定时器输出PWM,再经过模拟低通滤波器得到模拟信号</​WRAP>​+{{drawio>​mcu_pwm_awg.png}} <WRAP centeralign>​微控制器通过定时器输出PWM,再经过模拟低通滤波器得到模拟信号</​WRAP>​
  
 {{ :​contenteetimes-images-edn-design-ideas-make-dac-microcontroller-pwm-timer-figure2.png |}}<WRAP centeralign>​每一路可以产生不同的信号</​WRAP>​ {{ :​contenteetimes-images-edn-design-ideas-make-dac-microcontroller-pwm-timer-figure2.png |}}<WRAP centeralign>​每一路可以产生不同的信号</​WRAP>​
行 89: 行 89:
  
 {{ :​dualpwmlpf.jpg |}}<WRAP centeralign>​ 双PWM的PCB 3D,用KiCad绘制</​WRAP>​ {{ :​dualpwmlpf.jpg |}}<WRAP centeralign>​ 双PWM的PCB 3D,用KiCad绘制</​WRAP>​
 +
 +下面是用树莓派RP2040微控制器,通过MicroPython混合汇编语言编程生成正弦波形的参考代码:
  
 <code python> <code python>
行 207: 行 209:
   * [[https://​www.edn.com/​swapping-bits-improves-performance-of-fpga-pwm-counter/​|在用FPGA产生PWM通过交换数据位提升性能]]   * [[https://​www.edn.com/​swapping-bits-improves-performance-of-fpga-pwm-counter/​|在用FPGA产生PWM通过交换数据位提升性能]]
   * [[https://​www.edn.com/​double-%c2%b5cs-pwm-frequency-resolution/​|Double µC’s PWM frequency & resolution]]   * [[https://​www.edn.com/​double-%c2%b5cs-pwm-frequency-resolution/​|Double µC’s PWM frequency & resolution]]
 +
 +
 +
 +以下为更多参考技术文章,有待整理。
  
 ### PWM(1)- 独臂神通 ### PWM(1)- 独臂神通
 +
 +**当你缺少DAC时**
 +即使在这个高度集成混合信号集成电路的时代,遇到不包含数模转换器的微控制器也并不罕见。可编程逻辑在这方面甚至更成问题;​我从来没有听说过FPGA或CPLD有DAC模块。即使微控制器有DAC,也可能只有一个或两个通道——与集成ADC外设形成对比的是,集成ADC外设通常包含一个多路复用器,允许一个ADC模块转换连接到几个甚至几十个端口引脚的模拟信号。那么,当你发现一个微控制器在各个方面都非常适合你的应用,除了它没有集成DAC时,你应该怎么做呢?​最明显的选择是使用外部DAC。一个快速的Digi-Key搜索表明,您至少有一千种选择,其中一些价格不到一美元,而且是小型SC70、MSOP、SOT或DFN包。但有时候你真的不想在设计中添加另一个芯片。也许你的微控制器没有三个未使用的引脚,你将需要SPI通信;​也许你赶时间,不想付隔夜运费;​也许你需要六个独立的DAC输出,但是没有足够的电路板空间来容纳六个通道的设备。在任何情况下,如果外部DAC是完全不可能的,那么您有一个替代方案。
 +
 +**PWM、电阻器、电容器**
 +
 +这里的最小值是一个电阻器,一个电容,和一些脉冲宽度调制功能。如果您使用的是FPGA或CPLD,当然不会缺少PWM功能。对于处理器,我认为我曾经使用过的每一个微控制器都包含PWM硬件,但我认为一定有一些部分不包含PWM硬件。所以这是首先要检查的事情——如果你的微控制器没有PWM,你就运气不好了(除非你想要设置一些二进制的PWM程序,但说真的,如果你在船上,只需要使用外部DAC)。接下来,您需要一种方法来低通滤波PWM信号。一个基本的单极RC滤波器可以很好,如果你不介意一些涟波的输出,所以如果所有你可以适合你的板或预算是一个电阻和电容,PWM DAC仍然是一个可行的选择。然而,一个更好的滤波器意味着一个更好的DAC,它可能值得你带一个电感或运放,这样你就可以有两个极点而不是一个。
 +
 +一个典型的数字时钟信号是一个周期序列,其中逻辑高电压的持续时间等于逻辑低电压的持续时间。相反,PWM信号是一个周期序列,其中逻辑高(或逻辑低)电压的持续时间根据外部条件而变化,这些变化可以用来传输信息。如果你对无线电电路很熟悉,你就会知道,信息是通过正弦信号的方式传输的,而正弦信号是通过某种调制方式进行传输的。这种情况类似于PWM的功能——不是幅度或频率调制,而是脉宽调制。你会发现它有助于思考这个概念相似:​我们都知道,​一个模拟音频信号可以从汽车收音机的天线传播首先调制载波,​然后处理接收到的信号的方式消除了载体和恢复原来的音频信息。同样,我们可以通过脉宽调制数字载波来产生可编程模拟电压,然后将调制后的信号“传送”到低通滤波器。
 +
 +在上图中,逻辑高被标识为“ON”或活动状态,逻辑低被标识为“OFF”或非活动状态。在第一个时间段内,激活状态的持续时间与不激活状态的持续时间相等。然后,在接下来的两个时段,活动状态持续时间增加一个网格宽度;​这意味着无功状态持续时间必须减少一个栅格宽度,因为PWM载波频率(因此PWM周期)是恒定的。在我们的PWM DAC的背景下,我们真的不需要知道绝对的有源和非有源持续时间;​重要的是持续时间之间的比率,我们根据PWM占空比来讨论:​
 +
 +从占空比到模拟电压
 +
 +在低通滤波器输出处观察到的标称DAC电压仅由两个参数决定,即占空比和PWM信号的逻辑高电压;​在图中,这个逻辑高电压用A表示“振幅”。占空比、幅值和DAC电压之间的关系是相当直观的:​在频域,低通滤波器抑制输入信号的高频成分。时域等效的效果是平滑,或平均——因此,通过低通滤波PWM信号,我们提取其平均值。让我们假设占空比为50%(即活动持续时间等于不活动持续时间),我们使用3.3 V逻辑。你大概可以猜到DAC的标称电压是多少:​1.65 V,因为信号在3.3 V和0 V时的时间各占一半,因此平滑后的版本将在正中间结束。我们可以归纳如下:​
 +
 +分辨率?
 +
 +在选择DAC时,首先要考虑的规范之一是“分辨率”,这是一个有点模糊的术语,用有点模糊的“位”单位表示。我们所说的“分辨率”真正的意思是“DAC可以产生多少不同的输出电压(或电流)?​”“位”是指控制数字到模拟电路的数据寄存器,这样一个10位DAC可以产生210 = 1024个不同的输出电压。如果您充分理解了这一点,您将看到我们可以很容易地识别PWM DAC的等效分辨率。
 +
 +让我们假设图中显示的PWM信号被限制为脉冲宽度是一个网格的倍数。这意味着占空比可以假设8个不同的值:​0%、~14%、~29%、~43%、~57%、~71%、~86%和100%。每个占空比对应一个特定的输出电压,所以我们这里有一个3位DAC,因为23 = 8。
 +
 +要确定现实生活中的PWM DAC的分辨率,只需应用相同的分析:​可以生成多少不同的占空比?​这个问题通常不难回答,因为标准PWM硬件块的中心元件是一个控制脉冲宽度的n位计数器,这意味着等效DAC分辨率是2N。例如,Atmel公司的SAM4S微控制器系列的数据表包括其PWM控制器的以下特性:​
 +
 +16位计数器意味着16位分辨率,​或216 = 65536不同的电压从0 V VDDIO(可在1.62 V至3.6 V)。另一个例子,​硅实验室的EFM8UB1微控制器特性变量PWM分辨率,​因此参考手册是显式的关于分辨率规格:​
 +
 +在这一点上,当您可以从pwm + rc过滤器实现获得16位分辨率时,常规DAC似乎几乎没有任何用处。当然,这并不是全部——DAC不仅仅是解决方案。在下一篇文章中,我们将使用仿真更深入地探索与PWM数模转换相关的概念、电路和性能限制。
 +
 +  * [[https://​www.allaboutcircuits.com/​technical-articles/​low-pass-filter-a-pwm-signal-into-an-analog-voltage/​|Low-Pass Filter a PWM Signal into an Analog Voltage]]
 +  * [[https://​www.allaboutcircuits.com/​technical-articles/​low-pass-filter-tutorial-basics-passive-RC-filter/​|What Is a Low Pass Filter? A Tutorial on the Basics of Passive RC Filters]]
 +
 PWM可以算是数字电路中的“独臂”神通,“独臂” - 只需一根线;“神通” - 在很多关键的应用中起到栋梁的作用。PWM(脉宽调制 Pulse Width Modulation)从字面意思上讲它是一种“调制”方式,调制就意味着在某些载波信号上携带了某些的信息,通过解调的过程就可以得到其携带的信息,这些信息的属性由PWM的产生端定义,总之在这一根仅仅发生0、1交替变化的信号线上可以做出很多文章。 PWM可以算是数字电路中的“独臂”神通,“独臂” - 只需一根线;“神通” - 在很多关键的应用中起到栋梁的作用。PWM(脉宽调制 Pulse Width Modulation)从字面意思上讲它是一种“调制”方式,调制就意味着在某些载波信号上携带了某些的信息,通过解调的过程就可以得到其携带的信息,这些信息的属性由PWM的产生端定义,总之在这一根仅仅发生0、1交替变化的信号线上可以做出很多文章。