基于STM32103和ULN2003的步进电机控制

发布者:睿智之光最新更新时间:2023-06-19 来源: elecfans关键字:STM32103  ULN2003  步进电机控制 手机看文章 扫描二维码
随时随地手机看文章

1 前言

本实验是基于STM32103芯片和ULN2003进行对步进电机的控制。

2 ULN2003的基本介绍

2.1 ULN2003的概述

ULN2003是高耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成。 一般采用DIP—16 或SOP—16 塑料封装。

ULN2003的主要特点:

  • ULN2003 的每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。

  • ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V 的电压,输出还可以在高负载电流并行运行。

2.2 ULN2003的作用

ULN2003是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中,可直接驱动继电器等负载。 输入5VTTL电平,输出可达500mA/50V。

简单地说, ULN2003其实就是用来放大电流的,增加驱动能力。 比如说单片机输出引脚一般输出就几mA,是无法驱动电机、继电器或者电磁阀的,像要让直流电机转需要500mA,而用ULN2003放大后,可以通过单片机的输出引脚直接控制这些设备。 而我们文章的目的是使用ULN2003芯片来增大单片机的输出电流使得单片机的输出电流可以驱动步进电机。

2.3 ULN2003的引脚图和功能

  • 引脚1:CPU脉冲输入端,端口对应一个信号输出端;

  • 引脚2:CPU脉冲输入端;

  • 引脚3:CPU脉冲输入端;

  • 引脚4:CPU脉冲输入端;

  • 引脚5:CPU脉冲输入端;

  • 引脚6:CPU脉冲输入端;

  • 引脚7:CPU脉冲输入端;

  • 引脚8:接地;

  • 引脚9:该脚是内部7个续流二极管负极的公共端,各二极管的正极分别接各达林顿管的集电极。 用于感性负载时,该脚接负载电源正极,实现续流作用。 如果该脚接地,实际上就是达林顿管的集电极对地接通;

  • 引脚10:脉冲信号输出端,对应7脚信号输入端;

  • 引脚11:脉冲信号输出端,对应6脚信号输入端;

  • 引脚12:脉冲信号输出端,对应5脚信号输入端;

  • 引脚13:脉冲信号输出端,对应4脚信号输入端;

  • 引脚14:脉冲信号输出端,对应3脚信号输入端;

  • 引脚15:脉冲信号输出端,对应2脚信号输入端;

  • 引脚16:脉冲信号输出端,对应1脚信号输入端。

2.4 ULN2003工作原理驱动应用电路

ULN2003是高耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成,每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。

LN2003也是一个7路反向器电路,即当输入端为高电平时,ULN2003输出端为低电平; 当输入端为低电平时,ULN2003输出端为高电平。

ULN2003是一个非门电路,包含7个单元,单独每个单元驱动电流最大可达500mA,9脚可以悬空。 比如1脚输入,16脚输出,你的负载接在VCC与16脚之间,不用9脚。

根据上面的原理,ULN2003的驱动应用电路的基本示例图,各个引脚的功能都标注在上面:

这里需要注意的是:尽管按照官方文献要求,控制电压输入需要在5V,其实只需要超过2.5V的电平信号基本都能够算作是高电平。 也就是说,3.3V的单片机的IO口的高电平输出就能够直接来进行ULN2003的控制输入了。

再介绍一个实际例程的ULN2003的驱动应用电路:

图像

3 28BYJ48型步进电机

3.1 步进电机简介

28BYJ48型步进电机是四相八拍电机,电压为DC5V~DC12V。 当对步进电机按一定顺序施加一系列连续不断的控制脉冲时,它可以连续不断地转动。 每一个脉冲信号使得步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度。 当通电状态的改变完成一个循环时,转子转过一个齿距。 四相步进电机可以在不同的通电方式下运行。

  • 单(单相绕组通电)四拍(A-B-C-D-A…… )

  • 双(双相绕组通电)四拍(AB-BC-CD-DA-AB…… )

  • 四相八拍(A-AB-B-BC-C-CD-D-DA-A......)。

所以说,要想启动步进电机只需要依次给各个相输入高电平信号就可以了。 注意,当给某一相输入信号的时候,其他相要重新置0。 也就是说,同一时刻只能保持有一个相。

3.2 步进电机参数

4 STM32控制程序

步进电机是一种将电脉冲转化为角位移的执行设备。 通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(即步进角)。 我们可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的; 同时我们可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。

4.1 硬件配置

  • 单片机:STM32103C8T6

  • 步进电机:28BYJ-48

  • 驱动电路:ULN2003芯片的驱动板

  • 引脚连接:IN1 ----- PB6
    IN2 ----- PB7
    IN3 ----- PB8
    IN4 ----- PB9
    OUT1:步进电机4、OUT2:步进电机3、OUT3:步进电机2、OUT4:步进电机1、步进电机5:
    VCC电源正极(5V)、GND:共地、COM:VCC电源正极(5V)。

  • 5V直流电源:STM32F103ZET6开发板上的5V电压引脚(下图中的VCC)。

