你好,目前使用T1 3.11.31的SDK。请问T1 的P06和P08 引脚是否支持PWM互补?从哪里能看到哪几组PWM支持互补输出,请问这个如何成PWM互补输出,是否有详细的文档。这个有点急,麻烦大佬们帮看下,谢谢~
【求助】T1 pwm互补输出问题
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;
}}