TuyaOS
PWM 驱动

简要说明

PWM(Pulse Width Modulation),即脉冲宽度调制,其是利用微处理器的数字输出来对模拟电路进行控制的一种有效的技术。

img

如上图所示,是一个周期频率是100Hz的pwm波形,高电平占空比为40,低电平占空比为60,通过调节高电平占空比的值,即可以改变模拟输出值的大小。

Api描述

tkl_pwm_init

OPERATE_RET tkl_pwm_init(TUYA_PWM_NUM_E ch_id, CONST TUYA_PWM_BASE_CFG_T *cfg);
  • 功能描述:
    • 通过端口号和基础配置初始化对应的pwm实例,返回初始化结果 。
  • 参数:
    • ch_id: 通道号。
    • cfg: pwm基础配置,包含输出极性,占空比,频率 。

      ```c typedef struct { TUYA_PWM_POLARITY_E polarity; TUYA_PWM_COUNT_E count_mode; //pulse duty cycle = duty / cycle; exp duty = 5000,cycle = 10000; pulse duty cycle = 50% UINT_T duty; UINT_T cycle; UINT_T frequency; // (bet: Hz) } TUYA_PWM_BASE_CFG_T; ```

polarity:

名字 定义 备注
TUYA_PWM_NEGATIVE PWM低有效输出
TUYA_PWM_POSITIVE PWM高有效输出

count_mode:

计数模式,有TUYA_PWM_CNT_UP和TUYA_PWM_CNT_UP_AND_DOWN两种。

duty:

占空比,和cycle搭配使用,输出 = duty / cycle 。

cycle:

周期,或颗粒度,输出 = duty / cycle。

frequency:

输出频率,单位Hz。

  • 返回值:
    • OPRT_OK 成功,其他请参考文件tuya_error_code.h。

tkl_pwm_deinit

OPERATE_RET tkl_pwm_deinit(TUYA_PWM_NUM_E ch_id);
  • 功能描述:
    • pwm实例反初始化。
    • 该接口会停止pwm实例正在进行的传输(如果有),并且释放相关的软硬件资源。
  • 参数:
    • ch_id: 通道号。
  • 返回值:
    • OPRT_OK 成功,其他请参考文件tuya_error_code.h。

tkl_pwm_start

OPERATE_RET tkl_pwm_start(TUYA_PWM_NUM_E ch_id);
  • 功能描述:
    • 启动pwm。
  • 参数:
    • ch_id: 通道号。
  • 返回值:
    • OPRT_OK 成功,其他请参考文件tuya_error_code.h。

tkl_pwm_stop

OPERATE_RET tkl_pwm_stop(TUYA_PWM_NUM_E ch_id);
  • 功能描述:
    • 停止pwm。
  • 参数:
    • port: 端口号。
  • 返回值:
    • OPRT_OK 成功,其他请参考文件tuya_error_code.h。

tkl_pwm_multichannel_start

OPERATE_RET tkl_pwm_multichannel_start(TUYA_PWM_NUM_E *ch_id, UINT8_T num);
  • 功能描述:
    • 同时启动多通道pwm,用于多路组合输出,用于对时序要求比较严格的场景。
  • 参数:
    • ch_id: 通道号列表,数组。
    • num:启动的通道号数目
  • 返回值:
    • OPRT_OK 成功,其他请参考文件tuya_error_code.h。

tkl_pwm_multichannel_stop

OPERATE_RET tkl_pwm_multichannel_stop(TUYA_PWM_NUM_E *ch_id, UINT8_T num);
  • 功能描述:
    • 同时停止多通道pwm,用于多路组合输出,对时序要求比较严格的场景。
  • 参数:
    • ch_id: 通道号列表,数组。
    • num:需要关闭的通道号数目
  • 返回值:
    • OPRT_OK 成功,其他请参考文件tuya_error_code.h。

tkl_pwm_info_set

OPERATE_RET tkl_pwm_info_set(TUYA_PWM_NUM_E ch_id, CONST TUYA_PWM_BASE_CFG_T *info);
  • 功能描述:
    • 重设pwm配置参数,pwm start之后可动态修改配置,补充重新start。
  • 参数:
    • ch_id: 通道号。
    • info: pwm基础配置,包含输出极性,占空比,频率 。其结构体参数见上文描述
  • 返回值:
    • 错误码,OPRT_OK 成功,其他请参考文件tuya_error_code.h。

tkl_pwm_info_get

OPERATE_RET tkl_pwm_info_get(TUYA_PWM_NUM_E ch_id, TUYA_PWM_BASE_CFG_T *info);
  • 功能描述:
  • 参数:
    • ch_id: 通道号。
    • info: pwm基础配置,包含输出极性,占空比,频率 。其结构体参数见上文描述
  • 返回值:
    • 错误码,OPRT_OK 成功,其他请参考文件tuya_error_code.h。

示例1

void tuya_pwm_test(void)
{
OPERATE_RET ret;
TUYA_PWM_BASE_CFG_T cfg = {.polarity = TUYA_PWM_POSITIVE,\
.duty = 1000,
.cycle = 10000,
.frequency = 1000};
ret = tkl_pwm_init(TUYA_PWM_NUM_0, &cfg);
if (ret != OPRT_OK) {
//fail
return;
}
ret = tkl_pwm_start(TUYA_PWM_NUM_0);
if (ret != OPRT_OK) {
//fail
return;
}
ret = tkl_pwm_info_get(TUYA_PWM_NUM_0, &cfg);
if (ret != OPRT_OK) {
//fail
return;
}
if(cfg.duty !=5000){
cfg.duty =5000;
}
ret = tkl_pwm_info_set(TUYA_PWM_NUM_0, &cfg);
//delay
ret = tkl_pwm_stop(TUYA_PWM_NUM_0);
if (ret != OPRT_OK) {
//fail
return;
}
ret = tkl_pwm_deinit(TKL_PWM1_CH);
if (ret != OPRT_OK) {
//fail
return;
}
}
pwm config
Definition: tuya_cloud_types.h:824
OPERATE_RET tkl_pwm_deinit(TUYA_PWM_NUM_E ch_id)
pwm deinit
OPERATE_RET tkl_pwm_stop(TUYA_PWM_NUM_E ch_id)
pwm stop
OPERATE_RET tkl_pwm_info_get(TUYA_PWM_NUM_E ch_id, TUYA_PWM_BASE_CFG_T *info)
get pwm info
OPERATE_RET tkl_pwm_info_set(TUYA_PWM_NUM_E ch_id, CONST TUYA_PWM_BASE_CFG_T *info)
set pwm info
OPERATE_RET tkl_pwm_start(TUYA_PWM_NUM_E ch_id)
pwm start
OPERATE_RET tkl_pwm_init(TUYA_PWM_NUM_E ch_id, CONST TUYA_PWM_BASE_CFG_T *cfg)
pwm init
VOID_T tkl_system_delay(UINT_T num_ms)
system delay