一、编码器测速重要参数

        有刷电机编码器参数(其他的后面会慢慢提及,也可以在某宝看)

        1. 编码器分辨率(PPR)

        2. 编码器工作电压 

        3. 电机减速比 例如 30:1 指的就是电机减速轴转1圈,编码器转30圈。

        注意明确一个关系,大部分直流减速电机的机械结构,是编码器套在主轴,而电机轴是经过机械传动减速后转动的,所以我们把这类电机叫做减速电机。

        参数1和3到底有什么用呢?

        举个栗子,我们的编码器在VOFA上的测速结果为300RPM,而编码器接口配置为100方式计数,即四倍频,那么:

        电机减速转速  =  主轴转速  /  减速比

                                =  编码器转速 / 减速比

                  =  (计数器接收脉冲个数 / 四倍频 / PPR / 减速比)*  测速中断频率  

        实际代码中,还需要考虑时间单位s->min的换算

二、Encoder的HAL库函数

        (1)HAL_TIM_Encoder_Init()

        初始化定时器基础参数,以及编码器接口,如果用的是Cube则不需要编写。

        (2)HAL_TIM_Base_Start_IT()

        定时器外设若需要使用中断功能(比如编码本身和编码过程中断回调处理),则必须提前使能定时器base中断。

        (3)HAL_TIM_Encoder_Start()

        开启编码器接口通道,与PWM_start有异曲同工之妙。

        (4)定时器更新中断回调函数

         有两种处理方式,一种是单定时器中断,通过使用encoder本身的更新中断,当计数值达到ARR时候,自动进入中断处理测量的脉冲数。

         第二种是Encoder中断+其他定时器中断,通过其他定时器预设定的中断频率,来对速度采样频率进行自由的改动,不受编码器采样频率的限制,但如果中断频率设置过高会造成严重误差

        (5)__HAL_TIM_IS_COUNTING_DOWN()

        在无CubeMX时,用于读取DIR位,进而判断计数方向。

        有Cube时,直接判断编码器反馈数值的正负。

