基于STM32CUBEMX驱动低压步进器电机驱动器STSPIN220(3)----定时器中断产生指定数量脉冲

基于STM32CUBEMX驱动低压步进器电机驱动器STSPIN220----3.定时器中断产生指定数量脉冲

  • 概述
  • 样品申请
  • 视频教学
  • STM32CUBEMX配置
  • 产生固定数量的PWM
  • 电机设置
  • STSPIN220初始化
  • 主程序

概述

在步进电机控制过程中,为了实现精确的位置和速度控制,经常需要输出指定数量的脉冲。这就需要使用定时器功能来生成PWM脉冲信号。本文将详细介绍如何利用STM32CUBEMX配置定时器以输出指定数量的PWM脉冲。
定时器是STM32微控制器的一个重要功能模块,可用于生成各种定时和计数操作。通过合理配置定时器的参数和模式,我们可以实现精确的脉冲输出。

最近在弄ST的课程,需要样片的可以加群申请:615061293 。
在这里插入图片描述

样品申请

https://www.wjx.top/vm/PpC1kRR.aspx

视频教学

https://www.bilibili.com/video/BV1k94y1C7Gw/

基于STM32CUBEMX驱动低压步进器电机驱动器STSPIN220(2)----定时器中断产生指定数量脉冲

STM32CUBEMX配置

一种比较简单的方式是利用定时器中断来产生固定数量的脉冲。在这种方法中,我们可以将定时器配置为PWM输出模式,并在PWM输出的中断中进行计数操作。当计数达到设定的脉冲个数后,我们可以停止PWM输出,从而实现精确控制。下面以定时器1的通道4为例,介绍具体的步骤:
在STM32CUBEMX中,选择定时器1,并将其配置为PWM输出模式。确保选择了正确的定时器通道(通道4)。
在这里插入图片描述

配置定时器1的时钟源和预分频因子。根据应用的要求和系统时钟频率,选择适当的时钟源和预分频因子,以获得所需的脉冲频率。将定时器1的时钟源和预分频因子配置为适合您的应用的值。
PWM频率计算如下所示。
在这里插入图片描述

在上述配置中,将定时器1的预分频系数设置为48-1,自动重载值设置为1000-1。根据这些配置,PWM的频率可以计算为48,000,000 / ((48-1+1) * (1000-1+1)) = 1000Hz,即1kHz。
在定时器中,通道的 “pulse”(脉冲)是指定时器输出的信号的一种特性。每个定时器通道都可用于生成脉冲信号,而 “pulse” 通常指的是单个脉冲的持续时间。在这种设置中,我们将脉冲的占空比配置为50%,因此设置为500-1。
在这里插入图片描述
当PWM脉冲完成时,我们需要触发一个回调函数。HAL_TIM_PWM_PulseFinishedCallback函数是用于在非阻塞模式下处理PWM脉冲完成的回调函数。

在这里插入图片描述

为了触发HAL_TIM_PWM_PulseFinishedCallback回调函数,需要启用Capture Compare Interrupt中断。

在这里插入图片描述

产生固定数量的PWM

首先,可以定义一个全局变量,该变量用于控制输出脉冲的个数。通过操作该变量,我们可以在程序中灵活地控制所需的脉冲数量。

/* USER CODE BEGIN 0 */
void MX_GPIO_Init_mode3(void);
uint16_t STSPIN220_PwmNum;
uint8_t	STSPIN220_flag=0;//电机完成步数标志位
uint8_t	STSPIN220_Dir_flag=0;//方向
/* USER CODE END 0 */

首先,使用MX_TIM1_Init()初始化定时器1。
接下来,当需要输出脉冲时,将所需的脉冲数量赋值给变量STSPIN220_PwmNum。
最后,使用HAL_TIM_PWM_Start_IT(&htim1, TIM_CHANNEL_4)启动定时器1的PWM中断输出。

STSPIN220_PwmNum = 20;
MX_TIM1_Init();
HAL_TIM_PWM_Start_IT(&htim1,TIM_CHANNEL_4);

HAL_TIM_PWM_PulseFinishedCallback回调函数的实现部分。
在函数内部,如果STSPIN220_PwmNum的值为0,即已经输出了所需的脉冲个数,那么通过调HAL_TIM_PWM_Stop_IT(&htim1, TIM_CHANNEL_4)停止定时器1的PWM中断输出,以达到停止脉冲输出的目的。
其次对全局变量STSPIN220_PwmNum进行递减操作,表示完成了一个脉冲的输出就进行减1。接着,通过条件判断if (STSPIN220_PwmNum == 0),检查是否已经输出了指定数量的脉冲。
这段代码的作用是在每次PWM波形周期完成时,更新全局变量STSPIN220_PwmNum的值,并在达到指定的脉冲数量后停止PWM中断输出。通过这种方式,可以实现精确控制输出脉冲个数的功能。

