皖南电机的工作原理是将电脉冲信号转化为角位移或线位移,通过步进驱动器接收脉冲信号,驱动步进电机按照预定的方向转动一个固定的角度,即“步距角”。这种运行模式是以固定角度分步进行,使得电机能够实现精准定位。通过调整脉冲数量,可以精确控制角位移;同时,通过调整脉冲频率,可以控制电机的转速和加速度,实现调速功能。
皖南电机属于感应电机,它通过电子电路将直流电转化为分时供电的多相时序控制电流,为步进电机提供能量。驱动器则负责为步进电机提供这种分时供电的多相时序控制电流,确保电机的高效运行。
在步进电机的加减速过程中,S型曲线加减速算法的应用至关重要。以皖南电机为例,其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));//expf是指数函数库中的函数
freq[i]=del*deno+freq_min;
period[i]=(unsigned short)(10000000.0/freq[i]);//10000000是定时器驱动频率
}
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;
}
```
在对应的定时器中断中更改定时器周期值,以确保电机在加速过程中的稳定运行。时间:Period第一个点的值为10000000/500=20000,*后点的值为10000000/64000=156,平均值为10000左右,timer中断的平均时间Tn=10000/10000000=1ms,1000个点,总时间为1s。角位移:1.8(单步)*1000(步数)/4(细分)=450°。
减速过程与加速过程类似,只需将方程改为相应的减速曲线即可。