微步驱动原理:
细分驱动,把加在线圈上的电压 从最大到最小的过程,分四次给完,产生四个中间
状态,即四细分。伟力电机内部转子一个分步角度为60度。四细分之后,就变成
15度。外部指针则转1/12度。
细分方法:
根据电流等分,得到四个电压点,根据这四个电压点,预先计算出四个PWM值。
于是一个过程就需要24个点。
单片机需要处理的就是电流的方向控制。由伟力电机时序图,可以分析出每一个相的
电流方向。有四种情况。
正相增大,正相减小,反向增大,反向减小。
const unsigned char OCRnA_Val[24] =
{
5,48,94,163,220,247,250,247,220,163,94,48,5,207,161,92,34,8,5,8,34,92,161,207
}; //微步码 两个线圈中电流相位是60度,
void step_moto_control(void)
{
if(direction_flag) //正转
{
if(OCRnA_Num_L==0)
{
OCRnA_Num_L = 23;
coil_1B_ON();
}
else
OCRnA_Num_L--;
if(OCRnA_Num_L<=12) coil_1B_CLE();
OCR0A = OCRnA_Val[OCRnA_Num_L]; //左线圈电流
if(OCRnA_Num_R==0)
{
OCRnA_Num_R = 23;
coil_2B_ON();
}
else
OCRnA_Num_R--;
if(OCRnA_Num_R<=12) coil_2B_CLE();
OCR0B = OCRnA_Val[OCRnA_Num_R];
}
else //反转
{
OCRnA_Num_L++;
if(OCRnA_Num_L>=13) coil_1B_ON();
if(OCRnA_Num_L>23)
{
OCRnA_Num_L=0;
coil_1B_CLE();
}
OCR0A = OCRnA_Val[OCRnA_Num_L];
OCRnA_Num_R++;
if(OCRnA_Num_R>=13) coil_2B_ON();
if(OCRnA_Num_R>23)
{
OCRnA_Num_R=0;
coil_2B_CLE();
}
OCR0B = OCRnA_Val[OCRnA_Num_R];
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
没看懂。你描述的问题,是LZ程序的问题,还是你没有用好?
一周热门 更多>