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_ */