在现代自动化控制领域,步进电机凭借其将电脉冲信号转化为精确角位移或线位移的特性,已成为数字程序控制系统中的核心组件。这种电机在安徽皖南电机等品牌的生产下,以其高精度、高稳定性,广泛应用于各种机械设备中。在正常工作条件下,步进电机的转速和停止位置仅取决于脉冲信号的频率和数量,不受负载变化的影响。
每当安徽皖南电机步进驱动器接收到一个脉冲信号,步进电机便按照预设方向转动一个固定的角度,即“步距角”,其运行模式为分步进行。通过调整脉冲数量,可以实现精确的角位移定位;同时,通过调整脉冲频率,可以控制电机的转速和加速度,从而实现调速功能。
皖南电机作为一种感应电机,其工作原理是通过电子电路将直流电转化为分时供电的多相时序控制电流,为步进电机提供能量。驱动器则负责为步进电机提供这种分时供电的多相时序控制电流。
在步进电机的加减速过程中,S型曲线加减速算法发挥着重要作用。其方程如下,图形在[-5,5]范围内呈现特定形状。若将此曲线应用于步进电机的加减速过程,需在XY坐标系中进行平移和拉伸变换。
在项目加速过程中,从5600Hz加速至64000Hz,采用4细分,输出比较模块所用的定时器驱动频率为10M,采用1000个点进行加速处理。根据项目需求,在加速过程中采用的曲线方程如下:
其中Fcurrent为length(1000)个点中的单个频率值。Fmin起始频率为5600;Fmax为*大频率64000;-flexible*(i-num)/num是对S型曲线进行拉伸变换,其中flexible代表S曲线区间(越大代表压缩越严重,中间(x坐标0点周围)加速度越大;越小越接近匀加速。理想的S曲线取值为4-6),i是循环计算过程中的索引,从0开始,num为length/2大小(这样可以使得S曲线对称)。在项目中i的区间[0,1000),num=1000/2=500。这些参数均可根据实际需求进行修改。
提供的计算接口如下:
```c
void CalculateSModelLine(float freq[], unsigned short period[], float len, float freq_max, float freq_min, float flexible)
{
int i=0;
float deno;
float melo;
float del=freq_max-freq_min;
for(;;i++)
{
melo=flexible*(i-len/2)/(len/2);
deno=1.0/(1+expf(-melo));
freq[i]=del*deno+freq_min;
period[i]=(unsigned short)(10000000.0/freq[i]);
}
return;
}
```
启动电机和停止电机的代码如下:
```c
void StartPWM()
{
DriverMotorFlag=TRUE;
Index=0;
MOTOR_EN_DISABLE=ENABLE;
OpenOC4(OC_ON|OC_TIMER_MODE16|OC_TIMER3_SRC|OC_PWM_FAULT_PIN_DISABLE,0,0);
RPC13R=11;
OC4RS=OC_PERIOD_MIN/2;
OpenTimer3(T3_ON|T3_PS_1_8, OC_PERIOD_MIN);
INTSetVectorPriority(INT_TIMER_3_VECTOR, INT_PRIORITY_LEVEL_6);
INTSetVectorSubPriority(INT_TIMER_3_VECTOR, INT_SUB_PRIORITY_LEVEL_1);
EnableIntT3;
}
void StopPWM()
{
DriverMotorFlag=FALSE;
Index=0;
MOTOR_EN_DISABLE=DISENABLE;
OpenOC4(OC_OFF|OC_TIMER_MODE16|OC_TIMER3_SRC|OC_PWM_FAULT_PIN_DISABLE,0,0);
RPC13R=0;
PORTCbits.RC13=0;
CloseTimer3();
DisableIntT3;
}
```
在对应的定时器中断中更改定时器周期值,可以避免电机在加速过程中偶尔卡住。*初,我在另一个定时器中断中每隔1ms更改应用在OC模块的timer3的周期值,这偶尔会造成电机在加速过程中卡住。实际上应该在timer3的中断中更改。
```c
static unsigned short CountForAcc=0;
void __ISR(_TIMER_3_VECTOR,ipl6) Timer3OutHandler(void)
{
mT3ClearIntFlag();
if(CountForAcc++>2)
{
CountForAcc=0;
if(DriverMotorFlag==TRUE&&Index2)
{
// ...
}
}
}
```
时间:Period第一个点的值为10000000/500=20000,*后点的值为10000000/64000=156,平均值为10000左右,timer中断的平均时间Tn=10000/10000000=1ms,1000个点,总时间为1s,当然,起始频率大加速时间就越短,比如Fmin=16000Hz,Fmax=64000,则40ms左右即可完成加速过程。
角位移:1.8(单步)*1000(步数)/4(细分)=450°
上述为加速过程,减速过程同理,只需将方程改为:
可以得到减速曲线如下所示: