STM32单片机模拟量脉冲调速的STM32Cube配置

2023-11-21 05:20

本文主要是介绍STM32单片机模拟量脉冲调速的STM32Cube配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

STM32单片机模拟量脉冲调速的STM32Cube配置

有些时候我们需要伺服电机以速度模式运行。当伺服电机以速度模式运行时最优选的方式自然是通过伺服驱动器自身的模拟量输入来进行调速。但是一些伺服驱动器本身不带有模拟量输入,此时我们可以用单片机制作一个建议的模拟量脉冲调速装置——通过单片机来接收模拟量信号,然后根据模拟量的不同来调节输出脉冲的频率,以此来实现对伺服电机的模拟量调速控制。

要实现上述的功能,主要需要单片机进行1ADC、2脉冲输出。为了实现这两个功能,下面将简略对这两个功能进行解释并简略介绍STM32Cube的相应配置。

ADC

ADC是Analog-to-digital converter的缩写,直译为模数转换。它的作用是将模拟量(通常由电压形式表达)转换为可以数字处理的数字量的过程。
而上面提到的模拟量是指变量在一定范围连续变化的量,比如一个在0V到5V之间变化的电压。模拟量与数字量最大的区别在于模拟量是“连续的”、而数字量是“阶跃的”。一个模拟量可以从一个值连续的变为另一个值,就好像给游泳池加水的时候水面一点点的由低到高。而数字量是非连续的,它的相邻值之间存在最小的差,它的变化是阶跃的,非连续的。
对于单片机来说,其内部的运算都是数字式的,所以对于外界的模拟量必须先经过ADC将其转换为相应的数字量单片机才能进一步进行处理。

STM32单片机的ADC配置

在此以STM32F103C8T6为例:该单片机有两个ADC——ADC1,ADC2,每一个ADC又有多个通道。我们可以选择第一个ADC的第一个通道如下图(展开Analog页——选择ADC1——选中IN0)。
在这里插入图片描述

脉冲

脉冲的标准定义实际上一种比较广义的定义,像方波,突变的电压信号等等等都可以算作脉冲。
但在伺服控制中,脉冲特指方波信号。例如接收脉冲控制的伺服驱动器就是通过特定的IO阵脚接收外界的方波脉冲来确定伺服系统的目标位置的。对于单片机来说,产生一个脉冲的实质就是将IO的输出电平进行切换。例如GPIO的PA0引脚将电平从GND抬升到VDD然后又下拉至GND就是产生了一个脉冲信号。

STM32单片机GPIO的配置

既然我们要产生脉冲的输出,显然需要有对应的GPIO作为输出,但除了这个输出我们还需要输入引脚来引入信号以让单片机获得“正转、反转、停止”的命令。除此之外,因为涉及到电机的正反转,所以必然要使用到伺服驱动器的方向针脚,所以GPIO除了一个作为脉冲输出的输出引脚外还需要一个作为方向输出的输出引脚。
在这里我们选择PA3、PA4、PA5作为输入,其分别代表“正转”、“反转”、“停止”信号;PA6、PA7作为输出,其分别用作产生“脉冲”和“方向”信号。
我们可以在STM32Cube的Pinout view界面选择这几个引脚并根据需要选择为“GPIO_INPUT”、“GPIO_OUTPUT”如下图。
在这里插入图片描述

考虑到输入信号的抗干扰性(实际现场往往有干扰信号,尤其是伺服驱动器本身会产生大量的谐波和射频干扰),我们常常采用上拉/下拉电阻来增强抗干扰性。我们可以展开System Core页——选择GPIO——然后将各个GPIO进行相应的配置。在这里,我们选择将PA3、PA4、PA5配置为内部下拉——选择“Pull-down”。在下拉模式下,当没有具体输入时引脚的值将一直为0。
在这里插入图片描述

时钟

时钟是单片机的核心,单片机内的各种功能都是按照时钟来运行的,所以我们需要对时钟进行必要的配置。

由于在进行试验的时候使用的是STM32F103C8T6最小系统板,该电路板上装有8MHz的晶振作为外部高速时钟(HSE)。所以我们在配置时钟时先展开System Core页——选择RCC——选择HSE为“Crystal”。
在这里插入图片描述

STM32单片机的时钟配置

配置可以按照下图进行。
在这里插入图片描述

计时器

单片机内部有多个计时器,计时器在被开启后会根据配置按照计时器时钟进行加减计数,在计数达到后便可以触发特定中断。由此,通过计时器中断方式我们可以较为精确的进行特定动作。

