2024年3月24日发(作者:)

rmp_cntl模块用于斜坡激励,让速度信号的变换以斜坡的方式增加或减少。

任意给定一个设定值Setpoint_Value,使其梯形的跟踪目标值Target_Value

宏模块根据input TargetValue的值与输出值SetpointValue做差运算并取绝对值,

如果值小于解析度,则让EqualFlag = 0x7FFFFFFF,标志输出已经逼近目标值; 只要差值

还大于解析度0.0000305(q15),就让RampDelayCount计数+1,每隔RampDelayMax

个计数,输出值SetpointValue向着目标值TargetValue靠近一个解析度。(同时保证

SetpointValue不超越上下限,若超越,则取边界值,这时候永远不能完成对目标值的逼

近,所以目标值首先一定不能超越上下界限)。

实例中,0.5的目标值,需要0.5/0.0000305 = 16393次逼近(即调用该宏

16393*RampDelayMax 次),SetpointValue才约等于目标值。

直接效果:每执行该宏RampDelayMax次,输出值向目标值逼近一个解析度。

BLDCPWM_MACRO(v) 宏的理解

#define BLDCPWM_MACRO(v) /*向上计数高有效,时钟为SY

Tmp = (int32)Max*(int32)eriod; /* Q15 = Q0xQ15

Period = (int16)(Tmp>>15); /* Q15 -> Q0 (Period)

if (ive==1)

GPR0_BLDC_PWM = 0x7FFF - nc;

/* PWM active high

/* 从0x7FFF的值为32768就

else if (ive==0)

GPR0_BLDC_PWM = nc;

/* PWM active low

Tmp = (int32)Period*(int32)GPR0_BLDC_PWM;

/* Q15 = Q0xQ15

首先对程序中出现的变量用途做出解释:PeriodMax 最大周期值(Q0格式),

MfuncPeriod周期值系数(其实可以不要,格式实质就是0~1),Tmp=最大周期值*系

数(Q15格式),Period(Q0格式),nc占空比(Q15格式),。

//为了提高精确性,占空比的输入采取Q15的格式,但给

的又需要Q0格式,Tmp =

(int32)Period*(int32)GPR0_BLDC_PWM; 其中 Period为周期值(已经变味Q0格式),

GPR0_BLDC_PWM为占空比(为Q15格式)eriod为变量,可以调节周期值得

大小,而本题中0x7FFF(Q15(1)),相当于周期值没变。