在您的模拟中,您可能有类似时间线之类的东西。
PWM基本上是通过计算给定时间的电压来实现的。
例如,如果您希望 PWM 在开始时为 1,具有f
50 kHz 和介于 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 的作用:提供一种改变电压的简单方法。