【求助】T1 pwm互补输出问题

Wi-Fi 设备、蜂窝设备、WuKongAI、开发板、TuyaOS 移植等


Post Reply
whidl
Posts: 9

你好,目前使用T1 3.11.31的SDK。请问T1 的P06和P08 引脚是否支持PWM互补?从哪里能看到哪几组PWM支持互补输出,请问这个如何成PWM互补输出,是否有详细的文档。这个有点急,麻烦大佬们帮看下,谢谢~

luffy
Posts: 13

Re: 【求助】T1 pwm互补输出问题

1.正常pwm的初始化,引脚设置高有效
2.使用tkl_pwm_multichannel_start接口,传入2个pwm通道,这两个通道就能支持互补,不会出现同时高电平
3.检查你当前SDK版本下,这个接口是否更新成以下代码了:
OPERATE_RET tkl_pwm_multichannel_start(TUYA_PWM_NUM_E *ch_id, UINT8_T num)
{
int ret = OPRT_OK;
unsigned int count;
unsigned int cold_duty, warm_duty;
unsigned int dead = 0;


Code: Select all

if (2 == num) {
    if ((ch_id[0] > PWM_DEV_NUM) || (ch_id[1] > PWM_DEV_NUM))
    {
        return OPRT_INVALID_PARM;
    }

    if (pwm_cfg[ch_id[0]].frequency != pwm_cfg[ch_id[1]].frequency) {
        return OPRT_COM_ERROR;
    }
    
    count = (unsigned int)((26 * 1000000) / pwm_cfg[ch_id[0]].frequency);       // 26M(主频) / 频率 = 计数值
    cold_duty = (unsigned int)(pwm_cfg[ch_id[0]].duty * count / 10000);         // 一个周期的计数值 * 占空比
    warm_duty = (unsigned int)(pwm_cfg[ch_id[1]].duty * count / 10000);         // 一个周期的计数值 * 占空比
    if (count >= cold_duty + warm_duty) {
        dead = (count - cold_duty - warm_duty) / 2;
    } else {
        bk_printf("cold_duty(%d) + warm_duty(%d) > count(%d)\r\n", cold_duty, warm_duty, count);
        return OPRT_COM_ERROR;
    }
    
    if (0 == pwm_start_flag[ch_id[0]]) {
        ret = bk_pwm_cw_initialize(ch_id[0], ch_id[1], count, cold_duty, warm_duty, dead);
        if (kNoErr == ret) {
            ret = bk_pwm_cw_start(ch_id[0], ch_id[1]);
        } 
        
        ret = kNoErr == ret ? OPRT_OK : OPRT_COM_ERROR;
        pwm_start_flag[ch_id[0]] = !ret;
        pwm_start_flag[ch_id[1]] = !ret;
    } else {
        ret = bk_pwm_cw_update_param(ch_id[0], ch_id[1], count, cold_duty, warm_duty, dead);
        ret = kNoErr == ret ? OPRT_OK : OPRT_COM_ERROR;
    }
    
    return ret;
} else {
    return OPRT_NOT_SUPPORTED;
}

}

Post Reply