树莓派控制调速以及关于PWM的思考
作者:kumfo
简介:SegmentFault 后端工程师
来源:SegmentFault 思否社区
前情概要
最近在寻思用树莓派控制电机速度,电机预估电压是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次进行传递。
程序控制空占比
频率 = 10MHZ
一个电平在单位时间内的传送时间 = 1 / 频率
空占比 = 0.8
while True:
输出高电平()
持续等到高电平输出时间 = 一个电平在单位时间内的传送时间 * (1-空占比)
输出低电平()
持续等到低电平输出时间 = 一个电平在单位时间内的传送时间 * 空占比