/* USER CODE BEGIN 4 */
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
{if(STSPIN220_PwmNum==0){HAL_TIM_PWM_Stop_IT(&htim1,TIM_CHANNEL_4);STSPIN220_flag=1;//电机完成步数标志位}STSPIN220_PwmNum--;
}/* USER CODE END 4 */

产生波形如下所示,可以看到有20个脉冲。
在这里插入图片描述

电机设置

这里使用的电机为步进角为18°,1:30的减速比,在这种情况下,如果步进电机的步进角为18°,减速比为1:30,那么旋转一周所需的脉冲数量可以计算为:
旋转一周所需脉冲 = (360 / 步进角) * 减速比 * 细分数
其中,步进角以度为单位,减速比是相对于电机输出轴和实际应用中的旋转轴之间的比率,细分数表示步进电机驱动器将一个步进角分割成多少个微步。
根据这个公式来计算出所需的脉冲数量,从而实现旋转一周的控制。

在这里插入图片描述

STSPIN220初始化

STSPIN220修改后初始化如下所示。

  /* USER CODE BEGIN 2 */MX_GPIO_Init_mode3();HAL_Delay(100);STSPIN220_SetStepMode(0);//mode1-mode4都关闭STSPIN220_enable(0);//使能操作 1使能0失能STSPIN220_Stby(1);//低功耗模式 1开启低功耗0关闭低功耗HAL_Delay(100);STSPIN220_SetStepMode(2);//细分操作STSPIN220_Stby(0);//低功耗模式 1开启低功耗0关闭低功耗,加载modeHAL_Delay(100);//等待电平稳定STSPIN220_setDirection(0);//0反1正HAL_Delay(100);//等待电平稳定STSPIN220_enable(1);//使能操作 1使能0失能HAL_Delay(100);STSPIN220_PwmNum = 600*2;//步进角为18°,1:30的减速比,细分2则需要走(360/18)*30*2为一圈	MX_TIM1_Init();
//	HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_4);HAL_TIM_PWM_Start_IT(&htim1,TIM_CHANNEL_4);/* USER CODE END 2 */

主程序

实现电机循环正转1圈反转1圈代码如下所示。

  /* Infinite loop *//* USER CODE BEGIN WHILE */while (1){if(STSPIN220_flag){HAL_Delay(1000);
//				STSPIN220_Stby(1);//低功耗模式 1开启低功耗0关闭低功耗STSPIN220_flag=0;		if(STSPIN220_Dir_flag==0){STSPIN220_Dir_flag=1;STSPIN220_setDirection(1);//0反1正HAL_Delay(100);STSPIN220_PwmNum = 600*2;//步进角为18°,1:30的减速比,细分2则需要走(360/18)*30*2为一圈	HAL_TIM_PWM_Start_IT(&htim1,TIM_CHANNEL_4);}else{STSPIN220_Dir_flag=0;STSPIN220_setDirection(0);//0反1正HAL_Delay(100);STSPIN220_PwmNum = 600*2;//步进角为18°,1:30的减速比,细分2则需要走(360/18)*30*2为一圈	HAL_TIM_PWM_Start_IT(&htim1,TIM_CHANNEL_4);}}HAL_Delay(10);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Github】Uptime Kuma:自托管监控工具的完美选择

简介: Uptime Kuma 是一款强大的自托管监控工具,通过简单的部署和配置,可以帮助你监控服务器、VPS 和其他网络服务的在线状态。相比于其他类似工具,Uptime Kuma 提供更多的灵活性和自由度。本文将介绍 Uptime Kuma 的功能、如何使…

SpringBoot 依赖管理和自动配置---带你了解什么是版本仲裁

😀前言 本篇博文是关于SpringBoot 依赖管理和自动配置,希望能够帮助到您😊 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您…

Maven 打包生成Windows和Liunx启动文件

新建一个springboot项目。 1、项目结构 2、pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocati…

Activiti7

文章目录 概述入门案例1.创建springboot项目pom.xml 2.获取ProcessEngine2.1 默认的方式2.2 编程方式获取2.3 表结构介绍 3.在线流程设计器 概述 官网地址&#xff1a;https://www.activiti.org/ Activiti由Alfresco软件开发&#xff0c;目前最高版本Activiti 7。是BPMN的一个…

CI/CD—Docker中深入学习

1 容器数据卷 什么是容器数据卷&#xff1a; 将应用和环境打包成一个镜像&#xff01;数据&#xff1f;如果数据都在容器中&#xff0c;那么我们容器删除&#xff0c;数据就会丢失&#xff01;需求&#xff1a;数据可以持久 化。MySQL容器删除了&#xff0c;删容器跑路&#…

从excel中提取嵌入式图片的解决方法

1 发现问题 我的excel中有浮动图片和嵌入式图片&#xff0c;但是openpyxl的_image对象只提取到了浮动图片&#xff0c;通过阅读其源码发现&#xff0c;这是因为openpyxl只解析了drawing文件导致的&#xff0c;所以确定需要自己解析 2 解决思路 1、解析出media资源 2、解析…

Ansible环境搭建,CentOS 系列操作系统搭建Ansible集群环境

Ansible是一种自动化工具&#xff0c;基于Python写的&#xff0c;原理什么的就不过多再说了&#xff0c;详情参考&#xff1a;https://www.itwk.cc/post/403.html https://blog.csdn.net/qq_34185638/article/details/131079320?spm1001.2014.3001.5502 环境准备 HOSTNAMEIP…

大后台,小前台——组合式创新加速推进产教融合

2023年8月1日&#xff0c;由成都知了汇智科技有限公司组织召开的“2023产教融合项目推进闭门研讨会”于成都市高新区软件园G8区7楼正式举行&#xff0c;本次会议基于“产业链的用人需求、资本链的回报诉求、服务链的价值要求、教育链的延伸需求”进行交流探讨&#xff0c;形成稳…

Java-认识String

目录 一、String概念及创建 1.1 String概念 1.2 String的创建 二、String常用方法 2.1 String对象的比较 2.2 字符串查找 2.3 转化 2.4 字符串替换 2.5 字符串拆分 2.6字符串的截取 2.7 其他操作方法 2.8 字符串修改 三、面试题 一、String概念及创建 1.1 String概念 Java中…

2023上半年手机及数码行业分析报告(京东销售数据分析)

2023年上半年&#xff0c;手机市场迎来复苏&#xff0c;同环比来看&#xff0c;销量销额纷纷上涨。 而数码市场中&#xff0c;各个热门品类表现不一。微单相机及智能手表同比去年呈现增长态势&#xff0c;而笔记本电脑市场则出现下滑。 基于此现状&#xff0c;鲸参谋发布了20…

Git Submodule 更新子库失败 fatal: Unable to fetch in submodule path

编辑本地目录 .git/config 文件 在 [submodule “Assets/CommonModule”] 项下 加入 fetch refs/heads/:refs/remotes/origin/

AWS Amplify 部署node版本18报错修复

Amplify env&#xff1a;Amazon Linux:2 Build Error : Specified Node 18 but GLIBC_2.27 or GLIBC_2.28 not found on build 一、原因 报错原因是因为默认情况下&#xff0c;AWS Amplify 使用 Amazon Linux:2 作为其构建镜像&#xff0c;并自带 GLIBC 2.26。不过&#xff0c;…

每天一道leetcode:剑指 Offer 04. 二维数组中的查找(中等二分查找)

今日份题目&#xff1a; 在一个 n * m 的二维数组中&#xff0c;每一行都按照从左到右 非递减 的顺序排序&#xff0c;每一列都按照从上到下 非递减 的顺序排序。请完成一个高效的函数&#xff0c;输入这样的一个二维数组和一个整数&#xff0c;判断数组中是否含有该整数。 示…

Qt中ffmpeg API存储和显示摄像头视频

Qt中ffmpeg API存储和显示摄像头视频的功能需要之前写的视频ffmpegAPI的视频播放的流程。 代码源码位置&#xff1a;https://download.csdn.net/download/qq_43812868/88157743?spm1001.2014.3001.5503 一、存储和显示摄像头的视频的流程 这是读取打开视频文件的流程&#x…

十三、ESP32PS2摇杆(ADC)

1. 运行效果 在上下左右操作PS2摇杆的时候,会检测到数据 2. 滑动电阻

Docker基本使用

查看本地镜像 查看本地&#xff1a;docker imagesPull镜像&#xff1a;docker pull nginx:latest登录镜像&#xff1a;docker login hub.docker.com -u **** -p ****制作镜像&#xff1a;docker build -t xxxx:v1push&#xff1a;docker push xxx:v1删除镜像:docker rmi #imag…

scikit-plot 使用笔记

scikit-plot是基于sklearn和Matplotlib的库&#xff0c;主要的功能是对训练好的模型进行可视化。 安装&#xff1a; pip install scikit-plot 功能1&#xff1a;评估指标可视化 scikitplot.metrics.plot_confusion_matrix快速展示模型预测结果和标签计算得到的混淆矩阵。 im…

图像 检测 - RetinaNet: Focal Loss for Dense Object Detection (arXiv 2018)

图像 检测 - RetinaNet: Focal Loss for Dense Object Detection - 密集目标检测中的焦点损失&#xff08;arXiv 2018&#xff09; 摘要1. 引言2. 相关工作References 声明&#xff1a;此翻译仅为个人学习记录 文章信息 标题&#xff1a;RetinaNet: Focal Loss for Dense Obje…

java: 无法访问org.springframework.web.bind.annotation.GetMapping(springboot构建时出现问题)

spring boot构建完成后出现以下问题 报错原因&#xff1a;SpringBoot 3.0以上版本要求JDK 17以上&#xff0c;jdk版本1.8 与 spring boot 3.0.1 版本不匹配 解决方法&#xff1a;

线性代数(二) 矩阵及其运算

前言 行列式det(A) 其实表示的只是一个值 ∣ a b c d ∣ a d − b c \begin{vmatrix} a & b\\ c & d\end{vmatrix} ad -bc ​ac​bd​ ​ad−bc&#xff0c;其基本变化是基于这个值是不变。而矩阵表示的是一个数表。 定义 矩阵与线性变换的关系 即得 ( a 11 a 12…