4.2 控制代码

motor.h


/***************************************************************************************

$ @ Copyright    : 

$ @ Author       : Krone

$ @ Data         : Do not edit

$ @ LastEditor   : 

$ @ LastData     : 

$ @ Describe     : 

*****************************************************************************************/

#ifndef MOTOR_H__

#define MOTOR_H__

#include 

#include 


#define  MOTOR_CLK               (RCC_APB2Periph_GPIOB)

#define  MOTOR_PORT              (GPIOB)

#define  MOTOR_IN1_PIN           (GPIO_Pin_6)

#define  MOTOR_IN2_PIN           (GPIO_Pin_7)

#define  MOTOR_IN3_PIN           (GPIO_Pin_8)

#define  MOTOR_IN4_PIN           (GPIO_Pin_9)


void Moto_Init(void);

void Motor_Forward_Ration(void);  //反转

void Motor_Reverse_Rotation(void);  //正转

void MotorStop(void); //停止

void Motor_Ctrl_Direction_Angle(int direction, int angle);//控制电机正转还是反转某个角度


#endif

motor.c


/***************************************************************************************

$ @ Copyright    : 

$ @ Author       : Krone

$ @ Data         : Do not edit

$ @ LastEditor   : 

$ @ LastData     : 

$ @ Describe     : 

*****************************************************************************************/

#include "motor.h"

#include "delay.h"


uint16_t phasecw[4] ={0x0200,0x0100,0x0080,0x0040}; /*   D-C-B-A  反转 */

uint16_t phaseccw[4]={0x0040,0x0080,0x0100,0x0200}; /* A-B-C-D   正转 */

/*---------------------------------电机模块与单片机连接引脚---------------------------------------------------*/

/* IN4: PB9  d */

/* IN3: PB8  c */

/* IN2: PB7  b */ 

/* IN1: PB6  a */


void Moto_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(MOTOR_CLK,ENABLE);


GPIO_InitStructure.GPIO_Pin = MOTOR_IN1_PIN | MOTOR_IN2_PIN | MOTOR_IN3_PIN | MOTOR_IN4_PIN ;//引脚按着INT1顺序接就行了

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB,&GPIO_InitStructure);

GPIO_ResetBits(MOTOR_PORT, MOTOR_IN1_PIN | MOTOR_IN2_PIN |MOTOR_IN3_PIN |MOTOR_IN4_PIN );

}

// 正转

void Motor_Forward_Ration(void)  

{  

    int i;  

    for(i=0;i<4;i++)  

    {  

        GPIO_Write(MOTOR_PORT, phaseccw[i]);  

        delay_ms(1);  

    }  

}

// 反转

void Motor_Reverse_Rotation(void)  

{  

uint8_t i;  

    for(i=0;i<4;i++)  

    {  

        GPIO_Write(MOTOR_PORT, phasecw[i]);  

        delay_ms(1);  

    }  

}

//停止

void MotorStop(void) 

{  

    GPIO_Write(MOTOR_PORT, 0x0000);  

}


//控制电机正转还是反转某个角度

//direction方向,1为正转,0为反转

//angle角度,可为0-360具有实际意义

void Motor_Ctrl_Direction_Angle(int direction, int angle)

{

uint16_t i;


if(direction == 1)

{

for(i = 0; i < 64*angle/45; i++) 

{

/* 正转 */

Motor_Forward_Ration();

}

MotorStop();//停止

  }

else

{

for(i = 0; i < 64*angle/45; i++) 

{

/* 反转 */

Motor_Reverse_Rotation(); 

}

MotorStop();//停止

}

}


关键字:STM32103  ULN2003  步进电机控制 引用地址:基于STM32103和ULN2003的步进电机控制

上一篇:STM32WB:多协议+安全SoC的开路先锋
下一篇:基于面向STM32Cube的功能包设计过程

推荐阅读最新更新时间:2024-11-13 10:54

