芯片+步进电机档位控制实验

news2024/12/28 20:22:03

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,步进电机停止工作。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/144241.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Git】Git概述与安装

1、Git 概述 Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。 Git 易于学习,占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于 Subversio…

SwitchResX for Mac 屏幕分辨率修改工具

前言 SwitchResX V4.12.1 是Mac上一款功能强大的屏幕分辨率修改软件,可以为您提供控制显示器分辨率所需的所有工具。在switchresx帮助下,您可以管理无论是Mac Retina显示器,Cinema Displays还是电视机甚至投影仪的任何分辨率。而且switchres…

C语言-三子棋

文章目录三子棋一、问题描述二、基本流程在写三子棋的代码之前,我们来看看实现这个游戏的逻辑:三、步骤1. 菜单界面2. 创建棋盘3. 棋盘初始化4.打印棋盘(1)简陋棋盘:(2)自己打印棋盘:5.玩家落子6.电脑落子7.判断胜负1) 判定是否和…

CAPL学习之路-测试功能集函数(最终篇,其他的一些函数介绍)

TestSetEcuOffline 断开ECU与总线的连接 这个ecu是仿真ecu,不是真实ecu哦! testcase TCExample() {testSetEcuOffline(Engine); }void MainTest () {TCExample(); }Trace窗口: TestSetEcuOnline 将ECU连接到总线 testGetCurrentCycle 返回测试的当前周期 这里不管怎么试都返…

【目标检测】TOOD:Task-aligned One-stage Object Detection

TOOD:Task-aligned One-stage Object Detection 论文题目:《TOOD:Task-aligned One-stage Object Detection》——任务对齐的单阶段目标检测 论文地址: https://arxiv.org/abs/2108.07755 论文代码: https://github.com/fcjian/TOOD 1、前言…

优秀的 Verilog/FPGA开源项目介绍(三十六)-RISC-V(新增一)

关于RISC-V的二三事risc-v官网❝https://riscv.org/RISC-V(跟我读:“risk----------------five”)是一个基于精简指令集(RISC)原则的开源指令集架构(ISA)。这里要明确两个概念:指令集…

基于VC++的3D地形绘制与纹理贴图

前言随着地理信息系统产业的发展,三维产品也在生活中处处吸引着我们的眼球。作为数字城市的核心内容,城市模型的构建成为了目前研究的热点。OpenGL是独立于操作系统和硬件环境的三维图形库,其为实现逼真的三维绘制效果和建立交互的三维场景提…

ES6 课程概述④

文章目录6-1. 对象解构什么是解构在解构中使用默认值非同名属性解构7-2. 共享符号7-3. 知名(公共、具名)符号[回顾]事件循环8-1. 事件和回调函数的缺陷8-2. 异步处理的通用模型8-3. Promise 的基本使用8-4. Promise 的串联8-5. Promise 的其他 api原型成…

通关手册 | 祝我通关成功!!!

Framework of MLLoss on training data1. large1.1 Model Bias1.2 Optimization2. smallLoss on testing data2.1 large2.1.1 overfitting2.1.2 mismatch2.2 small通关手册:祝我通关成功!!! Loss on training data 1. large 1.1…

Vue--》Vue3生命周期以及其它组合API的讲解

目录 生命周期 自定义hook函数 toRef shallowReactive与shallowRef readonly与shallReadonly toRaw与markRaw 生命周期 Vue3.0中可以继续使用Vue2.x中的生命周期钩子,但是有两个被更名:Vue2中的beforeDestroy改名为:beforeUnmount&…

【数字孪生百科】可视化图表知识科普——Pareto图(Pareto Chart)

简介Pareto图(Pareto Chart)又称帕累托图、排列图,是一种特殊类型的条形图。图中标绘的值是按照事件发生的频率排序而成,显示由于各种原因引起的缺陷数量或不一致的排列顺序。Pareto图是根据 Vilfredo Pareto 命名的,他…

Go语言设计与实现 --Goroutine

Goroutine是GMP模型中的G,是属于用户态的线程,由Go runtime管理,而不是操作系统管理。 数据结构 type g struct {goid int64 // 唯一的goroutine的IDsched gobuf // goroutine切换时,用于保存g的上下文stack stack // 栈gopc…

Android Studio调用so库中方法

一、JNI规范so库调用 在 Android Studio生成自己的so库 中已经创建了自己的so库,这是一个JNI规范的so库,可以直接将so库放到libs中,并按照上面文章中MainActivity中的调用方法使用。 1、build.gradle(app)配置 andro…

SHELL脚本学习 --- 第六次作业(正则和sed)

SHELL脚本学习 — 第六次作业 思路: 作业1: 1,正则匹配h或H即可 2,sh$匹配以sh结尾 3,使用[[:space:]]匹配空格,[^[:space:]]匹配非空格 4,^to开头,中间.匹配任意字符0次或多次&…

Java一学就会系列:介绍与第一个java程序

系列文章目录 java环境-jdk环境安装与配置(jdk1.8) 文章目录系列文章目录前言一、JAVA是什么?二、环境安装三、开发工具1. Eclipse(推荐)2. IntelliJ IDEA (收费)四、第一个Java程序总结前言 …

搭建Django项目——实现简单的API访问

1、创建Django项目 打开pycharm,新建Django项目,可以选择一个虚拟环境 建完之后目录如下: 2、创建应用,我这里命名为demo 在命令行执行 python manage.py startapp demo执行之后,会发现项目目录下多了demo文件夹…

Linux小黑板(6):软硬链接

"飞吧,去寻觅红色的流星!"一、软硬链接简介软链接:软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。软链接硬链接:硬链接(hard link,也称链接&…

美创科技深度参编,中国信通院《数据安全治理实践指南(2.0)》发布

1月5日,由中国信息通信研究院、中国通信标准化协会指导,中国通信标准化协会大数据技术标准推进委员会主办,数据安全推进计划承办的第二届数据安全治理峰会成功召开,多项数据安全研究重要成果发布。会上,美创科技参与编…

MyBatis中数组套数组的格式

数组套数组的形式写法 1.dao层 List<Regulation> queryAllRegulations(); 配置 <resultMap id"RegulationResultMap" type"com.elfsack.cs.dto.allot.Regulation"><result column"shop_code" property"shopCode" /…

ARM32平台系统crash(系统崩溃) 问题定位的一种解决方法

说明 分享一种crash问题定位的一种解决方法&#xff0c;仅供参考。 ARM32平台上通过错误使用内存&#xff0c;触发系统异常&#xff0c;系统崩溃。系统异常被挂起后&#xff0c;能在串口中看到异常调用栈打印信息和关键寄存器信息。 如下所示&#xff0c;excType表示异常类…