原创 步进电机模块

2007-8-21 16:56 6396 9 21 分类: 消费电子
步进电机模块

 










原理图:
点击看大图


两相六线步进电机,步进角7.5度,额定工作电压12V,完全可以使用5V做实验。


以下是引用 gguoqing2006-6-11 15:10:02 的发言:

使用伟纳定做的20CM杜邦头实验连接线,可以很方便的将ME300与步进电机模块连接起来。

http://www.willar.com/shop_view.asp?id=47

在ME300B上使用时,可从J7上引出5V电源到步进电机模块J1上。

将J1(ICE)上的P1.0-P1.3用杜邦头实验连接线连接到步进电机模块J2上。


  
产品详情:

    
http://www.willar.com/shop_view.asp?id=48



以下是本站管理员gguoqing专门编写的演示程序。

C语言范例:
/*******************************************************************
/*                                                                
/* ME300系列单片机开发系统演示程序-步进电机键控正反转实验   
/*                                                                
/* 邮箱: gguoqing@willar.com                                
/* 网站: http://www.willar.com ;                                  
/* 作者: gguoqing                                                
/* 时间: 2006/05/30                                              
/*                                                                
/*【版权】COPYRIGHT(C)伟纳电子 www.willar.com ALL RIGHTS RESERVED
/*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!      
/*                                                                
/******************************************************************/
    
#include <reg51.h>        //51芯片管脚定义头文件
#include <intrins.h>        //内部包含延时函数 _nop_();

#define uchar unsigned char
#define uint   unsigned int

uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};
uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};

sbit   K1    = P1^4;          //正转
sbit   K2    = P1^5;          //反转
sbit   K3    = P1^6;          //停止
sbit   K4    = P1^7;
sbit   BEEP = P3^7;        //蜂鸣器
      
/********************************************************/
/*                                                  
/* 延时t毫秒
/* 11.0592MHz时钟,延时约1ms                                     
/*                                                      
/********************************************************/
void delay(uint t)
{                           
    uint k;
    while(t--)
    {
      for(k=0; k<125; k++)
      { }
    }
}

/**********************************************************/
void delayB(uchar x)     //x*0.14MS
{
    uchar i;
    while(x--)
    {
      for (i=0; i<13; i++)
      { }
    }
}

/**********************************************************/
void beep()
{
    uchar i;
    for (i=0;i<100;i++)
     {
      delayB(4);
      BEEP=!BEEP;                  //BEEP取反
     }
      BEEP="1";                         //关闭蜂鸣器
}

/********************************************************/
/*
/*步进电机正转
/*
/********************************************************/
void   motor_ffw()
{
    uchar i;
    uint   j;
    for (j=0; j<12; j++)             //转1*n圈
     {
     if(K4==0)
         {break;}                         //退出此循环程序
       for (i=0; i<8; i++)          //一个周期转30度
         {
           P1 = FFW[ i ];               //取数据
           delay(15);                  //调节转速
         }
     }
}

/********************************************************/
/*
/*步进电机反转
/*
/********************************************************/
void   motor_rev()
{
      uchar i;
uint   j;
for (j=0; j<12; j++)                //转1×n圈
       {
     if(K4==0)
          {break;}                              //退出此循环程序
         for (i=0; i<8; i++)             //一个周期转30度
         {
           P1 = REV[ i ];                     //取数据
           delay(15);                        //调节转速
         }
       }
}

/********************************************************
*                                                       
*   主程序                                               
*                                                      
*********************************************************/

main()
{
       uchar r,N=5;              //N 步进电机运转圈数
    while(1)
     {  
       if(K1==0)
   {
         beep();
for(r=0;r<N;r++)
          {
    motor_ffw();                  //电机正转
    if(K4==0)
           {beep();break;}     //退出此循环程序
      }
       }
   else if(K2==0)
        {
     beep();
for(r=0;r<N;r++)
          {
        motor_rev();              //电机反转
    if(K4==0)
           {beep();break;}     //退出此循环程序
}
        }
   else  
P1 = 0xf0;
     }
}


汇编语言范例

