【问题标题】:How to achieve PWM (pulse-width modulation) in Python?如何在 Python 中实现 PWM(脉宽调制)?
【发布时间】:2015-05-21 11:01:36
【问题描述】:

目前我正在对 BLDC 电机进行仿真。 我的模型正在工作。模拟是在 FOR 循环中实现的,而步骤是时间增量。

我的下一个目标是我计划通过 PWM 实现的电机速度控制。

问题是我不知道如何在 Python 中实现 PWM。我已经搜索了解决方案,但我得到的只是一些内置 PWM 的 Raspberry 库。

如何使用一些标准库获得 PWM?

我要获取函数:

def PWM(frequency, dutyCycle)

频率为 50 kHz。 问题是 dutyCycle 可以在模拟的每个时间步发生变化。

【问题讨论】:

    标签: python simulation pwm


    【解决方案1】:

    在您的模拟中,您可能有类似时间线之类的东西。

    PWM基本上是通过计算给定时间的电压来实现的。

    E. g.,如果您希望 PWM 在开始时为 1,则 f 为 50 kHz,dutyCycle 介于 0 和 1 之间,您的“开启”时间为 20 µs * dutyCycle,您的关闭时间为 (20 µs * 1-dutyCycle)。

    因此,您的函数应该类似于

    def PWM(t, frequency, dutyCycle):
        #period = 1 / frequency
        #pt = tt / period
        pt = tt * frequency # "period" time, where 1 unit is 1 period on the "real" time stamp.
        tc = pt - trunc(pt) # cycle time within 1 period. 0..1.
        return 1 if tc < dutyCycle else 0 # where 1 means on and 0 means off
    

    如果你的仿真时间远高于频率,你执行一个虚拟 RC 滤波,你会得到

    def PWM(t, frequency, dutyCycle):
        return dutyCycle
    

    因为这就是 PWM 的作用:提供一种改变电压的简单方法。

    【讨论】:

    • 感谢您的回答。我担心时间步长。我的模拟(主 FOR 循环)的时间步长相当大,为 20µs。为了获得好的分辨率,我必须将时间步长设置为 1µs 左右,但这将花费大量时间和内存来计算(因为模拟持续 10 秒)。
    • @page47250 在这种情况下,您可能希望在滤波后近似 PWM 的信号,即。例如,您实际上可以使用 RC 滤波器扩展 PWM。如果您可以忽略涟漪,这将为您提供dutyCycle 的信号。毕竟,可能会创建一个具有 dutyCycle 的信号来“模拟”可变电压......
    猜你喜欢
    • 2017-02-27
    • 2017-10-26
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多