调节步进电机速度时调PSC和调ARR的区别

在步进电机控制中,调节速度通常是通过改变脉冲频率实现的。代码中选择调节ARR(Auto-Reload Register)而非PSC(Prescaler)的原因如下:

1. ARR 与 PSC 的核心区别

• ARR(自动重载寄存器):决定定时器的计数周期(即脉冲频率)。

 公式:脉冲频率 = 定时器时钟 / (ARR + 1)  ◦ 优点:直接控制输出频率,细粒度调整(ARR 取值范围大,如 0-65535)。

• PSC(预分频器):对时钟源分频,改变计数基频。

 公式:计数频率 = 定时器时钟 / (PSC + 1)  ◦ 缺点:调整范围有限(PSC 通常较小,如 0-65535),且改变 PSC 需重新初始化定时器,效率低。

2. 代码中选择 ARR 的原因

在您的代码中,速度调节通过 SetMotor1RPM 和 SetMotor2RPM 函数实现:

void SetMotor1RPM(float rpm) {const uint32_t timer_clock = 84000000; // 84MHz 时钟const uint32_t steps_per_rev = 3200;   // 每转步数float freq = (rpm * steps_per_rev) / 60.0f; // 计算所需频率uint32_t arr = (uint32_t)(timer_clock / freq) - 1; // 关键:通过 ARR 设置频率__HAL_TIM_SET_AUTORELOAD(&htim5, arr); // 动态修改 ARR__HAL_TIM_SET_COMPARE(&htim5, TIM_CHANNEL_3, arr / 2); // 占空比 50%
}

为何不调 PSC?

动态调速需求:步进电机在梯形速度剖面(加速/匀速/减速)中需频繁调整频率。修改 ARR 只需一条指令,而修改 PSC 需停止定时器并重新配置,破坏实时性。

• 精度要求:例如在 84MHz 时钟下:

 ◦ 若用 PSC 调速:PSC 每增加 1,频率跳跃较大(如 84MHz → 42MHz → 28MHz...),无法精确匹配 RPM。◦ 用 ARR 调速:ARR 从 100 到 65535,可精确生成 1.28kHz 到 840kHz 的脉冲,适配不同 RPM。

• 代码简化:固定 PSC 为 0(即无分频),专注 ARR 调整,避免硬件重新初始化。

  1. PSC 的适用场景

PSC 通常在以下情况使用:
• 极低速需求:若 RPM 极低(如 0.1 RPM),需超低脉冲频率(如 5.3Hz),此时可设 PSC 分频以扩大 ARR 范围。

• 时钟源超频:定时器时钟远高于所需频率时(如 84MHz 驱动 1kHz 脉冲),设 PSC 分频可避免 ARR 溢出(>65535)。

代码选择 ARR 调速是因为:

  1. 直接控制脉冲频率,动态响应快。
  2. 精度高,适配步进电机的实时梯形速度剖面。
  3. 避免频繁操作 PSC 导致的性能损失。

PSC 更适合超低速或时钟分频场景,在您的代码中无需修改。

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

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

相关文章

在 AKS 中运行 Azure DevOps 私有代理-1

简介 配置 Azure DevOps 私有代理的传统方法是将其部署在虚拟机 (VM) 上。然而,一个有趣的替代方案是利用 Azure Kubernetes 服务 (AKS) 来实现此目的。 本文将指导您如何使用 Helm Chart 在 AKS 集群中设置 Azure DevOps 私有代理,并提供该过程的分步说明。 在 AKS 中部署…

C# _Json数据

目录 1、添加Json库 2、数据序列化(对象转 JSON)和反序列化(JSON 转对象)操作 3、序列化 创建和读取Json数据 创建Json数据 定义一个CreateJson方法 读取 解析 Json数据 定义一个ReadJson方法 4、程序运行结果 在 C# 中&…

JavaScript 原始值与引用值

JavaScript 原始值与引用值 ECMAScript变量可以包含两种不同类型的数据:原始值和引用值。 原始值(primitive value)就是最简单的数据,引用值(reference value)则是由多个值构成的对象。 保存原始值的变量是…

linux中挂载磁盘和卸载

查找磁盘 找到你想要挂载的磁盘。可以使用lsblk或fdisk -l命令来查看系统中所有的磁盘和分区信息。 lsblk 对数据盘进行分区 在fdisk交互界面里,按以下步骤操作 fdisk /dev/vdb- 输入n来创建新分区。 - 按照提示设置分区的起始扇区、结束扇区等信息,…

java8学习笔记-Stream流

JDK1.8新增了Stream类,从而把函数式编程的风格引入到Java语言中,Stream类的API提供了强大的功能,使用Stream后,可以写出更加强大,更加简洁的代码首先,Stream流有一些特性:Stream流不是一种数据结…

Flutter开发 dart语言基本语法

特点 Dart语言支持JIT与AOT。 Dart语言采用单线程模型。 Dart语言是强类型编程语言,但是允许弱类型语言式编程。 基本语法 1.变量和常量 变量 var、object、dynamic关键字或数据类型显式声明变量。 命名规则: 变量名称必须由数字、字母、下划线或$组成&a…

