DSP2833x实验_步进电机

步进电机介绍:

  步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点,使得步进电机在速度、位置等控制领域的控制操作非常简单。虽然步进电机应用广泛,但它并不像普通的直流和交流电机那样在常规状态下使用, 它必须由双环形脉冲信号、 功率驱动电路等组成控制系统方可使用。因此用好步进电机也非易事,它涉及机械、电机、电子及计算机等许多专业知识。

步进电机主要分为以下几类:
(1)永磁式(PM)
(2)反应式(VR)
(3)混合式(HB)
步进电机主要技术指标如下:
(1)相数
(2)步距角
(3)拍数
(4)保持转矩

(1)工作原理
  步进电机有三线式、 四线式、 五线式和六线式, 但其控制方式均相同, 都要以脉冲信号电流来驱动。 假设每旋转一圈需要 200 个脉冲信号来励磁, 可以计算出每个励磁信号能使步进电机前进 1.8° 。 其旋转角度与脉冲的个数成正比。 步进电动机的正、 反转由励磁脉冲产生的顺序来控制。 六线式四相步进电机是比较常见的, 它的控制等效电路如下图所示:

 

 

(2)励磁方式
  步进电机的励磁方式分为全步励磁和半步励磁两种。

  其中全步励磁又有一相励磁和二相励磁之分, 半步励磁又称一二相励磁。 假设每旋转一圈需要 200 个脉冲信号来励磁, 可以计算出每个励磁信号能使步进电动机前进 1.8°。

  简要介绍如下:(6线式)
  ①一相励磁:在每一瞬间, 步进电机只有一个线圈导通.每送一个励磁信号, 步进电机旋转 1.8, 这是三种励磁方式中最简单的一种。
  其特点是:精确度好、 消耗电力小,但输出转矩最小, 振动较大。

      

 

  ②二相励磁:在每一瞬间,步进电动机有两个线圈同时导通。每送一个励磁信号, 步进电机旋转 1.8。
  其特点是: 输出转矩大, 振动小, 因而成为目前使用最多的励磁方式。 如果以该方式控制步进电机正转, 对应的励磁顺序见下表。 若励磁信号反向传送, 则步进电机反转。

    

  ③一二相励磁:为一相励磁与二相励磁交替导通的方式。 每送一个励磁信号, 步进电机旋转 0.9。
  其特点是:分辨率高, 运转平滑, 故应用也很广泛。 如果以该方式控制步进电机正转,对应的励磁顺序见下表。 若励磁信号反向传送, 则步进电机反转

  

五线4相式:四相五线步进电机_qq5132834的专栏-CSDN博客_五线四相步进电机

 

   ULN2003芯片简介:

  ULN2003是一个单片高电压、高电流的达林顿晶体管阵列集成电路。它是由7对NPN达林顿管组成的,它的高电压输出特性和阴极箝位二极管可以转换感应负载。单个达林顿对的集电极电流是500mA。达林顿管并联可以承受更大的电流。此电路主要应用于继电器驱动器,字锤驱动器,灯驱动器,显示驱动器(LED气体放电),线路驱动器和逻辑缓冲器。ULN2003的每对达林顿管都有一个2.7k串联电阻,可以直接和TTL或5V CMOS装置。输入输出反向。

 

 步进电机驱动电路:

     

 

1 GPIO5
2 GPIO4
3 GPIO3
4 GPIO2
5 电源

 

 

#include "DSP2833x_Device.h"     // DSP2823x Headerfile Include File
#include "DSP2833x_examples.h"   // DSP2823x Examples Include File
#include "leds.h"
#include "beep.h"
#include "key.h"
#include "dc_motor.h"
#include "steep_motor.h"
//////////////////////////////////////
unsigned char Step_table[]={0x0004,0x0008,0x0010,0x0020};//对应相位拉低使能;0b0000 0000 0000 0100 = 0x0040.ULN2003取反
unsigned char Step_table1[]={0x0020,0x0010,0x0008,0x0004};

void main(void)
{
    int i=0;
    char key=0;
    short cnt=0;
    char j=0;

    InitSysCtrl();    // 步骤 1. 初始化系统控制:
    LED_Init();
    KEY_Init();
    DC_Motor_Init();
    Steep_Motor_Init();
    while(1)
    {
        key=KEY_Scan(0);
        if(key==KEY1_PRESS)
        {
            cnt=1024;
            while(cnt--)
            {
                for(j=0;j<4;j++)
                {
                    GpioDataRegs.GPADAT.all=Step_table[j];
                    DELAY_US(5000);
                }
            }
        }
        else if(key==KEY2_PRESS)
        {
            cnt=1024;
            while(cnt--)
            {
                for(j=0;j<4;j++)
                {
                    GpioDataRegs.GPADAT.all=Step_table1[j];
                    DELAY_US(5000);
                }
            }
        }
        i++;
        if(i%2000==0)
        {
            LED1_TOGGLE;
        }
        DELAY_US(100);
    }
}
/*
 * steep_motor.c
 *
 *  Created on: 2021年7月7日
 *      Author: Administrator
 */
#include "steep_motor.h"

void Steep_Motor_Init(void)
{
    EALLOW;
    SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;// 开启GPIO时钟
    //Step_MOTOR端口配置
    GpioCtrlRegs.GPAMUX1.bit.GPIO2=0;
    GpioCtrlRegs.GPADIR.bit.GPIO2=1;

    GpioCtrlRegs.GPAMUX1.bit.GPIO3=0;
    GpioCtrlRegs.GPADIR.bit.GPIO3=1;

    GpioCtrlRegs.GPAMUX1.bit.GPIO4=0;
    GpioCtrlRegs.GPADIR.bit.GPIO4=1;

    GpioCtrlRegs.GPAMUX1.bit.GPIO5=0;
    GpioCtrlRegs.GPADIR.bit.GPIO5=1;
    EDIS;
    GpioDataRegs.GPACLEAR.bit.GPIO2=1;
    GpioDataRegs.GPACLEAR.bit.GPIO3=1;
    GpioDataRegs.GPACLEAR.bit.GPIO4=1;
    GpioDataRegs.GPACLEAR.bit.GPIO5=1;

    }
/*
 * steep_motor.h
 *
 *  Created on: 2021年7月7日
 *      Author: Administrator
 */

#ifndef STEEP_MOTOR_H_
#define STEEP_MOTOR_H_

#include "DSP2833x_Device.h"     // DSP2833x 头文件
#include "DSP2833x_Examples.h"   // DSP2833x 例子相关头文件

#define MOTO_OUTA_SETH    (GpioDataRegs.GPASET.bit.GPIO2=1)
#define MOTO_OUTA_SETL    (GpioDataRegs.GPACLEAR.bit.GPIO2=1)

#define MOTO_OUTB_SETH    (GpioDataRegs.GPASET.bit.GPIO3=1)
#define MOTO_OUTB_SETL    (GpioDataRegs.GPACLEAR.bit.GPIO3=1)

#define MOTO_OUTC_SETH    (GpioDataRegs.GPASET.bit.GPIO4=1)
#define MOTO_OUTC_SETL    (GpioDataRegs.GPACLEAR.bit.GPIO4=1)

#define MOTO_OUTD_SETH    (GpioDataRegs.GPASET.bit.GPIO5=1)
#define MOTO_OUTD_SETL    (GpioDataRegs.GPACLEAR.bit.GPIO5=1)

void Steep_Motor_Init(void);

#endif /* STEEP_MOTOR_H_ */

 


 

 

 

 

 

posted @ 2021-07-07 19:34  百叶集  阅读(507)  评论(0编辑  收藏  举报