600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > STM32物联网项目-双极性步进电机

STM32物联网项目-双极性步进电机

时间:2020-07-21 15:57:49

相关推荐

STM32物联网项目-双极性步进电机

双极性步进电机

双极性的意思是通过线圈的电流有两个方向

电流方向

A+ 流向 A-或者A- 流向 A+

B+ 流向 B-或者B- 流向 B+

驱动方式

与单极性的步进电机一样,有三种驱动方式,单四拍、双四拍、八拍

A+表示电流从A+流向A-,A-表示电流从A-流向A+

因为单四拍的步距角是7.5度,也就是说按A+,B+,A-,B-这样线圈通电顺序就可以让步进电机转动7.5度,又因为该步进电机没有减速比,所以360/7.5 = 48,48个这样的单四拍就可以让电机转动一圈,双四拍的同理

八拍步距角是3.75度,360/3.75 = 96,所以在八拍的驱动方式下,步进电机转一圈要96个这样的八拍脉冲

程序

与单极性步进电机的程序差不多,在驱动方式上和转一圈所需的脉冲数不同

一个四拍或八拍都是让线圈轮流通电,若脉冲是A+,就让A+引脚输出高电平,A-引脚输出低电平,这样电流就从A+流向了A-,驱动转子转动

A1 = A+,A2 = A-

/** @name Step_One_Pulse* @brief 步进电机步进一个脉冲* @param Speed_Change -> 速度变化* @retval None*/static void Step_One_Pulse(void){static uint8_t Position = 0;//单四拍if(Bipolar_Step_Motor.Drive_Mode == Drive_Mode_Single_4_Beats){if(Bipolar_Step_Motor.Direction == Forward_State){//正向步进 A1 - B2 - A2 - B1switch(Position){case 0: SET_Motor_A1; CLR_Motor_B1; CLR_Motor_A2; CLR_Motor_B2; break;case 1: CLR_Motor_A1; CLR_Motor_B1; CLR_Motor_A2; SET_Motor_B2; break;case 2: CLR_Motor_A1; CLR_Motor_B1; SET_Motor_A2; CLR_Motor_B2; break;case 3: CLR_Motor_A1; SET_Motor_B1; CLR_Motor_A2; CLR_Motor_B2; break;default: System.Error_Handler();}}else{//反向步进 A1 - B1 - A2 - B2switch(Position){case 0: SET_Motor_A1; CLR_Motor_B1; CLR_Motor_A2; CLR_Motor_B2; break;case 1: CLR_Motor_A1; SET_Motor_B1; CLR_Motor_A2; CLR_Motor_B2; break;case 2: CLR_Motor_A1; CLR_Motor_B1; SET_Motor_A2; CLR_Motor_B2; break;case 3: CLR_Motor_A1; CLR_Motor_B1; CLR_Motor_A2; SET_Motor_B2; break;default: System.Error_Handler();}}//更新位置信息if((++Position) == 4)Position = 0;}//双四拍if(Bipolar_Step_Motor.Drive_Mode == Drive_Mode_Double_4_Beats){if(Bipolar_Step_Motor.Direction == Forward_State){//正向步进 A1B2 - B2A2 - A2B1 - B1A1switch(Position){case 0: SET_Motor_A1; CLR_Motor_B1; CLR_Motor_A2; SET_Motor_B2; break;case 1: CLR_Motor_A1; CLR_Motor_B1; SET_Motor_A2; SET_Motor_B2; break;case 2: CLR_Motor_A1; SET_Motor_B1; SET_Motor_A2; CLR_Motor_B2; break;case 3: SET_Motor_A1; SET_Motor_B1; CLR_Motor_A2; CLR_Motor_B2; break;default: System.Error_Handler();}}else{//反向步进 A1B1 - B1A2 - A2B2 - B2A1switch(Position){case 0: SET_Motor_A1; SET_Motor_B1; CLR_Motor_A2; CLR_Motor_B2; break;case 1: CLR_Motor_A1; SET_Motor_B1; SET_Motor_A2; CLR_Motor_B2; break;case 2: CLR_Motor_A1; CLR_Motor_B1; SET_Motor_A2; SET_Motor_B2; break;case 3: SET_Motor_A1; CLR_Motor_B1; CLR_Motor_A2; SET_Motor_B2; break;default: System.Error_Handler();}}//更新位置信息if((++Position) == 4)Position = 0;}//单八拍if(Bipolar_Step_Motor.Drive_Mode == Drive_Mode_8_Beats){if(Bipolar_Step_Motor.Direction == Forward_State){//正向步进 A1 - A1B2 - B2 - B2A2 - A2 - A2B1 - B1 - B1A1switch(Position){case 0: SET_Motor_A1; CLR_Motor_B1; CLR_Motor_A2; CLR_Motor_B2; break;case 1: SET_Motor_A1; CLR_Motor_B1; CLR_Motor_A2; SET_Motor_B2; break;case 2: CLR_Motor_A1; CLR_Motor_B1; CLR_Motor_A2; SET_Motor_B2; break;case 3: CLR_Motor_A1; CLR_Motor_B1; SET_Motor_A2; SET_Motor_B2; break;case 4: CLR_Motor_A1; CLR_Motor_B1; SET_Motor_A2; CLR_Motor_B2; break;case 5: CLR_Motor_A1; SET_Motor_B1; SET_Motor_A2; CLR_Motor_B2; break;case 6: CLR_Motor_A1; SET_Motor_B1; CLR_Motor_A2; CLR_Motor_B2; break;case 7: SET_Motor_A1; SET_Motor_B1; CLR_Motor_A2; CLR_Motor_B2; break;default:System.Error_Handler();}}else{//反向步进 A1 - A1B1 - B1 - B1A2 - A2 - A2B2 - B2 - B2A1switch(Position){case 0: SET_Motor_A1; CLR_Motor_B1; CLR_Motor_A2; CLR_Motor_B2; break;case 1: SET_Motor_A1; SET_Motor_B1; CLR_Motor_A2; CLR_Motor_B2; break;case 2: CLR_Motor_A1; SET_Motor_B1; CLR_Motor_A2; CLR_Motor_B2; break;case 3: CLR_Motor_A1; SET_Motor_B1; SET_Motor_A2; CLR_Motor_B2; break;case 4: CLR_Motor_A1; CLR_Motor_B1; SET_Motor_A2; CLR_Motor_B2; break;case 5: CLR_Motor_A1; CLR_Motor_B1; SET_Motor_A2; SET_Motor_B2; break;case 6: CLR_Motor_A1; CLR_Motor_B1; CLR_Motor_A2; SET_Motor_B2; break;case 7: SET_Motor_A1; CLR_Motor_B1; CLR_Motor_A2; SET_Motor_B2; break;default:System.Error_Handler();}}//更新位置信息if((++Position) == 8)Position = 0;}}

电机转一圈的脉冲次数也不同

如果是四拍,则步进电机转一圈需要这样的四拍48次

如果是八拍,则转一圈需要这样的八拍96次

//定义结构体类变量Bipolar_Step_Motor_t Bipolar_Step_Motor = {Stop_State,Forward_State,Speed_6,0,//Drive_Mode_Single_4_Beats,Drive_Mode_Double_4_Beats,//Drive_Mode_8_Beats,0,(uint8_t)48, //4拍,一圈转48次//(uint8_t)96, //8拍,一圈转96次Direction_Adjust,Speed_Adjust,Step_One_Pulse};

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。