SpringBoot:基于 Redis 自定义注解实现后端接口防重复提交校验(幂等操作)

SpringBoot:基于 Redis 自定义注解实现后端接口防重复提交校验(幂等操作)可基于 时间间隔 和 用于幂等判断的参数名称 实现防重复提交校验 客户端发送请求 ↓ [Spring Boot 应用入口]↓ ┌─────────────────────────…

【语音技术】意图与语料

目录 1. 意图 1.1. 意图分类 1.1.1 入口意图(Entry Intent) 1.1.2 对话意图(Dialog Intent) 1.2. 意图类型切换操作步骤 2. 语料 2.1 语料分类详解 2.2 语料编写规范详解 2.3 标签符号深度说明 3. 词槽 3.1 符类型要求 …

【MySQL集群架构与实践5】使用Docker实现水平分片

目录 一. 在Docker中安装ShardingSphere 二. 实践:水平分片 2.1 应用场景 2.2 架构图 2.3 服务器规划 2.4 创建server-user容器 2.5 创建server-order0和server-order1容器 2.6.日志配置 2.7 数据节点配置 2.8.测试数据节点 2.8.1.测试server_order0.t_or…

视觉图像处理中级篇 [1]—— 彩色照相机的效果与预处理

在工业检测中,黑白相机虽应用广泛,但在应对颜色差异检测时往往力不从心。彩色照相机凭借其对色彩信息的精准捕捉,成为复杂场景下的理想选择,而预处理技术则进一步释放了其性能潜力。一、彩色照相机的效果检查盖子上的金色标签可以…

使用 BERT 的 NSP 实现语义感知切片 —— 提升 RAG 系统的检索质量

在构建 Retrieval-Augmented Generation(RAG)系统时,文档的切片方式至关重要。我们需要将长文本切分成合适的段落(chunks),然后存入向量数据库进行召回。如果切得太粗,会丢失上下文细节&#xf…

使用STM32CubeMX生成的STM32CubeIDE工程在更改工程名后编译失败问题解决

0 问题描述 使用STM32CubeMX生成STM32CubeIDE工程,然后使用STM32CubeIDE改名后编译提示如下错误: 1 问题原因及解决办法 1.1 问题原因 原因在于更名后STM32CubeIDE没有自动更新引用关系,这是因为我们使用STM32CubeMX生成代码时没有勾选在根目录下生成: 取消勾选在根目…

8月3日星期日今日早报简报微语报早读

8月3日星期日,农历闰六月初十,早报#微语早读。1、广西防城港:奔驰女司机身份已查清,结果将统一对外发布;2、陈艺文、陈佳包揽游泳世锦赛女子跳水三米板金银牌;3、九省份保险业已赔付暴雨灾害损失5.2亿元&am…

wxPython 实践(六)对话框

wxPython 实践(一)概述 wxPython 实践(二)基础控件 wxPython 实践(三)页面布局 wxPython 实践(四)事件响应 wxPython 实践(五)高级控件 wxPython 实践&#x…

MATLAB科研数据可视化技术

互联网的飞速发展伴随着海量信息的产生,而海量信息的背后对应的则是海量数据。如何从这些海量数据中获取有价值的信息来供人们学习和工作使用,这就不得不用到大数据挖掘和分析技术。数据可视化分析作为大数据技术的核心一环,其重要性不言而喻…

文明存续的时间博弈:论地球资源枯竭临界期的技术突围与行动紧迫性

摘要当地球资源消耗以指数级速度逼近生态承载力极限,人类文明正面临“存续还是消亡”的终极抉择。本文基于地球资源枯竭的实证数据与技术突破的可行性分析,揭示文明存续的时间窗口已进入不可逆临界期(2040-2070年),论证…

Elasticsearch 8.19.0 和 9.1.0 中 LogsDB 和 TSDS 的性能与存储改进

作者:来自 Elastic Martijn Van Groningen 探索 TSDS 和 LogsDB 的最新增强功能,包括优化 I/O、提升合并性能等。 Elasticsearch 带来了许多新功能,帮助你为你的使用场景构建最佳搜索解决方案。通过我们的示例笔记本深入学习,开始…

cs336之注意pytorch的tensor在哪里?(assert的使用)

问题 记住:无论何时你在pytorch中有一个张量tensor,你应该始终问一个问题:它当前位于哪里? 注意它在CPU还是在GPU中。要判断它在哪里,可以使用python的assert断言语句。 assert断言 在 Python 中,assert 是…

Mysql 分区表

分区表是将一张表分成多张独立子表,每个子表是一个区,目的是提高查询效率。 从 server 层来看,只有一张表。但是从引擎层来看,是多张表,对应多个.idb文件。引擎层访问数据只访问特定分区表,也只对特定分区表…

Makefile 入门与实践指南

Makefile 是用于 make 工具的配置文件,它定义了如何编译和链接你的项目,让构建过程自动化。一、核心概念 make 的核心思想是 “目标”(Target) 和 “依赖”(Dependencies): 目标 (Target)&#…