步进电机驱动

来自Microduino Wikipedia
1183296105@qq.com讨论 | 贡献2015年1月30日 (五) 13:47的版本 视频
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索

目的

本将通过Microduino A4982来控制步进电机,并且焊接步进电机控制底板。

设备

Microduino-CoreSTM32是采用 STM32F103CBT6芯片的ARM开发板,采用独特的Upin7接口,大小与一枚一元硬币差不多大,完全兼容Microduino其他扩展模块。

Microduino-Stepper是一款带转换器和过流保护的 DMOS 微步驱动器,该产品可在全、半、1/4、1/8及1/16步进模式时操作双极步进电动机。

  • 其他硬件设备
    • USB数据连接线 一根
    • 洞洞板
    • 铜柱、螺丝
  • 排针
  • 焊接工具:
    • 电烙铁
    • 焊锡
    • 导线
    • 镊子

原理

步进电机

  • 步进电机分类:
    反应式步进电机(Variable Reluctance ,VR):转子用软磁材料制成,其中没有绕组。结构简单、成本低,步距角可以做得很小,但动态性能较差。由于其综合性价比高,应用广泛。
    永磁式步进电机(Permanent Magnet ,PM): 转子用永磁材料制成,本身就是一个磁源。输出转矩大,动态性能好,转子的极数与定子的极数相同,一般步距角较大,需供给正负脉冲信号。
    混合式步进电机(Hybrid ,HB):综合了反应式和永磁式的优点,输出转矩大,动态性能好,步距角小,但结构复杂,成本较高。
  • 步进电机内部构造如下图:

通过上图可知,A,~A是连通的,B和~B是连通。那么,A和~A是一组a,B和~B是一组b。

不管是两相四线,四相五线,四相六线步进电机。内部构造都是如此。至于究竟是四线,五线,还是六线。就要看A和~A之间,B和B~之间有没有公共端com抽线。如果a组和b组各自有一个com端,则该步进电机六线,如果a和b组的公共端连在一起,则是5线的。

  • 步进电机相关概念:
    相数:产生不同对极N、S磁场的激磁线圈对数。常用M表示。
    拍数:完成一个磁场周期性变化所需脉冲数或导电状态用N表示,或指电机转过一个齿距角所需脉冲数。
    步距角:对应一个脉冲信号,电机转子转过的角位移用θ表示。步距角计算公式:θ=360/(MCZ)。M为控制绕组相数;C为状态系数,C=1时为(单、双)M拍, C=2时为M相2M拍;Z为转子齿数。
    定位转矩:电机在不通电状态下,电机转子自身的锁定力矩(由磁场齿形的谐波以及机械误差造成的).
    静转矩:电机在额定静态电作用下,电机不作旋转运动时,电机转轴的锁定力矩。此力矩是衡量电机体积(几何尺寸)的标准,与驱动电压及驱动电源等无关。
  • 步进电机驱动

不同相的电机有不同的工作方式:

  • 三相步进电机:单三拍、双三拍、三相六拍
  • 四相步进电机:单四拍、双四拍、四相八拍
  • 五相步进电机:单五拍、双五拍、五相十拍

本实验采用二相四线接法,下面以8拍的方式为例加以说明。

八个状态:1、在A与A-正电压,B与B-不给电悬空; 2、在A与A-正电压,B与B-也给正电压;

3、A与A-不给电压悬空,B与B-正电压; 4、A与A-给负电压,B与B-给正电压;

5、A与A-给负电压,B与B-不给悬空; 6、A与A-给负电压,B与B-给负电压;

7、A与A-不给电悬空,B与B-给负电压; 8、A与给正电压,B与B-给负电压;

原理图

本讲采用一个2相6线电机,步进角1.8度,单极驱动方式,相电阻130欧,注意相电阻很大,因此电流很小,比如24v时,静态电流才0.17A,但是力矩挺大的,内部线圈细而密,属于低速,小单流,大力矩型。其外形图如下所示:

信号顺序:1:B-,2:BCOM,3:B+;4:A+,5:ACOM,6:A-,本讲采用2相4线接法,所以1和5号引脚悬空。

原理图如下:

程序

int step=2;
int dir=3;
int EN=4;

void setup() 
{
    pinMode(step, OUTPUT);
    pinMode(dir, OUTPUT);
    pinMode(EN, OUTPUT);
    digitalWrite(EN,HIGH);
    delay(10);
    digitalWrite(EN,LOW);
}
void pulse(int n,int speed)
{
  for(int i=0;i<n;i++)
  {
    int k=(1000000/speed)-1;
    digitalWrite(step,HIGH);
    delayMicroseconds(1);
    digitalWrite(step,LOW);
    delayMicroseconds(speed);
  }
}
void loop() 
{  
   pulse(25600,12800); 
   delay(400);
}

程序说明:函数pulse(int n,int speed)的作用是每秒以speed个脉冲发送n个步进脉冲。

调试

步骤一:按规则大小裁剪洞洞板。 步骤二:确定好Microduino CoreSTM32、排针以及电源转接头底座位置,按原理图焊接电路;

步骤三:连接好电路。

步骤四:复制程序到Maple IDE编译,下载程序。

结果

每隔400ms以12800个脉冲的速度发出25600个脉冲。

视频

视频地址:http://v.youku.com/v_show/id_XODgxNjg0Njg4.html