;/*****************************************************************
;/*                                                                                                                               
;/* ME300系列单片机开发系统演示程序 - 步进电机键控正反转实验
;/*                                                                                                                                
;/*                                                                                                                                
;/* 邮箱:   gguoqing@willar.com                                                                                    
;/* 网站: http://www.willar.com ;                                                                               
;/* 作者: gguoqing                                                                                                     
;/* 时间: 2006/05/30                                                                                                 
;/*                                                                                                                                
;/*【版权】Copyright(C)伟纳电子 www.willar.com All Rights Reserved                          
;/*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!                            
;/*                                                                                                                                 
;/******************************************************************


; 步进电机步进角为 7.5度,一圈 360 度。
; 双四拍工作方式:
; AB-BC-CD-DA (即一个脉冲,转 7.5 度)
; 单双八拍工作方式:
; A-AB-B-BC-C-CD-D-DA (即一个脉冲,转 3.75 度)
; 一个取数工作周期,步进电机转30度
; 步进电机转一圈需要12个取数工作周期
;-------------------------------------------------------
; A组线圈对应 P1.0     (桔色)
; B组线圈对应 P1.1     (棕色)
; C组线圈对应 P1.2     (黄色)
; D组线圈对应 P1.3     (黑色)
;-------------------------------------------------------
          K1   BIT   P1.4      ;步进电机正转
          K2   BIT   P1.5      ;步进电机反转
          K3   BIT   P1.6
          K4   BIT   P1.7      ;步进电机停止转动
        BEEP   BIT   P3.7
;-------------------------------------------------------
            ORG 0000H
            LJMP MAIN
            ORG 0030H
;-------------------------------------------------------
MAIN:
            MOV   SP,#60H
            MOV   P1,#0F0H    ;关闭步进电机,键输入线置高
MAIN1:           
            JB   K1,MAIN2
            ACALL   BEEP_BL    ;步进电机正转
            ACALL   FFW          
MAIN2:           
            JB   K2,MAIN1
            ACALL   BEEP_BL    ;步进电机反转
            ACALL   REV                     
            JMP   MAIN1
;------------------------正转-------------------------           
FFW:
            ;MOV R3,#12          ;7.5度电机正转1圈共12个周期
            MOV   R3,#60          ;转5圈
FFW1:
            MOV R0,#00H
FFW2:
            JB   K4,FFW3          ;终止步进电机运行
            ACALL   BEEP_BL
            JMP   FFW4
FFW3:           
            MOV P1,#0F0H
            MOV A,R0
            ;MOV DPTR,#TABLE_F   ;选择工作方式
            MOV DPTR,#TABLE1
            MOVC A,@A+DPTR
            MOV P1,A
            LCALL DELAY
            INC R0
            CJNE   A,#0FFH,FFW2
            DJNZ R3,FFW1
FFW4:
            MOV P1,#0F0H
            RET
;---------------------------反转--------------------------
REV:
            ;MOV R3,#12          ;7.5度电机反转1圈共12个周期
            MOV   R3,#60          ;转5圈
REV1:
            MOV R0,#00H
REV2:
            JB   K4,REV3           ;终止步进电机运行
            ACALL   BEEP_BL
            JMP   REV4
REV3:
            MOV P1,#0F0H
            MOV A,R0
           ; MOV DPTR,#TABLE_R    ;选择工作方式
            MOV DPTR,#TABLE2
            MOVC A,@A+DPTR
            MOV P1,A
            CALL DELAY
            INC R0
            CJNE   A,#0FFH,REV2
            DJNZ R3,REV1
REV4:
            MOV P1,#0F0H
            RET
           
;-------------------------------------------------------
DELAY:
            MOV R7,#40        ;步进电机的转速
DEL1:       MOV R6,#248
            DJNZ R6,$
            DJNZ R7,DEL1
            RET
;-------------------------------------------------------
DELAY1:
            MOV    R5,#20      ;2S 延时子程序
DEL2:
            MOV    R7,#200
DEL3:
            MOV    R6,#250
            DJNZ   R6,$
            DJNZ   R7,DEL3
            DJNZ   R5,DEL2
            RET
;-------------------------------------------------------
; 单双八拍工作方式
TABLE_F:   ;正转表
           DB   0F1H,0F3H,0F2H,0F6H,0F4H,0FCH,0F8H,0F9H
           DB   0FFH
TABLE_R:   ;反转表
           DB   0F9H,0F8H,0FCH,0F4H,0F6H,0F2H,0F3H,0F1H
           DB   0FFH
;-------------------------------------------------------
; 双四拍工作方式:
TABLE1:
         DB    0F3H,0F6H,0FcH,0F9H   ;正转表
         DB    0FFH   ;正转结束
TABLE2:
         DB    0F9H,0FCH,0F6H,0F3H   ;反转表
         DB    0FFH   ;反转结束
;--------------------------------------------------------
;蜂鸣器响一声子程序
;--------------------------------------------------------
BEEP_BL:
          MOV   R6,#100
   BL1:
          CALL   DEX1
          CPL   BEEP
          DJNZ   R6,BL1
          RET
DEX1:
          MOV   R7,#180
DEX2:
          NOP
          DJNZ   R7,DEX2
          RET
;---------------------------------------------------------
          END




演示程序打包下载

程序包中有简单的正反转演示程序和键控演示程序,分别用汇编和C语言编写,共4个范例:





此内容需要回复才能浏览







步进电机加速启动演示程序:

http://www.willar.com/forum_view.asp?forum_id=18&view_id=8485


四相步进电机:

齿距角: Qz = 2π/ Z    Z --- 转子的齿数

步距角---转子走一步所转过的角度

步距角: Qn = Qz/N = 2π/NZ   N --- 步进电机工作拍数

步进电机转速:

   n = 60×f / N×Z    (转/分)   ; f =脉冲频率(Hz)

对于步距角为7.5度的步进电机而言:

Qn = 7.5度

Qz = Qn×N = 7.5×4=30度 (齿距角)

Z   =   2π/Qz = 360/30 = 12 (转子的齿数)

四相步进电机有三种运行状态:

1、步进电机为四相单四拍运行状态:
当电机绕组通电时序为A-B-C-D时为正转,通电时序为D-C-B-A时为反转。
N = 4
步距角: Qn = Qz/N = 2π/NZ =360/4*12=7.5°
则步进电机转一圈所需步进数: 360°/   7.5°=48 (步进数)

2、步进电机为四相双四拍运行状态:
当电机绕组通电时序为AB-BC-CD-DA时为正转,通电时序为DA-CD-BC-AB时为反转。
N = 4
步距角: Qn = Qz/N = 2π/NZ =360/4*12=7.5°
则步进电机转一圈所需步进数: 360°/   7.5°=48 (步进数)

3、步进电机为四相八拍运行状态。
当电机绕组通电时序为A-AB-B-BC-C-CD-D-DA时为正转,通电时序为DA-D-CD-C-BC-B-BA-A时为反转。
N = 8
步距角: Qn = Qz/N = 2π/NZ =360/8*12=3.75°
则步进电机转一圈所需步进数: 360°/   3.75°=96 (步进数)

http://www.willar.com/forum_view.asp?forum_id=18&view_id=6604

文章评论12条评论)

登录后参与讨论

soni2c_356645017 2014-7-21 11:15

强,就是看不完整啊。

用户377235 2014-6-1 22:00

非常棒!

用户344181 2011-5-31 10:06

好,很好,非常好!谢,谢谢,衷心谢!

用户405056 2010-7-9 11:14

什么?

用户1367325 2009-11-19 20:51

看后很受启发

用户717397 2009-9-8 15:51

很好的文章! 请教下,步进电机的datasheet中的Qz-in是什么意思? 谢谢!

用户112166 2007-10-4 10:11

我是新手啊~`看的迷糊怎么办啊?

用户104276 2007-8-31 00:10

XIEXIE

用户40282 2007-8-26 10:02

hao ,收藏了

用户103241 2007-8-25 11:37

强,就是看不完整啊。

相关推荐阅读
用户533369 2007-08-21 17:00
集成运放芯片资料简介
集成运放芯片资料简介 AD824 JFET输入,单电源,低电压,低功耗,精密四运算放大器 MC33171 单电源,低电压,低功耗运算放大器AD826 低功耗,宽带,高速双运算放大器 MC33172 单...
用户533369 2007-08-21 16:58
A/D转换芯片ADC0832的应用
A/D转换芯片ADC0832的应用ADC0832 是美国国家半导体公司生产的一种8 位分辨率、双通道A/D转换芯片。由于它体积小,兼容性强,性价比高而深受单片机爱好者及企业欢迎, 其目前已经有很高的普...
用户533369 2007-08-21 16:54
关于用2003驱动步进电机的问题
关于用2003驱动步进电机的问题 在仿真的时候,通电后,单片机向2003送送信号,2003的输入端有信号输入,但是输出端不显示有信号输出,为什么会出现这种情况?仿真图如下图所示:程序:ORG     ...
用户533369 2007-08-21 16:53
math.h
math.h C库函数手册---math.h、stdlib.h、string.h、float.h 数学函数,所在函数库为math.h、stdlib.h、string.h、float.hint     ...
用户533369 2007-08-21 16:52
C语言专题——标准库(转)
C语言专题——标准库<math.h> 1 三角函数double sin (double);double cos (double);double tan (double);2 反三角函数do...
我要评论
12
9
关闭 站长推荐上一条 /2 下一条