三、Encoder的定时器配置

        (1)配置编码器模式

                TI1与TI2都检测,也就是四倍频

                

        (2)配置Encoder双输入通道参数

                理论上两个通道参数应该一致。

                因为是100法计数,根据功能表规则,我们的计算规则应该是上升沿有效,所以边沿极性选择为上升沿。

                IC采用直接选择

                分频因子不分频,如果分频了,那我们何必用四倍频呢?

                接下来,输入滤波器可以暂时先设置为10。它起到一个什么作用呢?

                通俗的讲,它把一个电平信号扫描十次,然后判断是否有高低反转的不稳定情况,如果信号不稳定,则丢弃这一帧。

                

                实际上,它是一个低通滤波器,对高频干扰信号做衰减。你的参数设置的越大,它扫描次数越多,过滤高频尖刺的能力也就更强,但芯片工作量也会随之增加。(滤波过程可以近似参考模拟线路的0.1uF的RC滤波器。图画的可能不标准,具体内容请见隔壁DSP)

                

                (3)中断方法1:Encoder更新中断

                我的这款主控找不到Encoder更新中断开启,可能是因为Cube封装了Encoder的更新中断的总计数值更新过程,如果要找得去ISR文件看看,下面介绍另外一种方法。

                (4)中断方法2:另开定时器进行中断

                为了节省资源,我选了基本定时器做定时器中断。

                这里设置中断频率为10Hz,也就是0.1s中断一次,对于我自己的外设来说效果比较理想,实际工程中需要不断调试 中断频率 和 PWM的ARR 去测试它的开环测量准确度。          

 四、实战例程

  (1)使能中断功能并开启编码器

                虽然我们没手写编码器的ISR,但是我们还是需要它的中断测量总计数值,它没有被禁用只是在后台默默的为我们计数。

		HAL_TIM_Base_Start_IT(&htim6);HAL_TIM_Base_Start_IT(&htim2);  HAL_TIM_Encoder_Start(&htim2, TIM_CHANNEL_ALL);	

                 我们使用GetCounter函数来一段时间内的获取编码值,获取完立刻清零,不能放在其他位置,否则会因为其他轮询代码的运行造成结果偏小的误差(我们下一次中断还要用!)

                至于转速查看的方法,我不建议用串口打印,因为它背后调用了stdio库,运行速度肯定没有VOFA+的float协议来的快。

                VOFA+的标准用法,我会在补充章节分享。

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){if(htim==&htim6){printf("entered");int16_t val = (int16_t)__HAL_TIM_GetCounter(&htim2);__HAL_TIM_SET_COUNTER(&htim2, 0);float RPM =(float)((val/7.0/50.0/4.0)*600);Vofa_data(RPM);
//			printf("RPM: %.3f \r \n",RPM);
//    __HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_1,BINMotor_SpeedtoPulse(BACK,L_AddPID.pwm_add));dc_motor_pwmset(RPM,&spdPID);}}

                

                

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

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

相关文章

在C#中,可以不实例化一个类而直接调用其静态字段

这是因为静态成员(static members)属于类本身,而不是类的实例。这是静态成员的核心特性1. 静态成员属于类,而非实例当用static关键字修饰字段、方法或属性时,这些成员会绑定到类级别,而不是实例级别。它们在…

Win11 安装 Visual Studio(保姆教程 - 更新至2025.07)

Visual Studio 安装(保姆教程 - 更新至2025.07) 前言安装须知安装过程1. 下载安装包2. 安装3. 注册4. 创建桌面快捷方式 前言 本教程针对 非计算机相关专业的小白用户 ,手把手教你如何基于 win11 操作系统 安装 Visual Studio 2022。安装搭载…

工商银行杭州软开校招面经分享

近年来,央国企成为了很多求职者的首选,无论是校招还是社招。不过,在选择央国企的时候,还是尽量要选择垄断性或者盈利多的。 昨天看到一份 2024 年中国企业 500 强榜单中提到的最赚钱的十家央国企的名单,给大家分享一下。 排名企业名称成立时间主要业务描述2024年营收(万…

李宏毅genai笔记:推理

0 思考越多效果越好 可以把算力投入在training的时候,也可以投入在testing上面 连起来的线表示表现是差不多的,越高分(越右上方)越好 同样-1000分,可以训练时候用力较少,test的时候多用点算力 但是training…

使用SSH隧道连接远程主机

概述 SSH(Secure Shell 的缩写)是一种网络协议,通过使用身份验证机制,是两台计算机进行加密通信。 SSH 主要用途是登录服务器,还可以作为加密通信的中介,充当两台服务器之间的通信加密跳板,这个功能称为端口转发(port forwarding),又称 SSH 隧道(tunnel)。 端口…

数据结构---链表理解(二)

文章目录 二、链表2.1 链表初始化2.2 单链表2.2.1 单链表---头插法2.2.2 单链表---单链表遍历2.2.3 单链表---尾插法2.2.4 单链表---在指定位置插入数据2.2.5 单链表---删除指定位置节点2.2.6 单链表---获取链表长度2.2.7 单链表---释放链表 二、链表 暂时到这一步你就理解为&a…

Playnite使用指北 —— 一个优秀的本地化游戏管理工具

为何我们使用 Playnite? 首先我们需要知道 Playnite 是什么,如果你有过用 emby 等管理过电影影视的经验,你可能会对这种工具感到熟悉: Playnite 是一个开源的本地化的游戏管理软件,可以实现多平台的管理(S…

时间与空间复杂度详解:算法效率的度量衡

一、为什么需要复杂度分析&#xff1f; 想象你正在开发一个手机通讯录应用&#xff0c;需要实现联系人搜索功能。你有两种算法可以选择&#xff1a; // 算法A&#xff1a;线性搜索 public Contact linearSearch(List<Contact> contacts, String name) {for (Contact c …

408第三季part2 - 计算机网络 - 交换机

理解 题目 如果你这么做 那你完了&#xff0c;因为这种叫存储转发 直通只转目的地址 b 再次理解 A发数据到交换机里想给B 然后交换表会记录A的MAC地址和端口 然后因为交换表找不到B&#xff0c;所以A会把BCD全部肘一遍&#xff08;广播&#xff09;&#xff0c;最终只有B会…

从零开始开发纯血鸿蒙应用之探析仓颉语言与ArkTS的差异

探析仓颉语言与ArkTS的差异 〇、前言一、IDE 的支持程度不同二、内置组件的使用方式不同三、页面路由实现方式的不同四、总结 〇、前言 截止到本文发布的日期为止&#xff0c;鸿蒙官方所推荐的开发原生鸿蒙应用的语言&#xff0c;有两种&#xff0c;分别是扩展自 Typescript 的…

Cursor/VScode ,点击运行按钮,就打开新的终端,如何设置为在当前终端运行文件而不是重新打开终端----一招搞定篇

我发现就是&#xff0c;我运行.py&#xff0c;点击完运行按钮&#xff0c;就给我重新打开一个终端&#xff0c;然后新的终端是在base环境中的&#xff0c;就跟麻烦 还得在当前终端输入python3 test.py 来运行文件。能不能修改。1、打开cursor或者vscode 。 同时按下 ctrlshiftp…

【STM32实践篇】:I2C驱动编写

文章目录I2C 物理层I2C 协议层1. 数据有效性2. 起始和停止信号3. 应答响应4. 总线的寻址方式5. 数据传输5.1 主机向从机发送数据5.2 主机由从机中读数据5.3 I2C通信复合格式I2C 驱动编写1. 配置 SCL 和 SDA2. I2C起始信号和停止信号3. 等待从设备应答4. 主机发送ACK和NACK信号5…

ragflow本地部署教程linux Ubuntu系统

以下是一份在 Ubuntu 系统上本地部署 RAGFlow 的详细教程。 一、基础环境准备 1.硬件要求 –CPU ≥ 4核 –RAM ≥ 16 GB –磁盘空间 ≥ 50 GB&#xff08;建议 SSD&#xff09; 2.系统配置 更新系统 sudo apt update && sudo apt upgrade -y 设置内核参数&#xff…

[netty5: WebSocketClientHandshaker WebSocketClientHandshakerFactory]-源码分析

在阅读这篇文章前&#xff0c;推荐先阅读以下内容&#xff1a; [netty5: WebSocketFrame]-源码分析[netty5: WebSocketFrameEncoder & WebSocketFrameDecoder]-源码解析 WebSocketClientHandshakerFactory WebSocketClientHandshakerFactory 是用于根据 URI 和协议版本创…

4.2 如何训练⼀个 LLM

⼀般⽽⾔&#xff0c;训练⼀个完整的 LLM 需要经过图1中的三个阶段——Pretrain、SFT 和 RLHF。 4.2.1 Pretrain 预训练任务与架构 任务类型&#xff1a;采用因果语言模型&#xff08;CLM&#xff09;&#xff0c;通过预测下一个 token 进行训练&#xff0c;与传统预训练模型…

Qt中的QObject::moveToThread方法详解

一、QObject::moveToThread方法QObject::moveToThread()是Qt框架中一个非常重要的功能&#xff0c;它允许改变QObject及其子对象的线程关联性。这个功能在多线程编程中特别有用&#xff0c;可以将耗时操作移到工作线程执行&#xff0c;避免阻塞主线程/GUI线程。基本用法void QO…

【9】用户接入与认证配置

本文旨在帮助网络管理员在 SD-WAN 环境中实现安全、稳定的用户接入与认证策略,涵盖本地/远程认证、权限管理、密码策略、SSH、会话控制等关键配置要素。 1.密码策略与账户安全 从 IOS XE SD-WAN 17.3.1 起,Cisco 引入密码强化功能,用于统一用户密码的复杂度与有效性要求。密…

第十六节:第三部分:多线程:线程安全问题、取钱问题的模拟

线程安全问题介绍&#xff1a;取钱的线程安全问题 取钱的线程安全问题 取钱案例需求分析 线程安全问题出现的原因 代码&#xff1a;模拟线程安全问题&#xff08;上述取钱案例&#xff09; Account类&#xff08;账户类&#xff09; package com.itheima.day3_thread_safe;pu…

APE:大语言模型具有人类水平的提示工程能力

摘要 通过以自然语言指令作为条件输入&#xff0c;大型语言模型&#xff08;LLMs&#xff09;展现出令人印象深刻的通用计算能力。然而&#xff0c;任务表现严重依赖于用于引导模型的提示&#xff08;prompt&#xff09;质量&#xff0c;而最有效的提示通常是由人类手工设计的…

X86 CPU 工作模式

1.概述 1.实模式 实模式又称实地址模式&#xff0c;实&#xff0c;即真实&#xff0c;这个真实分为两个方面&#xff0c;一个方面是运行真实的指令&#xff0c;对指令的动作不作区分&#xff0c;直接执行指令的真实功能&#xff0c;另一方面是发往内存的地址是真实的&#xff…