003 pwm配置问题
怎么配置pwm才能让占空比为0或者100%的时候 没有脉冲 stcAdtBaseCntCfg.enCntMode = AdtSawtoothMode;stcAdtBaseCntCfg.enCntDir = AdtCntUp;
stcAdtBaseCntCfg.enCntClkDiv = AdtClkPClk0;
Adt_Init(enAdt, &stcAdtBaseCntCfg); //ADT载波、计数模式、时钟配置
u16Period = 4096;
Adt_SetPeriod(enAdt, u16Period); //ADT载波、计数模式、时钟配置
enAdtCompare = AdtCompareA;
u16Compare = R_level;
Adt_SetCompareValue(enAdt, enAdtCompare, u16Compare*4); //通用比较基准值寄存器A设置
stcAdtTIM4ACfg.enCap = AdtCHxCompareOutput;
stcAdtTIM4ACfg.bOutEn = TRUE;
stcAdtTIM4ACfg.enPerc = AdtCHxPeriodHigh;
stcAdtTIM4ACfg.enCmpc = AdtCHxCompareLow;
stcAdtTIM4ACfg.enStaStp = AdtCHxStateSelKeep;
stcAdtTIM4ACfg.enStaOut = AdtCHxPortOutLow;
stcAdtTIM4ACfg.enStpOut = AdtCHxPortOutLow;
Adt_CHxXPortConfig(enAdt, AdtCHxA, &stcAdtTIM4ACfg); //端口CHA配置
Adt_StartCount(enAdt);
上面这段是我的配置,在占空比为0 的时候有个细细脉冲 F003的高级定时器,如果直接设置占空比0或者100%的时候,是不能输出常高或者常低的波形,
如果你只使用1个通道的话,可以参考驱动库样例里的ADT的PwmHwComp,把CHB的配置删除,然后死区配置为最小
这样你可以控制GCMCR(缓存传送使能的情况下)设置0或者大于等于周期值的时候,输出常高或常低的波形。
测试过,只能单独出现低电平或高电平,不能出现由高电平到低电平或由低电平到高电平的现象。 凡人8000 发表于 2019-10-11 17:47
测试过,只能单独出现低电平或高电平,不能出现由高电平到低电平或由低电平到高电平的现象。 ...
我刚使用005芯片一个星期,期间也调试了一下pwm输出,以下应该可以输出0%-100%
void PWM_SetDuty(uint8_t duty_value)
{
uint16_t pwm_value;
Adt_SetPeriodBuf(AdTIM4,500); //(float)u32_pclk/20000000 * period_us_div10; 4000000MHZ/20000000*2500=500
if(duty_value==0)
{ Adt_StopCount(AdTIM4); }
else
{ Adt_StartCount(AdTIM4); }
pwm_value=duty_value*5;
Adt_SetCompareValue(AdTIM4, AdtCompareC,pwm_value);
PS:要设置一下一个方向,stcAdtTIM4ACfg.enPerc = AdtCHxPeriodHigh; //AdtCHxPeriodKeep; 我都是直接配置输出值
页:
[1]