微步驱动原理:
细分驱动,把加在线圈上的电压 从最大到最小的过程,分四次给完,产生四个中间
状态,即四细分。伟力电机内部转子一个分步角度为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];
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
不是的。看我上面代码应该就知道。一个电机需要2个PWM 跟两个普通IO驱动,不需要专用IC 。我用瑞萨8路PWM的同时驱动4个电机做仪表盘 ,效果妥妥的。
如果你用飞思卡尔的 仪表专用 芯片 就不需要驱动了啊,他内部带驱动的。
噪声也太大。
瑞萨8路PWM没用过。
我看网上有加与门74HC08驱动。
还有楼上怎么联系。
步进电机速度控制函数
***************************************************************/
void Speed_Control(void)
{
unsigned int angle_difference = 0;
unsigned int Speed_control_temp = 0;
if(current_angle == set_angle)
{
Speed_control_Val = 50;
return;
}
else
{
if(direction_flag==CCW)
angle_difference = current_angle - set_angle;
else if(direction_flag==CW)
angle_difference = set_angle - current_angle;
if(angle_difference>=100) //>=9
{
if(angle_difference>=1080) //>90
Speed_control_temp = 1;
else if(angle_difference>=720) //60
Speed_control_temp = 2;
else if(angle_difference>=540) //>45
Speed_control_temp = 3;
else
Speed_control_temp = 2160/angle_difference; //根据当前误差求出速度
if(Speed_control_temp>=20) Speed_control_temp = 20;
if(Speed_control_Val>Speed_control_temp) //加速
{
Speed_control_Val -= 1;
if(Speed_control_Val<=Speed_control_temp)
{
Speed_control_Val = Speed_control_temp;
}
}
else
{
if(angle_difference<=120&&Speed_control_Val<=4) //<10 减速
{
Speed_control_Val += 1;
}
}
}
}
}
加减速控制 。梯形加减速。
const unsigned char add_speed_val[7]= {0xac,0xcc,0xdb,0xde,0xe2,0xe5,0xe7};//,0xe9};//,0xea};//加速曲线672,417,324,276,244,221,204,190.--us
//一个全步之后换一次速度。回零最佳曲线。
顺便说说 伟利的步进 电机噪音确实不小。想要噪音小,推荐台达步进电机。内部没有任何齿轮的。噪音基本为零。
抄小日本的技术。据说日系车上大部分用的都是这种电机。
噪音小,寿命厂。
一周热门 更多>