我们要发送脉冲实际上需要考虑伺服驱动器的接收能力,如果单片机发送的脉冲频率大于驱动器的接收频率,驱动器的运行将与实际发送的脉冲偏离。所以我个人并不推荐通过函数或写寄存器的方式拉高电平后马上拉低来产生脉冲的方式。

↓这是不推荐的方式,这种方式的脉冲频率非常高,以至于伺服驱动器无法正确获得脉冲数。

HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);

一种改进的方式是在拉高电平后通过一个延时再拉低电平。但是这种方式降低了单片机CPU的运行效率(大量用于延时的无效运算),故也是不推荐的,但是这种方式本身的确是可以正常运行的。

↓该方式亦不推荐,但伺服可以正常接收脉冲

HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);
for(int i=0;i<65530;i++);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);

在此推荐的脉冲方式为通过计时器中断来产生脉冲。即配置计时器按照一定频率运行,在不需要发送脉冲时,计时器中断触发后完全不进行电平操作;而当需要发送脉冲时,计时器中断触发后进行电平反转。通过这样的方式正常产生脉冲的同时又防止了CPU的大量算力用于延时计算。

STM32单片机的计时器配置

在这里我们使用TIM4计时器,配置上展开Timers页——选择TIM4——选中“Internal Clock”来激活TIM4的进一步配置。在Parameter Setting里修改Prescaler为71,修改Counter Period为99,以产生10kHz的计时器中断。操作完成后需要在NVIC Setting内勾选计时器中断。
在这里插入图片描述

至此,整个前期配置就基本完成了。后续的编程思路为——计时器中断每次触发时,通过
ADC获得电位器读数,通过该读数来影响脉冲频率;当需要发送脉冲时,中断中对PA6的电平进行改变。除此之外中断中还设置有案件的判断等功能。具体程序可由下面链接下载。

ADC控制脉冲频率程序

这篇关于STM32单片机模拟量脉冲调速的STM32Cube配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/400073

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Linux云服务器手动配置DNS的方法步骤

《Linux云服务器手动配置DNS的方法步骤》在Linux云服务器上手动配置DNS(域名系统)是确保服务器能够正常解析域名的重要步骤,以下是详细的配置方法,包括系统文件的修改和常见问题的解决方案,需要... 目录1. 为什么需要手动配置 DNS?2. 手动配置 DNS 的方法方法 1:修改 /etc/res

mysql8.0.43使用InnoDB Cluster配置主从复制

《mysql8.0.43使用InnoDBCluster配置主从复制》本文主要介绍了mysql8.0.43使用InnoDBCluster配置主从复制,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录1、配置Hosts解析(所有服务器都要执行)2、安装mysql shell(所有服务器都要执行)3、

java程序远程debug原理与配置全过程

《java程序远程debug原理与配置全过程》文章介绍了Java远程调试的JPDA体系,包含JVMTI监控JVM、JDWP传输调试命令、JDI提供调试接口,通过-Xdebug、-Xrunjdwp参数配... 目录背景组成模块间联系IBM对三个模块的详细介绍编程使用总结背景日常工作中,每个程序员都会遇到bu

JDK8(Java Development kit)的安装与配置全过程

《JDK8(JavaDevelopmentkit)的安装与配置全过程》文章简要介绍了Java的核心特点(如跨平台、JVM机制)及JDK/JRE的区别,重点讲解了如何通过配置环境变量(PATH和JA... 目录Java特点JDKJREJDK的下载,安装配置环境变量总结Java特点说起 Java,大家肯定都

linux配置podman阿里云容器镜像加速器详解

《linux配置podman阿里云容器镜像加速器详解》本文指导如何配置Podman使用阿里云容器镜像加速器:登录阿里云获取专属加速地址,修改Podman配置文件并移除https://前缀,最后拉取镜像... 目录1.下载podman2.获取阿里云个人容器镜像加速器地址3.更改podman配置文件4.使用po

Vue3 如何通过json配置生成查询表单

《Vue3如何通过json配置生成查询表单》本文给大家介绍Vue3如何通过json配置生成查询表单,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录功能实现背景项目代码案例功能实现背景通过vue3实现后台管理项目一定含有表格功能,通常离不开表单

mybatis映射器配置小结

《mybatis映射器配置小结》本文详解MyBatis映射器配置,重点讲解字段映射的三种解决方案(别名、自动驼峰映射、resultMap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录select中字段的映射问题使用SQL语句中的别名功能使用mapUnderscoreToCame

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java