龙空技术网

电机详解三

嵌入式悦翔园 196

前言:

而今兄弟们对“en是什么接口”大体比较关注,你们都需要知道一些“en是什么接口”的相关文章。那么小编在网上收集了一些对于“en是什么接口””的相关资讯,希望大家能喜欢,我们快快来学习一下吧!

硬件连接图

注意:上图为共阳极接法,实际连接参考总体线路连接。

驱动器信号端定义:

PUL+:脉冲信号输入正。( CP+ )

PUL-:脉冲信号输入负。( CP- )

DIR+:电机正、反转控制正。

DIR-:电机正、反转控制负。

EN+:电机脱机控制正。

EN-:电机脱机控制负。

电机绕组连接:

A+:连接电机绕组A+相。

A-:连接电机绕组A-相。

B+:连接电机绕组B+相。

B-:连接电机绕组B-相。

电源连接

VCC:电源正端“+”

GND:电源负端“-”

注意:DC直流范围:9-32V。不可以超过此范围,否则会无法正常工作甚至损坏驱动器.

总体线路连接:

输入信号共有三路,它们是:①步进脉冲信号PUL+,PUL-;②方向电平信 号DIR+,DIR-③脱机信号EN+,EN-。输入信号接口有两种接法,可根据 需要采用共阳极接法或共阴极接法。

在这里我采用的是共阴极接法:分别将 PUL-,DIR-,EN-连接到控制系统的地端(接入单片机地端);脉冲输入信号通过PUL+接入单片机(代码中给的P2^6脚),方向信号通过DIR+接入单片机(代码中给的P2^4脚),使能信号通过EN+接 入(不接也可,代码中未接,置空)。按键连接见代码,分别用5个按键控制电机启动、反转、加速、减速、正反转。

注意:接线时请断开电源,电机接线需注意不要错相,相内相间短路, 以免损坏驱动器。

步进电机运行讲解

步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。使得在速度、位置等控制领域用步进电机来控制变的非常的简单。

虽然步进电机已被广泛地应用,但步进电机并不能象普通的直流电机,交流电机在常规下使用。它必须由双环形脉冲信号、功率驱动电路等组成控制系统方可使用。因此用好步进电机却非易事,它涉及到机械、电机、电子及计算机等许多专业知识。

步进电机专业术语

步距角精度:步进电机每转过一个步距角的实际值与理论值的误差。用百分比表示:误差/步距角*100%。不同运行拍数其值不同,四拍运行时应在5%之内,八拍运行时应在15%以内。

失步:电机运转时运转的步数,不等于理论上的步数。称之为失步。

失调角:转子齿轴线偏移定子齿轴线的角度,电机运转必存在失调角,由失调角产生的误差,采用细分驱动是不能解决的。

最大空载起动频率:电机在某种驱动形式、电压及额定电流下,在不加负载的情况下,能够直接起动的最大频率。

最大空载的运行频率:电机在某种驱动形式,电压及额定电流下,电机不带负载的最高转速频率。

运行矩频特性:电机在某种测试条件下测得运行中输出力矩与频率关系的曲线称为运行矩频特性,这是电机诸多动态曲线中最重要的,也是电机选择的根本依据。

单片机驱动步进电机程序

#include<reg51.h> #define MotorTabNum 5unsigned char T0_NUM;sbit K1 = P3^5;        // 启动sbit K2 = P3^4;        // 反转sbit K3 = P3^3;        // 加速sbit K4 = P3^2;        // 减速sbit K5 = P3^1;        //正反转 sbit FX      = P2^4;     // 方向//sbit MotorEn = P2^5;     // 使能sbit CLK     = P2^6;     // 脉冲 int table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};            unsigned char g_MotorSt = 0;     // unsigned char g_MotorDir = 0;    // unsigned char MotorTab[7] = {12, 10, 8, 6, 4, 2,1}; signed char g_MotorNum = 0; void delayms(xms);void mDelay(unsigned int DelayTime);                void T0_Init(); void KeyScan(void);   void main(void){        T0_Init();             //       MotorEn = 0;     //         FX = 0;        while(1)        {                KeyScan();              //         }  } void T0_Init(){        TMOD = 0x01;        TH0 = (65535-100)/256;  // 1ms        TL0 = (65535-100)%256;        EA = 1;        ET0 = 1;//        TR0 = 1;  } void T0_time() interrupt 1{//        TR0 = 0;        TH0 = (65535-100)/256;           TL0 = (65535-100)%256;        T0_NUM++;        if(T0_NUM >= MotorTab[g_MotorNum])        //         {                T0_NUM = 0;                CLK=CLK^0x01;               //           }//        TR0 = 1;}           //-----????---------------------void KeyScan(void){        if(K1 == 0)        {                delayms(10);                   if(K1 == 0)                {                        g_MotorSt = g_MotorSt ^ 0x01;                      //  MotorEn ^= 1;                        TR0 = 1;       FX ^= 0;   //反转                }        }         if(K2 == 0)        {                delayms(10);   //正转                if(K2 == 0)                {                            g_MotorDir = g_MotorDir ^ 0x01;                        FX ^= 1;    //加速                }        }         if(K3 == 0)  //         {                delayms(5);   //加速                if(K3 == 0)                {                           g_MotorNum++;                        if(g_MotorNum > MotorTabNum)                                g_MotorNum = MotorTabNum;                }        }         if(K4 == 0)  //         {                delayms(5);   // 减速                if(K4 == 0)                {                           g_MotorNum--;                    if(g_MotorNum < 0)                    g_MotorNum = 0;                }        }   if(K5 == 0)  //   {    delayms(10);   // 正反转    if(K5 == 0)    {              g_MotorSt = g_MotorSt ^ 0x01;     g_MotorDir = g_MotorDir ^ 0x01;                    MotorEn ^= 1;                    TR0 = 1;           while(1)     {                       FX ^= 1;    //                                            delayms(90000);        FX ^= 0;    //        delayms(90000);     }    }  }} void delayms(xms)//延时{         unsigned int x,y;         for(x=xms;x>0;x--)                 for(y=110;y>0;y--);}

标签: #en是什么接口