乐趣区

关于raspberry-pi:树莓派控制调速以及关于PWM的思考

前情概要

最近在寻思用树莓派管制电机速度,电机预估电压是 24V,电流是 10A,以这样的配置须要个无极调速控制器管制电机转速,看了下相干的控制器价格也不贵,十多块钱就能整一块。而后,相干的无极调速有提供 PWM 管制的。

而后说到调速管制这一块,一般来说,低功率电路,比方 5V/1A,3V/1A 这样的电路,通常间接接个电位器进行管制就行了,而对于大功率电路,比方 100W,200W 这样的,通常来说就须要个通过低电压管制高电压电路了。一般来说,间接通过一个大功率三极管就能通过低电压的无极电压电流调节从而管制高电压电流的电路。然而实际上的放大电路还是比较复杂的,我非科班出身,对于这块目前也没有做过深入研究其根本原因和原理,暂且不谈。另外就是数字电路来管制大功率电器,那么也须要低电压通过放大电路来进行管制。

以此为前提,那么就问题来了,数字电路怎么能做到管制电压电流大小。首先看物理电位器的调节原理就是控制电路中的电阻来管制整个电路中的电流和电压大小,这个好了解。而在数字电路中,则是通过 PWM(Pulse width modulation),中文意思是 脉冲宽度调制

PWM

从字面了解 PWM,一开始看到其实是不太好了解的,我一开始也是弄得云里雾里的,这里用我本人所了解的形式进行梳理一下。

首先:

  1. 数字电路输入都是 / 电平,高电平能够假设为 1,低电平假设为 0,也就是低电平状况电路中没有电流电压流动。至于具体的这个 电平,对应的是多少电压,那么我这以树莓派为例,树莓派有好几个引脚,有的引脚输入的是 3.3V 电压,有的引脚输入的是5V,那么对应的相干高低电平就是:3.3:0,5:0
  2. 数字电路是有频率的,这个以我的了解,就是一个时钟周期(1 秒)内电流分成多少次流动,也就是一个时钟周期内电流分成多少次传递,如 10MHZ,那么就是一个时钟周期内把电流分成 10M 次进行传递。

然亦有以上两点基础知识之后,那么就很容易了解 PWM 了。了解 PWM 之前,还须要了解个叫做空占比的概念。空占比的意思是在单位工夫内输入的低电平次数占所有电平次数(高电平输入次数 + 低电平输入次数)的比率,如 10MHZ 的电路,如果空占比为 0.1,那么就有1M 次是输入低电平的,9M次是输入高电平的。

PWM 的理念就是,原本是 5V/16MA 的电路,那么,我在单位工夫内,原本 10M 次都是输入高电平,然而假如空占比为 0.8,也就是说,相当于这 10M 次其中有8M=10M*0.8 次是输入低电平。而后就不言而喻的可知,单位工夫内流过的电流为 2M=10M-8M 次,也就是理论在单位工夫内传送电流的工夫只占了 0.2。也就是说,本来的5V/16MA 的电路现在在单位工夫内就传送了5V/16MA*0.2=1V/3.2MA,从而达到了降压限流的目标了。

程序控制空占比

如果说树莓派的话,自身是有几个接口能够调用零碎提供的库来间接输入 PWM 的,抛开这点不谈,如果说本人来解决的话,用程序来管制,相似于如下伪代码:

频率 = 10MHZ
一个电平在单位工夫内的传送工夫 = 1 / 频率
空占比 = 0.8

while True:
    输入高电平()
    继续等到高电平输入工夫 = 一个电平在单位工夫内的传送工夫 * (1- 空占比)

    输入低电平()
    继续等到低电平输入工夫 = 一个电平在单位工夫内的传送工夫 * 空占比

实际上 PWM 的算法有很多,而在不同的电路管制中可能会有不同的限度,如最简略的例子,如 LED 灯管制,如果空占比为 0.5,那么 1 秒内,如果后面 0.5 秒输入高电平,前面 0.5 秒输入低电平。尽管来说,单位工夫内均匀电压和电流为理论电压电流的一半,然而,人眼就非常明显的能感触到 LED 在闪动,因为人眼要能感触到画面不闪动,画面刷新率最起码要达到 24HZ。所以,须要把高低电平在单位工夫内最起码还要拆分成 24 份,而后每一份工夫内,再依照空占比进行工夫拆分,再在本人的工夫内输入高电平和低电平。也就是说,把依照空占比输入的 高 / 低 电平作为一个根底操作的话,单位工夫内能做越多操作,电压和电流也就越稳固,当然,这里我也只是在树莓派上做了理论验证,对于理论的相干数学验证没有做过。

写在结尾

集体对整套管制想法做下记录,后续在须要用到 PWM 管制的时候,间接用对应零碎硬件提供的操作进行管制就行了,次要就是理解了整套根底起因之后,事件就没有这么神秘了。

退出移动版