跳转至

pwm - PWM模块

  1. LuatOS 的 SDK:V2005版本及其后续版本开始支持 setup, start,setDuty,setFreq,stop 这几个函数;

新增的几个函数,更加符合"直觉操作"

  1. 旧版的 open,close,capture, 依然支持,不会删除;

  2. 新版PWM函数在使用上,用户体验更好;

pwm.setup(id, freq, duty, number, precision)

PWM初始化函数,id为PWM通道,freq为PWM频率,duty为PWM占空比,number为PWM输出次数,precision为PWM输出精度;

其中,id freq duty是必填项,number precision是可选填项;

比如, Air780EPM 共有 4 路 PWM,id分别是 0,1,2,4

freq 是 PWM 信号的频率,单位:HZ

duty 是 PWM 信号的占空比,单位:百分比

number(可选):PWM 输出次数(默认值为 0;0 为持续输出, 1 为输出1次, N为指定PWM输出N次数)

precision(可选):PWM 分频精度(默认值为 100;可选值有 100/256/1000)

pwm.start(id)

按照pwm.setup()的初始化设置,开始PWM输出;

pwm.setDuty(id, duty)

在pwm.setup()和pwm.start()之后引用,可以实时更改相应ID PWM的占空比;

pwm.setFreq(id, freq)

在pwm.setup()和pwm.start()之后引用,可以实时更改相应ID PWM的频率;

pwm.stop(id)

关闭pwm,释放系统资源;

代码示例

-- 初始化PWM
pwm.setup(4, 1000, 50)  -- 频率1kHz,初始占空比50%
pwm.start(4)            -- 开始PWM
-- 调整亮度
pwm.setDuty(4, 75)      -- 占空比调整为75%
pwm.setFreq(4, 500)     -- 频率调整为500Hz
sys.wait(2000)
pwm.stop(4)             -- 停止PWM

pwm.open(channel, period, pulse, pnum, precision)

开启指定的PWM通道

参数

传入值类型 解释
int PWM通道
int 频率, 1-1000000hz
int 占空比 0-分频精度
int 输出周期 0为持续输出, 1为单次输出, 其他为指定脉冲数输出
int 分频精度, 100/256/1000, 默认为100, 若设备不支持会有日志提示

返回值

返回值类型 解释
boolean 处理结果,成功返回true,失败返回false

例子

-- 打开PWM5, 频率1kHz, 占空比50%
pwm.open(5, 1000, 50)
-- 打开PWM5, 频率10kHz, 分频为 31/256
pwm.open(5, 10000, 31, 0, 256)

pwm.close(channel)

关闭指定的PWM通道

参数

传入值类型 解释
int PWM通道

返回值

返回值类型 解释
nil 无处理结果

例子

-- 关闭PWM5
pwm.close(5)

pwm.capture(channel)

PWM捕获

参数

传入值类型 解释
int PWM通道
int 捕获频率

返回值

返回值类型 解释
boolean 处理结果,成功返回true,失败返回false

例子

-- PWM0捕获
while 1 do
    pwm.capture(0,1000)
    local ret,channel,pulse,pwmH,pwmL  = sys.waitUntil("PWM_CAPTURE", 2000)
    if ret then
        log.info("PWM_CAPTURE","channel"..channel,"pulse"..pulse,"pwmH"..pwmH,"pwmL"..pwmL)
    end
end