前情概要
最近在寻思用树莓派控制电机速度,电机预估电压是24V,电流是10A,以这样的配置需要个无极调速控制器控制电机转速,看了下相关的控制器价格也不贵,十多块钱就能整一块。然后,相关的无极调速有提供PWM控制的。
然后说到调速控制这一块,一般来说,低功率电路,比如5V/1A,3V/1A这样的电路,通常直接接个电位器进行控制就行了,而对于大功率电路,比如100W,200W这样的,通常来说就需要个通过低电压控制高电压电路了。一般来说,直接通过一个大功率三极管就能通过低电压的无极电压电流调节从而控制高电压电流的电路。但是实际上的放大电路还是比较复杂的,我非科班出身,关于这块目前也没有做过深入研究其根本原因和原理,暂且不谈。另外就是数字电路来控制大功率电器,那么也需要低电压通过放大电路来进行控制。
以此为前提,那么就问题来了,数字电路怎么能做到控制电压电流大小。首先看物理电位器的调节原理就是控制电路中的电阻来控制整个电路中的电流和电压大小,这个好理解。而在数字电路中,则是通过PWM(Pulse width modulation)
,中文意思是脉冲宽度调制
。
PWM
从字面理解PWM,一开始看到其实是不太好理解的,我一开始也是弄得云里雾里的,这里用我自己所理解的方式进行梳理一下。
首先:
- 数字电路输出都是
高
/低
电平,高电平可以假定为1,低电平假定为0,也就是低电平情况电路中没有电流电压流动。至于具体的这个高
电平,对应的是多少电压,那么我这以树莓派为例,树莓派有好几个引脚,有的引脚输出的是3.3V
电压,有的引脚输出的是5V
,那么对应的相关高低电平就是:3.3:0
,5:0
。 - 数字电路是有频率的,这个以我的理解,就是一个时钟周期(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控制的时候,直接用对应系统硬件提供的操作进行控制就行了,主要就是了解了整套基础原因之后,事情就没有这么神秘了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。