STM32单片机步进电机控制系统设计案例
一、功能简介 本项目使用Proteus8.12仿真STM32单片机控制器,使用ULN2003电机模块、LCD1602模块、按键模块等。 主要功能: 系统运行后,LCD1602显示电机当前运行档位、方向、状态。可通过按键K4启动与停止,按键K1加速、按键K2减速,按键K3换向;档位可在1-5档。 主要功能如下: (1)按键功能:具有加速、减速、正转、反转、启动和停止; (2)显示功能:LCD1602显示档位、方向、运行状态; (3)电机驱动:ULN2003驱动步进电机; 二、软件设计 //系统参数设定 void sys_parm_set(void) { u8 key=0; key=KEY_Scan(0); //启动/停止 i
[单片机]
STM32单片机<font color='red'>步进电机控制</font>系统设计案例
利用PIC单片机控制步进电机控制系统的方法概述
1 引言 步进电机是一种离散运动的装置,它和现代数字控制技术有着紧密的本质的联系。步进电机亦是一种将电脉冲转化为角位移或直线位移的执行机构,当步进电机驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(又称之为步进角),为此可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过脉冲频率来控制步进电机的转动速度和加速度,从而达到调速的目的。从以上所述可知,步进电机是可以用脉冲信号直接进行定位控制,由于其具有一定的精度,且控制线路简单,使用方便、可靠;因此它广泛地应用于工业自动控制、数控机床、组合机床、机器人、计算机外围设备(扫描仪、磁盘驱动器、打印机)、照相机(包括光学照相机与数码照相机),投
[单片机]
利用PIC单片机控制<font color='red'>步进电机控制</font>系统的方法概述
步进电机控制系统程序如何设计
导语:步进电机控制系统程序的设计是实现步进电机控制的重要环节。 一、确定控制要求 首先需要确定步进电机控制系统的控制要求,包括控制精度、速度、转向等方面。例如,在机械加工中,需要根据加工要求来确定步进电机的步进角度和转速等参数。 二、选择合适的控制器 根据控制要求,选择合适的控制器。常见的控制器包括单片机、PLC、DSP等。在选择控制器时需要考虑控制器的性能和成本等因素。同时还需要考虑控制器与步进电机的匹配问题,确保控制器能够正常工作。 三、设计控制程序 在设计控制程序时,需要考虑控制器的特点和步进电机的特性。下面介绍一种基于单片机的步进电机控制系统程序的设计方法。 确定输入输出端口 首先需要确定输入输出端口,包括控制器的输入
[嵌入式]
步进电机控制器接线图
  步进电机控制器接线图如下:   接线之前我们需要大概了解,控制器需要发送什么信号,才能控制驱动器,进而操纵电机。   图一:   注意:   (1)t1:ENA(使能信号)应提前DIR 至少5μs,确定为高。   一般情况下建议ENA+ 和ENA- 悬空即可。   (2)t2:DIR 至少提前PUL 下降沿5μs 确定其状态高或低。   (3)t3:脉冲宽度至少不小于2.5μs。   (4)t4:低电平宽度不小于2.5μs   μs =微秒   信号满足了以上的条件就可以精准的控制器电机了。   控制器分类常见的有的PLC 单片机 控制卡等。   现在来大家介绍下常用的接线方式 :   共阳极接法   共阳极接法目前是
[嵌入式]
<font color='red'>步进电机控制</font>器接线图
合泰单片机控制5线4相步进电机控制程序
;步进电机的驱动信号必须为脉冲信号!!! 转动的速度和脉冲的频率成正比!!! ; 28BYJ48步进电机步进角为 5.625度 ; A组线圈对应 PC.0 ; B组线圈对应 PC.1 ; C组线圈对应 PC.2 ; D组线圈对应 PC.3 ; 正转次序: AB组--BC组--CD组--DA组 (即一个脉冲,正转5.625度) ; 完整的源程序下载:http://www.51hei.com/f/htbjdj.rar include HT66F50.inc ORG 0000H JMP A1 ORG 0014H ;多功能中断入口地址 JMP ZD1 ORG 002DH Q1: DC 03H ; 0 AB DC 06H ;
[单片机]
STM32103—NVIC
void NVIC_Configuration(void) { #ifdef VECT_TAB_RAM NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); /* Set the Vector Table base location at 0x20000000 */ #else /* VECT_TAB_FLASH */ NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); /* Set the Vector Table base location at 0x08000000 */
[单片机]
基于ARM的步进电机控制示例(串口方式+中断方式)
  本设计实现了通过ARM对步进电机(Motor)的控制。控制方式有两种,一种是通过外部中断,另外一种是通过串口发送命令进行控制。   本设计可实现步进电机的速度和方向控制。通过串口方式控制电机时,只要在仿真过程中在虚拟终端(Virtual Terminal)输入相应的命令即可控制电机的运转。    虚拟终端   串口控制命令(双引号内字符,可自己定义)如下:    : 使电机逆时针方向转动;    : 使电机顺时针方向转动;    + : 加速;    - : 减速。      如果读者在仿真过程中不小心关闭了虚拟终端(
[单片机]
基于ARM的<font color='red'>步进电机控制</font>示例(串口方式+中断方式)
基于DSP的微位移步进电机控制系统设计
步进电机是将电脉冲信号转变为角位移或线位移的开环控制器件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,它的旋转是以固定的角度一步一步运行的,可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的。为实现对步进电机的控制,一般可采用单片机为控制器,通过一些大规模集成电路来控制其脉冲输出频率和脉冲输出数以实现步进电机的控制,然而整个系统的准确性、可靠性都存在缺陷。本系统是为实验室某项目服务的子系统,系统的研究目的在于精确、快速、稳定地调节实验装置的相对移动,找到最佳位置、角度安放装置,故本系统拟采用浮点型 DSP28335 作为系统控制器,拟采用其集成的PWM输出模块,减少外围电路
[嵌入式]
基于DSP的微位移<font color='red'>步进电机控制</font>系统设计
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved