如何驱动5V步进电机

作者:白雪 | 创建时间: 2023-04-14
电子工程师项目里经常遇到要用到步进电机的时候,步进电机可以比较精确的控制步数。那么如何驱动步进电机那?小编下面将自己的与大家共享。...
如何驱动5V步进电机

操作方法

了解步进电机 简单的说就是通过给步进电机的脉冲控制步进电机旋转的角度,然后达到自己控制的要求。 原理方面此处不多说,自己网上搜索即可。

电路接法 步进电机需要的驱动电流很大,因此直接使用单片机往往管脚电流不够,加上一般3.3V的单片机也无法驱动5V的步进电机,因此需要电路转换。 常用的ULN2003芯片驱动步进电机。ULN2003就是起到了电流放大作用,也使得驱动电压变成了5V。除了用ULN2003也可以自己用三极管搭建电路,原理与ULN2003内部结构类似。

了解相序 也就是步进电机要运转时,如何给脉冲,让电机连续运动。 ps:如果给错脉冲可能左转几下又转回来。下图就是小编电机的相序。

软件的实现  使用STM32F103控制电机 下面是正转翻转的编码 根据技术要求。如图用的单双八拍。 unsigned char F_Rotation[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09} ;  //FAN unsigned char B_Rotation[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08} ;  //ZHENG 此函数两个参数,第一个参数是圈数。第二个参数是方向也就是选择正转和翻转 void motorNCircle(int n,bool position) { int i=0; int  j=0; int k=0; for(j=0;j<n;j++) { for(i=0;i<64*8;i++) { for(k=0;k<8;k++) { if(TRUE == position) SetMotor(F_Rotation[k]); else SetMotor(B_Rotation[k]); Delay(20000); } } } } 下面就是SetMotor函数,根据传的数据不同,控制的4个IO pin输出不同。 void SetMotor(unsigned char InputData) { if(InputData & 0x08) { GPIO_ResetBits(GPIOC, GPIO_Pin_6 ); } else { GPIO_SetBits(GPIOC, GPIO_Pin_6); } if(InputData & 0x04) { GPIO_ResetBits(GPIOC, GPIO_Pin_7 ); } else { GPIO_SetBits(GPIOC, GPIO_Pin_7); } if(InputData & 0x02) { GPIO_ResetBits(GPIOC, GPIO_Pin_8 ); } else { GPIO_SetBits(GPIOC, GPIO_Pin_8); } if(InputData & 0x01) { GPIO_ResetBits(GPIOC, GPIO_Pin_9 ); } else { GPIO_SetBits(GPIOC, GPIO_Pin_9); } }

如何计算 以28BYJ-48为例,根据技术资料,步距的角度为5.625-64 而且带有减速齿轮是1:64 因此转64乘64个脉冲才是1圈。  因此一个脉冲转过5.625除64=0.08789度。 所以有了下面的循环。 for(j=0;j<n;j++) { for(i=0;i<64*8;i++)       //64*8 { for(k=0;k<8;k++)    //4相单双8拍 { if(TRUE == position) SetMotor(F_Rotation[k]); else SetMotor(B_Rotation[k]); Delay(20000);       //注意这个延时自己去调节。 } }

点击展开全文

更多推荐