1、系统功能
目的:学习步进电机的控制。
使用设备:步进电机、两位共阴数码管、按键
功能:驱动步进电机以不同转速(4档)转动,并将当前档位用数码管显示
(1)按键 KEY1 作为启动和停止的切换按键;
(2)按键 KEY2 加速键。
(3)最开始按下 KEY1 ,系统以默认的最低档位(1档最低,4档最高)启动电机转动;
(4)每按一次 KEY2 ,电机转速提升一档。提到最高4档后,自动降到最低的1档。
(5)数码管显示当前的档位。
(6)电机处于停止状态时,数码管显示0。
2、硬件结构
本课程实验主控芯片选择的是STM32F103ZET6作为MCU,该芯片是STM32F103里面配置非常强大的了,它拥有的资源包括:64KB SRAM、 512KB FLASH、2个基本定时器、4个通用定时器、2个高级定时器、2个DMA控制器(共12个通道)、3个SPI、2个IIC、5个串口、1个USB、1个CAN、3个12位ADC、1个12位DAC、1个SDIO接口、1个FSMC接口以及112个通用IO口。该芯片的配置十分强悍,并且还带外部总线(FSMC)可以用来外扩SRAM和连接LCD等,通过FSMC(可变静态存储控制器)驱动LCD,可以显著提高LCD的刷屏速度。
3、主要外设
本项目用到的主要外设为步进电机与两位共阴数码管,其中步进电机由ULN2003芯片控制。ULN2003是高耐压、大电流达林顿阵列,由七个硅NPN达林顿管组成。ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。ULN2003工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V的电压,输出还可以在高负载电流并行运行。
步进电机的驱动采用1-2相励磁法:1相和2相轮流交替导通,精度较高,且运转平滑。每送一个励磁信转动二分之一标称角度。有称为半步驱动。4相电机中,1、2种方式称4相4拍,3种称4相8拍。1-2相励磁法如下图所示,即采用A->AB->B->BC->C->CD->D->DA的方式陆续为线圈通电。
共阴数码管是指八段数码管的八段发光二极管的阴极(负极)都连在一起,而阳极对应的各段分别控制。
4、设计思路
4.1硬件设计原理
IN1(连接在PF0),IN2(连接在PF1),IN3(连接在PF2),IN4(连接在PF3)驱动板电源负极连接开发板GND,正极连接开发板5v。连接如下图所示(连线紧密,请根据杜邦线颜色来判断)
数码管的连接如下图所示。1接PD3,2接PC8,3接PG13,4接PG7,5接PG11,6接PD6,7接PA8,8接PC7,9接PC6,10接PC9。
模块本身的连接方式如下图所示。
4.2软件设计流程
实验代码
首先步进电机的工作原理实际上是电磁铁的作用原理。是将电脉冲信号转变为角位移或线位移的开环控制步进电机元件,通过控制施加在电机线圈上的电脉冲顺序、频率和数量,可以实现对步进电机的转向、速度和旋转角度的控制,配合以直线运动执行机构或齿轮箱装置,更可以实现更加复杂、精密的线性运动控制要求。
共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极的数码管,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。
在整体流程上,通过芯片上的按键控制步进电机的转速与数码管的显示,按键 KEY1 作为启动和停止的切换按键,按键 KEY2 用来增大步进电机工作档位,故在软件设计时,首先要根据这些硬件设施设置对应的模块,包括对应的按键模块key.h与key.c用来读取是否进行按键操作,还有数码管对应的模块led.h与led.c来处理按键后的数码管,与最后的步进电机的模块motor.h与motor.c来处理步进电机的转动速度。
在key模块中,主要靠KEY_Init()与KEY_Scan()函数实现控制, 其中KEY_Scan()用来进行按键处理,若检测到按键KEY1或KEY2,则赋值KEY0_PRES与KEY1_PRES。
在led模块中,使用LED_Init函数,通过GPIO_Initure()与HAL_GPIO_WritePin()对控制数码管各部分亮灭的每个引脚进行初始化。
在motor.c模块中,通过Motor_Init()函数对控制A、B、C、D四个线圈的PF0、PF1、PF2、PF3进行初始化。
在main.c模块中,采用1-2相励磁法驱动步进电机,1相和2相交替导通。在本系统中分别由PF0、PF1、PF2和PF3分别来控制线圈A、B、C、D的通电,因此采用如下方法通过对四个引脚的状态的控制,分别按A→AB→B→BC→C→CD→D→DA的顺序对线圈进行充放电从而产生电流驱动步进电机。通过HAL_Delay()进行对电机转机转速的控制,针对不同档位采用大小不同的参数speed,档位越低speed值越大,从而在每一轮次对线圈进行充放电的过程中延迟更长的时间。通过open和level两个参数来控制步进电机的是否工作与其工作档位。当按下KEY1键时,KEY0_PRES响应,此时先判断open的值,若open为1则置0;若open为0则置1且level默认为1。当按下KEY2键时,KEY1_PRES响应,此时先判断level的值,再使其加一,当level为4时将其置为1,再通过HAL_GPIO_WritePin()函数控制引脚从而控制数码管各部分的亮灭,使得数码管能够显示对应档位的数字。
5、软件开发环境
5.1软件开发环境安装和配置
开发工具为RT-Thread Studio。
访问官网https://www.rt-thread.org/page/studio.html,在官网下载最新的 RT-Thread Studio 软件安装包。
使用MCUISP工具配合开发板上的下载电路可实现串口下载,此外还需下载CH340驱动。
5.2工程文件的目录结构和文件
本工程文件共分为4个模块,包括对应的按键模块key.h与key.c用来读取是否进行按键操作,还有数码管对应的模块led.h与led.c来处理按键后的数码管,与最后的步进电机的模块motor.h与motor.c来处理步进电机的转动速度,然后还有main.c文件,以进入主函数。
首先打开RT-Thread Studio,导入我们建好的裸板模板工程 Template,之后将工程文件中的.h头文件与.cpp文件复制,粘贴到创建的工程下的applications文件夹内,点击按下图进行配置,使编译生成.hex 文件。
然后点击构建按钮完成编译构建,之后打开MCUISP下载到电路板上,在电路板上进行测试。
6、运行和测试
项目总体的接线情况如下:
上电后,首先数码管显示为0,步进电机尚未工作。
首先按下KEY1按键,此时系统以默认的最低档位1档开始工作,数码管数字显示为1,步进电机开始工作,旋转速度为1档,较慢。
再按下KEY2按键,此时数码管数字显示为2,步进电机旋转速度提升至2档。
此时,连续两次按下KEY2按键,此时数码管数字显示先升到3再升到4,步进电机旋转速度提升至4档,为最高档。
再次按下KEY2按键后,数码管数字显示变为1,步进电机旋转速度降至1档。
最后按下KEY1按键,数码管数字显示变为0,步进电机停止工作。