步进电机控制器 - CSDN
精华内容
参与话题
  • 摘 要: 设计了一种具有多模式的步进电机控制装置,本装置基于STC的一款单片机STC89C52,软件部分由C51编写,包含启停中断程序、转向中断程序、步进电机调速程序以及键盘信号检测与显示程序等设计 ,硬件部分包含...

    本文档作备份用。

    摘 要: 设计了一种具有多模式的步进电机控制装置,本装置基于STC的一款单片机STC89C52,软件部分由C51编写,包含启停中断程序、转向中断程序、步进电机调速程序以及键盘信号检测与显示程序等设计 ,硬件部分包含单片机最小系统电路、步进电机及其驱动电路、显示与按键处理电路等设计。
    关键词: 多模式;步进电机;单片机;显示参数

    1 设计任务与要求

    (1)可控制步进电机的启动与停止、正转与反转
    (2)10 档速度调节
    (3)点动控制
    (4)可显示电机运行参数

    2 设计方案

    2.1总体设计思路

    在该控制装置中由单片机输出电机的各相控制脉冲序列,由ULN2003D驱动模块带动步进电机转动,用按键输入的方式控制电机的工作方式,同时数码管会显示电机运行状态。

    2.2步进电机的控制方式

    采用延时方法进行控制。
    延时方法是在每次换向之后调用一个延时子程序,待延时结束后再次执行换向,这样周而复始就可发出一定频率的CP脉冲或换向周期。延时子程序的延时时间与换向程序所用的时间和,就是CP脉冲的周期。

    2.3 键盘的工作方式

    矩形键盘编程工作在键盘扫描输入方式,其原理为在某一时刻只让一条列线处于低电平,其余列线均处于高电平,则当这一列有键按下时,该键所在的行电平将会由高电平变为低电平,可判定该列相应的行有键按下。读入键盘时具有软件延时去抖动功能,避免误触发。

    3 硬件设计

    3.1 单片机最小系统电路的设计

    控制芯片采用STC89C52,是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。由于单片机内部的资源丰富,性价比高,能够满足该设计的要求,而且减少了硬件电路的设计,提高了工作效率。单片机的外部引脚定义如图所示:
    在这里插入图片描述

    复位电路采用手动按键复位方式。当接通电源的瞬间,RST端与VCC同电位,随着电容上的电压逐渐上升,RST端的电压逐渐下降,于是在RST端便形成了一个正脉冲,只要该正脉冲的宽度持续两个机器周期的高电平,就可实现系统自动复位。
    时钟电路采用的是内部时钟方式。晶振电路是由两个30PF的电容和一个12M的晶体振荡器组成的,两端分别跨接在单片机的XTAL1和XTAL2的两个端口上。
    在这里插入图片描述

    3.2 显示与按键处理电路的设计

    为实现交互,该系统设计扩展了独立键盘、4x4按钮矩阵键盘和8段LED数码管,可手动直接操作该控制装置。
    系统上电后,通过独立键盘输入步进电机的启停和转向,矩阵键盘控制电机转速,由LED管显示步进电机的转速和转向。键盘的输入和LED管的输出由8279进行控制,减少单片机工作负担。
    数码管采用74LS138进行硬件译码,并进行动态显示,其原理为所有LED的段选线共同连接在一起共用一个 8位I/O口,而每个LED的位选分别由一根相应的I/O口线控制。因此必须采用动态扫描显示方式,每一个时刻只选通其中一个LED,同时在段选口送出该位LED的字型码。
    矩形键盘编程工作在键盘扫描输入方式,其原理为在某一时刻只让一条列线处于低电平,其余列线均处于高电平,则当这一列有键按下时,该键所在的行电平将会由高电平变为低电平,可判定该列相应的行有键按下。读入键盘时具有软件延时去抖动功能,避免误触发。

    3.3 步进电机及其驱动电路的设计

    步进电机采用28BYJ-48,该电机为四相五线制,是可将电脉冲转化为角位移的执行机构。当步进驱动模块接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的步进角。通过控制脉冲个数可以控制角位移量,从而达到准确定位的目的;通过控制脉冲频率可以控制电机转动的速度和加速度,从而达到调速的目的。
    在这里插入图片描述
    每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,四相步进电机可以在不同的通电方式下运行,常见的通电方式有四拍,双四拍,八拍,本设计采用八拍。
    在这里插入图片描述
    步进电机的驱动模块采用ULN2003D,是高耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成,每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。
    在这里插入图片描述

    3.4电气原理图

    在这里插入图片描述

    4 软件设计

    本实验中设立电机启停标志位和转向标志位,采用两个外部中断来改变标志位,主程序识别到不同的标志位会改变电机的运行模式,同时采用定时器中断键盘扫描的方式读取用户输入的速度值,并在数码管中显示。

    4.1 流程图

    在这里插入图片描述

    4.2 源程序

    #include <reg52.h>
    typedef unsigned char uchar;
    uchar direction = 0;  //0为正转,1为反转
    uchar onoff = 0; //关为0,开为1
    uchar index = 0; //通过index指示电机转动,八拍
    uchar tmp;
    uchar keyval;
    sbit P14=P1^4;      
    sbit P15=P1^5;     
    sbit P16=P1^6;      
    sbit P17=P1^7; 
    sbit P22=P2^2; 
    sbit P23=P2^3; 
    sbit P24=P2^4;      
    uchar code table[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};    //数字0~9的段码 
    unsigned char code beatCode[ ] = { 0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};
    unsigned char code beatCode_r[ ] = { 0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};
    
    void delay(unsigned int i)//延时
    {
     while(--i);                
    }
     void led_delay(void)//数码管动态扫描延时     
     {
       uchar j;
    for(j=0;j<200;j++)
    ;
      }
    
    void display(uchar k)//按键值的数码管显示子程序
    {
       P22=1; 
       P23=1;
       P24=1;           
       P0=table[k/10];       
       led_delay();       
       P22=0; 
       P23=1;
       P24=1;    
       P0=table[k%10];      
       led_delay();         
     }
     void delay20ms(void)//软件延时子程序   
    {
       uchar i,j;
    for(i=0;i<100;i++)
    for(j=0;j<60;j++)
               ;
     }
    
    void main(){
    
        /* LED */
        P0 = 0xff;
        /* 初始化中断 */
        EA = 1;
        EX0 = 1; //要用到的中断是两个外部中断和定时器中断0
        IT0 = 1;
        EX1 = 1;
        IT1 = 1;
    	 /* 定时器0 */
    	ET0=1;                          
        TMOD=0x01;            
        TH0=(65536-10000)/256;  //65536-500
        TL0=(65536-10000)%256;  
        TR0=1;                
        keyval=0x00; 
    
    while(1){
       display(keyval);
    
    if(onoff==1){
    
     if(direction==0){
     tmp = P1;			  //读取端口值
     tmp = tmp & 0xF0;	  //高4位不变
     tmp = tmp | beatCode[index]; //低四位变为相应节拍(低四位与电机相连)
     P1 = tmp;		      //输出时序
     
     index++;			  
     index= index & 0x07; //准备输出下一节拍
     delay(keyval*40);	//max speed standard:150 延迟越小(脉冲间隔越小)速度越快
        }
     else if(direction==1){
     P2=0X00; //NEW
     tmp = P1;
     tmp = tmp & 0xF0;
     tmp = tmp | beatCode_r[index];
     P1 = tmp;
     index++;
     index= index & 0x07;
     delay(keyval*40);  	
       }
    
      } 
     }
    } 
    void Stop()interrupt 0 //k3  电机启停
    {
        onoff++;
        if (onoff > 1)
            onoff = 0;
    }
    void int1()interrupt 2 //k4  按一下控制电机反转,再按正转
    {
        direction++;
        if (direction > 1)
            direction = 0;
    }
    
    void time1_interserve(void) interrupt 1 //键盘扫描中断(定时器0) 
      {
         TR0=0;                 
         P1=0xf0;                
     if((P1&0xf0)!=0xf0)      
        delay20ms();           
     if((P1&0xf0)!=0xf0)      
       {
          P1=0xfe;            
          if(P14==0)       
                 keyval=1;           
               if(P15==0)            
                 keyval=2;           
               if(P16==0)             
                 keyval=3;          
               if(P17==0)           
                 keyval=4;           
     
     
               P1=0xfd;             
         if(P14==0)       
                 keyval=5;         
               if(P15==0)         
                 keyval=6;       
               if(P16==0)     
                 keyval=7;        
               if(P17==0)    
                 keyval=8;  
     
               P1=0xfb;      
       if(P14==0)     
                 keyval=9;   
               if(P15==0)      
                 keyval=10;    
               if(P16==0)    
                 keyval=11;       
               if(P17==0)        
                 keyval=12;   
        
               P1=0xf7;     
       if(P14==0)         
                 keyval=13;          
               if(P15==0)           
                 keyval=14;         
               if(P16==0)         
                 keyval=15;        
               if(P17==0)          
                 keyval=16;        
           }
         TR0=1;                   
         TH0=(65536-10000)/256;  
         TL0=(65536-10000)%256;   
     }
    

    5 调试中出现的问题及解决的办法

    5.1 步进电机抖动但不旋转

    推测可能的原因:
    1.两个脉冲间隔太小导致力矩变小无法旋转:当步进电机转动时,电机各相绕组的电感将形成一个反向电动势;频率越高,反向电动势越大。在它的作用下,电机随频率(或速度)的增大而相电流减小,从而导致力矩下降。
    解决办法:增加延时
    2.电机的通电时序表有错误:四相步进电机驱动方式有四拍,双四拍,八拍,通电顺序错误会导致电机运行异常
    解决办法:检查时序表
    3程序问题
    解决办法:将单独的控制电机转动的程序提取测试。若正常则扩大程序提取范围,若异常则进行修改
    4电机损坏
    解决办法:当上述原因不成立时,考虑更换电机

    根据上述罗列顺序进行测试,发现为程序以及时序表问题,查阅资料进行表的修改,并重新编写程序后进行测试,电机运转正常。

    5.2外部中断无法控制启停

    推测可能的原因:

    1. 外部中断失效
    2. 解决办法:编写一段能在数码管中显示数值的中断测试程序,若触发中断后显示数值,该中断触发正常
    3. 程序编写错误
      解决办法:重新检查是否正常初始化和开放中断,外部中断是否改变标志,主程序是否正常识别标志

    按照上述罗列顺序进行测试,发现中断运行正常,则归类为程序错误,排查错误时发现将语句onoff==1写为onoff=1,导致程序不能正常运行。

    6 参考资料

    [1]高玉芹.单片机原理与应用及C51编程技术[M].北京:机械工业出版社,2017.
    [2]张元良.单片机开发技术实例[M].北京:机械工业出版社,2010.

    展开全文
  • 步进电机控制器总结

    千次阅读 2007-08-01 13:05:00
    步进电机控制器总结一、整体框架:系统在通信方式时支持主从控制二、系统原理1、 控制信号模块电机控制信号:EN——>电机使能信号,只有当该信号有效的时候,步进电机才会工作DIR/CP+——>此信号接到单片机的外部...
     
    

     步进电机控制器总结

    一、整体框架:

    系统在通信方式时支持主从控制

    二、系统原理

    1 控制信号模块

    电机控制信号

    EN——>电机使能信号,只有当该信号有效的时候,步进电机才会工作

    DIR/CP+——>此信号接到单片机的外部中断0引脚,当选择“方向加脉冲”的方式时,此信号对应为方向信号,若为0是顺时针转,那么为1就是逆时针转,当选择“正负脉冲”的方式时,此信号对应正脉冲,一但该信号有效(低电平触发)就进入中断0,电机顺时针(并不一定,根据程序及电机而定)转一步。

    CP/CP-——>此信号接到单片机的外部中断1引脚,当选择“方向加脉冲”的方式时,此信号对应为脉冲信号,用户给一个脉冲,电机就按确定好的方向转一步,当选择“正负脉冲” 的方式时,此信号对应负脉冲,一但该信号有效(低电平触发)就进入中断1,电机逆时针(并不一定,根据程序及电机而定)转一步。

    控制方式选择:

     串口通信方式——> S_DC=1;由单片机串口进行通信,按约定发送控制信号,通信协议如下:

          ;上位机发给下位机

          ; AA A5 55 ID CMD RC SPEED CP1_Z CP2_F SUM            

          ;ID:本机地址  

             ;CMD:指令  F0---发数据   F1-----询问是否可以发数据

             ;RC:接收数据长度  RC->SUM (5)

             ;SPEED:最高位可代表方向,也可代表单位 (依据K3的值而定)

             ;CP1_ZCP1 /CP+     (依据K3的值而定)

             ;CP2_F: CP2 /CP-        (依据K3的值而定)

             ;--------------------------------------------------

             ;|k3          |         0       |        1           |

             ;|            |   unit_speed      |   dir_speed         |

             ;|            |    cp+         |       cph           |

             ;|            |    cp-          |       cpl           |

             ;--------------------------------------------------

             ;AA A5 55 FF F0 05 80 02 06 7D

             ;AA A5 55 FF F1 00 F1

     

    ;下位机回送的数据

          ;55 A5 AA ID CMD TC SUM

             ;CMD:  F0---正在走   F1----可发数据

             ;TC=0

     直接脉冲控制方式:S_DC=0;该方式下若dir_cp=1则代表“方向脉冲”方式,否则就是“正负脉冲方式”

    电机工作方式选择:

    ;  0       0     0              单三

    ;  0       0     1              双三

    ;  0       1     0              六拍

    ;  0       1     1              单五

    ;  1       0     0              单四

    ;  1       0     1              双四

    ;  1       1     0              八拍1

    ;  1       1     1              八拍2

    2、电源系统

    单片机电源:

     

    步进电机由外部供电

     

    3、串口通信模块

    MAX232实现单片机与串行接口的电平转换,并为步进电机的驱动电路提供+10v电压

    4、步进电机驱动模块

    驱动电路原理:由单片机的输出引脚(p1.0~p1.4)输出控制信号,针对此图,当p1.4输出低电平时,晶体管截止,n沟道场效应管的GS两端有电压,于是场效应管DS两端产生电流,该电流流经步进电机的一个线圈。通过给步进电机的每相送相应电流来驱动步进电机。途中的二极管是续流用的,由于电感电流不能突变,当外部给线圈断流时,线圈上仍有电流,二极管就是用来消耗这些电流!

    三、软件设计

    主程序:

    外部中断模块

     

     

     

     

     

     

     

     

     

     

     

     


    定时器0中断模块:

    使用定时器0来计时,每当定时器溢出,进入定时器0的中断服务程序,在中断服务程序中,改变步进电机的状态,一次溢出步进电机走一步,所以通过改变定时器的初值可以控制步进电机的速度。改变发送给步进电机的脉冲数来控制步进电机走动的距离!详细说明见通信协议。

    以下是定时器0的流程图

     

     

     

     

     

    tcp_dir子模块

    串口通信模块:

    发送:

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    接收:

    四、调试过程记录:

    1、复位后先按k3,相当于开放了两个中断,所以如果k1没用到,就算k3松开以后(只开放中断k2),第一次按下k1还是会进中断。

        解决:当K31时,CLR EX0

    2、先按K1,再按K3P1,0对应的灯会亮

        解决:尚未找到原因

    3S_DCFIRST定义在同一个位

       已解决

    4、定时器0方式没有设置成16

       已解决

    5、发送程序的跳转错了,导致一次只能收到一个数据

       已解决

    6、在步进电机走动的过程中如果改变方式将导致状态不可预测

       解决:规定方式的设置只能在控制器上电以前,这样连同第二个问题一起解决

    7、调试过程中用到的数据

       AA A5 55 FF F0 05 0F 02 FF 05

       AA A5 55 FF F0 05 00 01 16 0C

       AA A5 55 FF F0 05 00 36 16 41

       AA A5 55 FF F0 85 00 36 16 C1

       AA A5 55 FF F0 05 80 02 06 7D

       AA A5 55 FF F1 00 F1

    五、系统说明

    1、方式的设置必须在系统上电以前

    2、通信方式时,一次通信能走的最大距离65535个步距角

       

    展开全文
  • 单片机控制步进电机

    万次阅读 多人点赞 2019-06-06 19:07:38
    用单片机控制步进电机正转 反转 加速 减速;由LCD1602实时显示步进电机的状态;F-正转,B-反转;数字越大,转速越大; 仿真原理图如下: MCU和LCD1602显示模块: ULN2803驱动和步进电机模块: C语言代码如下...

    简介:
    用单片机控制步进电机正转 反转 加速 减速;
    由LCD1602实时显示步进电机的状态;F-正转 B-反转;数字越大,转速越大;
    仿真原理图如下:
    MCU和LCD1602显示模块:
    在这里插入图片描述
    ULN2803驱动和步进电机模块:
    在这里插入图片描述
    C语言代码如下:

    /*-----------------------------
    FileName: StepperMotor.h
    Function: 函数头文件
    Author: Zhang Kaizhou
    Date: 2019-6-6 17:59:39
    ------------------------------*/
    #include <reg52.h>
    #include <string.h>
    #define uchar unsigned char
    #define uint unsigned int
    #define Factor 5 // 转速控制常数	
    
    /*LCD1602端口设置*/
    sbit lcdrs = P1^0;
    sbit lcdrw = P1^1;
    sbit lcden = P1^2;
    
    /*步进电机驱动器端口设置*/
    sbit direcChange = P1^3; // 方向翻转
    sbit speedUp = P1^4; // 加速
    sbit slowDown = P1^5; // 减速
    
    /*主函数声明*/
    void keyScan();
    void execute();
    
    /*LCD1602显示相关函数声明*/
    void LCDInit();
    void displayInit();
    void display(uchar oper, uchar dat);
    void writeCommand(uchar command);
    void writeData(uchar dat);
    void delay(uchar xms);
    
    /*-------------------------------------------
    FileName:main.c
    Function: MCU控制步进电机
    Description:控制步进电机正转 反转 加速 减速;
    由LCD1602实时显示步进电机的状态;
    F-正转 B-反转;数字越大,转速越大;
    ---------------------------------------------
    Author: Zhang Kaizhou
    Date: 2019-6-6 17:56:41
    -------------------------------------------*/
    #include "StepperMotor.h"
    
    uchar code pulseTable0[] = {0x08, 0x04, 0x02, 0x01, 0x01, 0x02, 0x04, 0x08}; // 一相励磁(同一时刻只有一个线圈通电,旋转角1.8度)
    uchar code pulseTable1[] = {0x0c, 0x06, 0x03, 0x09, 0x09, 0x03, 0x06, 0x0c}; // 二相励磁(同一时刻有两个线圈通电,旋转角1.8度)
    uchar code pulseTable2[] = {0x08, 0x0c, 0x04, 0x06, 0x02, 0x03, 0x01, 0x09,
    						    0x09, 0x01, 0x03, 0x02, 0x06, 0x04, 0x0c, 0x08}; // 一-二相励磁场(一二相交替励磁,旋转角0.9度)
    uchar speed = 0, startPos = 0; // 默认正转
    bit oper = 0/*操作数*/, direcFlag = 0; // 初始状态为正向
    
    void main(){
    	LCDInit(); // LCD1602显示初始化
    	displayInit();
    	while(1){
    		keyScan(); // 按键扫描
    		display(0, direcFlag);
    		display(1, speed);
    		execute();
    	}
    }
    
    /*按键扫描*/
    void keyScan(){
    	if(!speedUp){ // 加速
    		delay(5);
    		if(!speedUp){
    			if(speed < 4){
    				while(!speedUp);
    				speed++;
    			}else{
    				while(!speedUp);
    				speed = 3;
    			}
    		}
    	}
    	if(!slowDown){ // 减速
    		delay(5);
    		if(!slowDown){
    			if(speed != 0){
    				speed--;
    			}else{
    				while(!slowDown);
    				speed = 0;
    			}
    		}
    	}
    	if(!direcChange){ // 方向翻转
    		delay(5);
    		if(!direcChange){
    			while(!direcChange);
    			direcFlag = ~direcFlag;
    		}
    	}
    }
    
    /*步进电机控制执行函数*/
    void execute(){
    	uchar i, j;
    	startPos = (direcFlag == 0) ? 0 : 4; // 方向控制
    	for(i = startPos; i <= (startPos + 4); i++){
    		P2 = pulseTable0[i];
    		for(j = 0; j < (speed + 1) * Factor; j++){ // 用延时来控制脉冲输出的频率,从而控制步进电机转速
    			delay(10);
    		} 
    	}
    }
    
    /*-----------------------------
    FileName:display.c
    Function: LCD1602显示函数
    Author: Zhang Kaizhou
    Date: 2019-6-6 17:58:42
    ------------------------------*/
    #include "StepperMotor.h"
    
    uchar code table0[] = {"Direction:"}; // 每行的字符数据
    uchar code table1[] = {"Speed:"};
    uchar code table2[] = {"1234"};
    uchar code table3[] = {"FB"}; // F-正向 B-反向
    
    /*初始化LCD1602的设置*/
    void LCDInit(){
    	lcden = 0; // 拉低使能端,准备产生使能高脉冲信号
    	writeCommand(0x38); // 显示模式设置(16x2, 5x7点阵,8位数据接口)
    	writeCommand(0x0c); // 开显示,不显示光标
    	writeCommand(0x06); // 写一个字符后地址指针自动加1
    	writeCommand(0x01); // 显示清零,数据指针清零
    }
    
    /*LCD上电界面*/
    void displayInit(){
    	uchar i;
    	writeCommand(0x80); // 将数据指针定位到第一行首
    	for(i = 0; i < strlen(table0); i++){
    		writeData(table0[i]);
    		delay(5);
    	}
    	
    	writeCommand(0x80 + 0x40); // 将数据指针定位到第二行首
    	for(i = 0; i < strlen(table1); i++){
    		writeData(table1[i]);
    		delay(5);
    	}
    }
    
    /*LCD显示函数*/
    void display(uchar oper, uchar dat){
    	if(oper == 0){ // 方向显示
    		if(dat == 0){ // 正向
    			writeCommand(0x80 + strlen(table0)); // 数据指针定位到第一行空闲处
    			writeData(table3[0]);
    		}else if(dat == 1){ // 反向
    			writeCommand(0x80 + strlen(table0)); // 数据指针定位到第一行空闲处
    			writeData(table3[1]);
    		}
    	}
    	if(oper == 1){ // 速度显示
    		writeCommand(0x80 + 0x40 + strlen(table1)); // 数据指针定位到第二行空闲处
    		writeData(table2[dat]);
    	}
    }
    
    /*写指令函数*/
    void writeCommand(uchar command){
    	lcdrs = 0; // 命令选择
    	lcdrw = 0;
    	P0 = command;
    	delay(5);
    	
    	lcden = 1; // 产生一个正脉冲使能信号
    	delay(5);
    	lcden = 0;
    }
    
    /*写数据函数*/
    void writeData(uchar dat){
    	lcdrs = 1; // 数据选择
    	lcdrw = 0;
    	P0 = dat;
    	delay(5);
    	
    	lcden = 1;
    	delay(5);
    	lcden = 0;
    }
    
    /*延时函数*/
    void delay(uchar xms){
    	uint i, j;
    	for(i = xms; i > 0; i--)
    		for(j = 110; j > 0; j--);
    }
    
    展开全文
  • 控制器硬件:一体化步进电机控制器 modbus-rtu-485控制器 云台硬件:北京江云光电 DZY200RA100 电动旋转云台 1,控制接线,连接 RS485通信接线: USB转485的 T/R+- -------A, T/R+ -----B, GND----G , ...

    控制器硬件:一体化步进电机控制器 modbus-rtu-485控制器

    云台硬件:北京江云光电 DZY200RA100  电动旋转云台


    1,控制接线,连接


    RS485通信接线:  USB转485的 T/R+- -------A,    T/R+ -----B,  GND----G ,  如下图:


    控制器输入部分  I4,  是控制器开关的设计,  低电平使能,   这里 直接短接到0电平。


    2, 电机接线:


    联英精机 ZX110-60





    联英精机电机参数,  步距角1.8°, 传动比90:1,   也就是每一个脉冲,转台旋转   1.8÷90=0.02°,  0.02°没步是在没有细分的情况下, 如果8细分,则是0.0025°/步。


    此接线图与联英精机步进电机平台的电机接口一样。


    3,控制器测试

    用控制器卖家的测试软件测试:


    控制器默认波特率9600.





    如上图参数配置, 在联英精机云台下,   单次运行一次,旋转360度, 时间为1分钟。

    如果将速度改为3600,  则旋转一周的时间为6秒中,  速度为:  60°/s


    在江云光电Y200RA60精密型电控旋转云台平台下,  速度改为3600,距离为 360, 单次运行一次,云台实际旋转 90度,时间为6s。

    在江云光电Y200RA60精密型电控旋转云台平台下,  速度改为3600,距离为 1440,单次运行一次,云台实际旋转360度,时间为24s。


    基本参数说明:

    细分:细分越大,电机运行越平滑。通过这个参数就可以知道电机转1圈需要的脉冲个数。比如细分数为1,那么电机需要200个脉冲(对应步距角为1.8度的情况)转1圈。8细分,就是1600个脉冲1圈。其他细分情况下,以此类推。

       步距角:电机固有参数。有1.8  0.9等。

    启动频率:由静止突然启动并进入不失步的正常运行所容许的最高频率。单位HZ

    加减频率:从启动速度慢慢加速到运行速度的一个频率;

    螺距:电机转1圈所对应平台移动的距离。默认设置为1;

    正反限位信号设置: 可设置为1—5,对应1—5路输入口;

    启动信号:可设置为1—5(对应IN1-IN5),用来外部启动工程。

    停止信号:可设置为1—5(对应IN1-IN5),用来外部停止工程。

    往返次数:也就是设置控制方式3的运行次数。

          为0,无限循环;为1,循环1次,以此类推。

    测试运行速度,单位是转/每分钟;一般不超过600转/每分钟

    测试运行距离,单位可以看做是圈或mm等。

                         比如螺距为1,运行距离为1,则对应电机转1圈;

           比如螺距为1,运行距离为2,则对应电机转2圈;

    运行方向: 即本步运行的方向。(0正转,1反转)

    运行速度:即本步电机运行的速度,单位转/每分钟。

    运行距离:即本步电机运行的距离。


    4,  串口测试代码



    1,读取2个寄存器40001H(0x00),40002H(0x01)中的数据内容。即步距角 细分值


    发送: 01 03 00 00 00 02 C4 0B
    接收: 01 03 04 00 B4 00 08 BB D3

    解析:   步距角: 00 B4 h = 180 度(放大了100倍)
               细分: 00 08 h =  8步

    2,控制电机单次运行的命令
       
       发送:01 05 00 07 FF 00 3D FB


    3,  读取细分(0x01)和启动频率(0x02)

    发送:01 03 00 01 00 02 95 CB
    接收:01 03 04 00 08 00 32 FA 24

    解析:      细分:00 08 h =  8步
            启动频率:00 32 h =  50

    4,读取控制器ID号, 40017(0x11)
    发送:01 03 00 10 00 01 85 CF
    接收:01 03 02 00 01 79 84

    解析:   控制器ID号:00 01 h =  1号
            

    5,读取测试速度 ,  40009(0x09)

    发送:01 03 00 08 00 01 05 C8
    接收:01 03 02 00 C8 B9 D2

    解析:   测试速度:00 C8 h =  200转/min = 3.33转/s

    6,读取测试距离 ,  40010(0x0a),40011(0x0b),

    发送:01 03 00 09 00 02 14 09  
    接收:01 03 04 00 64 00 00 BB EC

    解析:   测试距离:00 64. 00 00 h = 100.0

    7,读取测试方向 ,  40012(0x0c)

    发送:01 03 00 0B 00 01 F5 C8  
    接收:01 03 02 00 00 B8 44  

    解析:   测试方向:00 00 h = 0 方向 (正转)


    8,读取工程号开始 40025(0X19)到 最后运行方式切换 40076(0X4C)共52个参数。

    发送:01 03 00 18 00 34  C4 1A

    接收:01 03 68 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01
    00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 25 80 00 00
    00 00 73 34
    解析:

    40025                      工程号:  00 01 h =  1 号
    40026     工程总步数(有效值1--33):  00 00 h =  0 步
    40027
    40028
    40029
    40030
    40031

    40040     设定当前步号(有效值1--33):00 01 h =  1 号
    40046     第4路输入信号状态显示    :00 01 h =  1  --ON
    40058                往返运行的次数:00 01 h  

    40074 40075              波特率:     25 80 h = 9600

    其他都为 0。



    展开全文
  • Arduino(2560)控制两个步进电机通过控制器

    万次阅读 多人点赞 2018-05-01 14:41:33
    Arduino 2560控制两个步进电机用arduino和步进电机控制器驱动两个步进电机,具体的接线过程和怎样连接都在图片上。准备工具:两个步进电机(我用的是J42):Arduino板(我用的是2560):步进电机控制器:电源适配器:...
  • 步进电机控制

    千次阅读 多人点赞 2016-10-02 15:44:09
    首先,什么是步进电机: 然后是步进电机的分类: 这里重点讲一下二相和四相电机: 两相八线步进电机有两种接法: 我们怎么让步进电机动起来: 然后我们讲单片机控制方式: 一般的小功率步进电机,用...
  • 51单片机控制二相四线步进电机

    千次阅读 2020-09-09 10:37:11
    最受欢迎的是两相混合式步进电机,约占97%以上的市场份额,其原因是性价比高,配上细分驱动后效果良好。该种电机的基本步距角为1.8°/步,配上半步驱动后,步距角减少为0.9°,配上细分驱动后其步距角可细分达...
  • 步进电机原理和驱动

    千次阅读 2014-06-25 01:49:02
    当步进驱动接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时...
  • 大家都知道步进电机是将电脉冲信号转变为角位移或线位移的开环控制步进电机件,可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调...
  • Verilog HDL 之 步进电机驱动控制  步进电机的用途还是非常广泛的,目前打印机,绘图仪,机器人等等设备都以步进电机为动力核心。那么,下面我们就了解下什么是步进电机,它是怎么控制的。 一、步进电机相关知识...
  • 步进电机转速与脉冲频率的关系

    万次阅读 2017-08-08 00:09:37
    摘要: 1、何为步进电机和步进驱动器? 步进电机是一种与专门用于速度和位置精确控制的特种电机,它旋转是以固定的角度(称为“步距角”  )一步一步运行的,故称步进电机。其特点是没有累积误差,接收到控制器发来的...
  • 步进电动机闭环控制系统

    千次阅读 2017-08-07 14:04:24
    步进电机的闭环控制系统,以前好多的步进电机都是开环控制的,它的这个轴端没有编码,但是随着我们技术的发展呢,好多厂家都开始生产这个带编码步进电机了,那么它有什么好处呢?好处就是可以进行闭环控制了。如果...
  • 由于最近的项目需要用到简单的单片机控制步进电机,所以专门研究一下步进电机的程序。#include<Stepper.h> //引用官方步进电机库文件 #define STEPS 100 //定义步进电机每转的步数,(个人理解,相当于每转多
  • 步进电机控制系统的Simulink仿真模型

    千次阅读 热门讨论 2019-01-17 18:22:40
    电机模型如下: 双击示波
  • 单片机控制步进电机-电路连接

    千次阅读 多人点赞 2019-02-22 21:26:14
    单片机控制步进电机-线路连接 说明:如何利用单片机去控制步进电机?本案例讲解的内容是硬件连接部分,采用常用的电子器件去实现单片机控制步进电机的功能。后续会分别讲解单片机程序,S曲线生成方法,上位机等...
  • 分享一开源的闭环步进电机控制器

    千次阅读 2018-12-24 13:50:58
    最近一朋友告诉我有一个开源的闭环步进电机控制器,开放原理图和源码,不过代码是C++写的,对于习惯了C语言编程的可能需要花较多时间理清代码框架。这里涉及到磁编码器、PID算法调试,可以好好学习练练手。 官网...
  • 步进电机失步(丢步)的原因和对策步进电机可以根据脉冲数和脉冲频率来对电机实现开环控制位置和速度,是一种便宜、简单好用的控制类电机,在自动化控制领域得到越来越广泛的应用。但由于步进电机不是闭环控制,选型...
  • 步进电机基础及工作原理

    万次阅读 2017-10-18 21:14:48
    步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于控制脉冲信号的频率和脉冲数。 脉冲数越多,电机转动的角度越大。 脉冲的频率越高,电机转速越快,...
  • 步进驱动基础及工作原理

    千次阅读 2017-10-18 21:17:54
    步进电机的转动原理可以得出,要使步进电机正常运行,必须按规律控制步进电机的每一相绕组得电。步进驱动接收外部的信号是方向信号(DIR)和脉冲信号(CP)。另外步进电机在停止时,通常有一相得电,电机的转子...
  • 步进电机的线速度控制

    万次阅读 2017-08-08 11:16:50
    AVR446:步进电机的线速度控制特征: 步进电机线速度控制 -控制加速、减速、最大速度运行的步数 通过一个定时器驱动 全步/半步驱动模式 支持所有带16位定时器的AVR设备 演示程序使用的是处理器ATmega48(8位AVR...
1 2 3 4 5 ... 20
收藏数 4,035
精华内容 1,614
热门标签
关键字:

步进电机控制器