基于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);//控制电机正转还是反转某个角度#endifmotor.c
/***************************************************************************************$ @ copyright : $ @ author : krone$ @ data : do not edit$ @ lasteditor : $ @ lastdata : $ @ describe : *****************************************************************************************/#include motor.h#include delay.huint16_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();//停止 }}

三相异步电动机转差率及公式
使用NVIDIA CloudXR和PCoIP的XR体验
数字通信协议中,什么是I2C和SPI总线协议?
利用Java写开源库 覆盖70多种推荐算法
三星Galaxy S11沿用挖孔屏,相机性能和电池续航有大提升
基于STM32103和ULN2003的步进电机控制
机器视觉中OCR印字检测的类型有哪些
【热点】机器人替代人力有望加速演绎 未来年化需求有望达到18.6万台
苹果ios11上线安卓不做表示?纳尼!安卓8.0来了,所有手机都能升级!
斗轮机与程控站之间开关量双向无线通讯
三极管的倒置状态分析
赵景春:未来将实现广播电视由户户通到人人通
新火种AI|小冰摊牌了!大模型已获国内备案,克隆人发布箭在弦上
WindowsXP加速优化设置
手机兴起屏幕变革 意在刺激消费者的换机欲望
2020年我国铅酸蓄电池产量同比增长12.28%
工业物联网网关对可扩展性的需求
区块链技术可以怎么用
新基建如火如荼 5G堪称第四次工业革命
中国移动连下三笔5G大单 全面发力加快5G网络部署