做影视会员网站/近期舆情热点事件
目录
Encoder 原理
STM32 Encoder 计数原理
模型仿真
模拟Encoder
基于Encoder计算角度和速度
关于启动的仿真
代码生成
运行演示
总结
总结一下基于STM32的Encoder接口的电机运行,相应的仿真和实验都是基于一个1024脉冲的增量式光电编码器,关于模型的建模也是基于实际的实验电机和实际的编码器。
Encoder 原理
实物图如下,2500P/R就是电机机械转360一共有2500个脉冲,实验用的是1024脉冲的,下图仅作参考
线序
内部结构
对于工程应用来说,只需要知道它输出的信号有什么含义。如下:
A和B分别是脉冲数,不同的编码器可能电机转一圈的脉冲数不一样,精度越高,脉冲数越多
定义正转A超前,反转B超前
Z则表示电机已经转完一圈,如下图,机械一圈对应的电角度是2*2pi, 因为实验用的小电机是两对极的。
从编码器的原理来看,想要得到电机的角度就需要计算脉冲数,当转速很高,脉冲频率也会很高,这个时候靠定时器来采样脉冲数变会变得不现实。这个时候就需要专用的Encoder接口了。
STM32 Encoder 计数原理
Stm32就提供了一个Encoder接口,根据其原理配置了Encoder的接口,工作原理如下,A对应TI1, B对应TI2,电机正向转动时计数器根据输入的AB信号,每一个上升沿加1,每一个下降沿也加1,这样对于1024脉冲的编码器,转一圈计数值就是4096。也可以配置成其他模型,这里我们配置成4096个计数值。
Z信号的输入配置成一个外部中断,每触发一次把计数值清零,这样的话角度的计算值就限制在了0-4096也就对应成0-4pi的电角度了。如果不用外部中断触发的话直接读取计数器的值,这样角度就会从0-2^32。F401的Timer 2 计数寄存器是32位的。计算角度时对4096取模即可。这里实验配置成0-2^32。
模型仿真
根据STM32的Encoder接口可以知道,MCU底层能传递的只有0-2^32,反向递减的计数信息,因此生成代码的部分需要读取计数值,模拟Encoder的输出的角度信息,也就是模拟MCU的Encoder接口,最后加上控制系统把系统闭环。
模拟Encoder
如下,分别模拟了实际Encoder的信号以及STM32Encoder接口的输出,和实物一致。
ABZ,以及当前电机的电角度
正转: 反转:
经过STM32的Encoder接口后,取模后
正转: 反转:
基于Encoder计算角度和速度
底层Encoder接口拿到了脉冲计数,因此应用层需要把计算值转换成角度和速度信息,这部分是要生成代码的。在MCU里,角度的计算也放到ADC中断,也就是FOC计算的周期,这里是10Khz.
两者角度完全重合在一起
实际转速和Encoder计算的速度
关于启动的仿真
由于仿真的时候Encoder的初始计数值是0,电机的初始角度也是0,所以电机能正常启动并运行,但是实际中电机的初始角度和Encoder不可能完全在0位置对应且不变,这里通过模拟改变电机的初始位置。
如电机的初始位置改成10度,电机的实际位置和Encoder计算的角度就会有一个固定角度差,相电流也会因此变大。
这个时候这里通过给定初始角度和Id, 让电机固定在一个初始位置,如0,这样就已知电机的初始角度为0,同时清除Encoder的计数值。如下是启动角度的变化:
其中,黄色是电机的真实角度,蓝色是Encoder计算出来的角度,红色是重置计数值的编码器的计数值计算出来的角度。电机初始不在零位置。
代码生成
底层只需要读取出Encoder的计数值,传递给模型生成的接口,启动前固定初始位置标志Encoder_Rest状态标志,当固定初始位置时把Encoder的计数值初始为0。
集成代码,并下载到MCU
运行演示
在小风扇上安装一个编码器,并和开发板的Hall接口连接(接口支持Hall和Encoder),编码器和电机用联轴器连接,简单固定下进行测试。
ABZ编码器运行演示
总结
本实验通过仿真模拟了STM32单片机的Encoder接口,并对其进行角度计算,从仿真系统上实现了整个过程,也把启动和运行的流程通过模型生成代码在硬件上实现,验证了模型的可靠性。
相关文章:

Simulink 自动代码生成电机控制:STM32 Encoder编码器使用总结
目录 Encoder 原理 STM32 Encoder 计数原理 模型仿真 模拟Encoder 基于Encoder计算角度和速度 关于启动的仿真 代码生成 运行演示 总结 总结一下基于STM32的Encoder接口的电机运行,相应的仿真和实验都是基于一个1024脉冲的增量式光电编码器,关于…...

《计算机系统基础》——计算机系统导论
文章目录《计算机系统基础》——计算机系统导论计算机的基本组成程序开发与执行过程机器语言汇编语言高级语言程序的转换处理程序的数据流动计算机系统层次结构早期计算机系统1GL2GL现代计算机系统3GL4GL指令集体系结构《计算机系统基础》——计算机系统导论 🚀接下…...

华为OD机试 - 获取最大软件版本号(JavaScript) | 机试题算法思路 【2023】
获取最大软件版本号 题目 Maven版本号定义,<主版本>.<次版本>.<增量版本>-<里程碑版本> 举例3.1.4-beta 其中,主版本和次版本都是必须的,主版本,次版本,增量版本由多位数字组成,可能包含前导零,里程碑版本由字符串组成。 <主版本>.<…...

python--pygame实现各级菜单栏目设置
随着学期的开始,同学们也即将进入计算机相关课程的课程设计了,对于python课程设计的小伙伴,可能有些是需要利用pygame来写应该小游戏的,因为最近很多小伙伴同学也在想我要一些基于python的pygame模块做的游戏项目,此外…...

C++Primer15.3节练习
练习15.11: debug定义如下所示: //基类 class Quote { public:Quote() default;Quote(const std::string& book,double sales_price):bookNo(book),price(sales_price){ }std::string isbn()const { return bookNo; }virtual double net_price(st…...

解决实际项目中stalled时间过久的问题
背景 在公司参与了一个做度量统计的项目,该项目的特点是页面上的表格、卡片、图标非常多。项目经常出现一种情况:页面加载速度较慢,开始怀疑是由于计算量较大,后端接口相应速度较慢。优化了一版后端接口后(加缓存、优…...

vim编辑器
目录 前言 1.下载安装vim 2.三种模式互换 3.vim配置 前言 vim是从 vi 发展出来的一个文本编译器。 代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。 简单的来说, vi 是老式的字处理器,不过功能已经很齐全了&am…...

Python 使用 pip 安装 matplotlib 模块(秒解版)
长话短说:本人下载 matplotlib 花了大概三个半小时屡屡碰壁,险些暴走。为了不让新来的小伙伴走我的弯路,特意创作本片文章指明方向。 1.首先需要下载 python 我直接是在电脑自带的软件商店里下载的,图方便,当然在官网下…...

python-openCV—入门到精通系列讲解(配效果图)- 总览
前言: python-openCV是一种强大的计算机视觉库,可用于处理图像和视频等多媒体数据。它可以帮助您快速处理和分析图像和视频数据,并且在计算机视觉领域具有广泛的应用。在学习python-openCV时,一个速查手册是一个必不可少的工具。 你可以当本专栏当做一个速查手册,可以看…...

智能小车红外避障原理
红外避障电路红外避障电路由电位器R17,R28;发光二极管D8,D9;红外发射管 D2,D4和红外接收管D3,D5和芯片LM324等组成,LM234用于信号的比较,并产生比较结果输出给单片机进行处理。智能小车红外避障…...

(三十六)Vue解决Ajax跨域问题
文章目录环境准备vue的跨域问题vue跨域问题解决方案方式一方式二上一篇:(三十五)Vue之过渡与动画 环境准备 首先我们要借助axios发送Ajax,axios安装命令:npm i axios 其次准备两台服务器,这里使用node.j…...

【CSAPP】整数表示
文章目录整型数据类型无符号数的编码补码编码确定大小的整数类型练习1练习2有符号数和无符号数之间的转换练习C语言中的有符号数与无符号数练习扩展一个数字的位表示练习1练习2截断数字练习关于有符号数与无符号数的建议练习1练习2使用 位编码整数有两种不同的方式:…...

Python基础2
1. python函数定义 函数定义语法: def 函数名(传入参数): 函数体 return 返回值 —————————————— 参数如果不需要,可以省略返回值如果不需要,可以省略函数必须先定义在使用 注意ÿ…...

【项目立项管理】
项目立项管理 很杂,可以根据左边的列表查看自己不会的 。。。 立项管理主要是解决项目的组织战略符合性问题 开发所需的成本和资源属于经济可行性 承建方组织资源和项目的匹配程度 内部立项目的: 为项目进行资源分配,确定项目绩效目标&am…...

【验证码的识别】—— 极验验证码的识别
前言 (结尾有彩蛋欧) 目前,许多网站采取各种各样的措施来反爬虫,其中一个措施便是使用验证码。随着技术的发展,验证码的花样越来越多。验证码最初是几个数字组合的简单的图形验证码,后来加入了英文字母和混…...

华为OD机试 -旋转骰子(Python) | 机试题算法思路 【2023】
最近更新的博客 华为OD机试 - 卡片组成的最大数字(Python) | 机试题算法思路 华为OD机试 - 网上商城优惠活动(一)(Python) | 机试题算法思路 华为OD机试 - 统计匹配的二元组个数(Python) | 机试题算法思路 华为OD机试 - 找到它(Python) | 机试题算法思路 华为OD机试…...

C生万物 | 模拟实现库函数strcpy之梅开n度
文章目录【梅开一度】:观察库函数strcpy()的实现【梅开二度】:模仿实现strcpy()【梅开三度】:优化简练代码【梅开四度】:assert()断言拦截【梅开五度】:const修饰常量指针【梅开六度】:还可以有返回值哦&am…...

家庭理财,轻松记账修改收支记录这样操作
我们在记账的时候难免会出现记错或者想修改的地方,又或者是想将之前太久没有用的记账记录删除掉,今天,小编就教大家如何修改收支记录,一起接着往下看吧! 第一步,运行【晨曦记账本】在软件主界面中ÿ…...

河南工程学院2.17蓝桥杯培训
乘法口诀数列:https://www.acwing.com/problem/content/3466/ 剪绳子:https://www.acwing.com/problem/content/68Sin SinSine之舞:http://lx.lanqiao.cn/problem.page?gpidD5272 数列:https://www.acwing.com/problem/content/…...

【JavaSE】数据类型与变量
JAVA之父:詹姆斯高斯林 (James Gosling) 前言: 大家好,我是程序猿爱打拳。今天我给大家讲解的是Java基础中的数据类型。主要讲解的是各个类型的应用场景以及注意事项。 目录 1.数据类型 2.常量与变量 2.1常量 2.2变…...

生成模型技术发展过程
生成模型生成模型和判别模型的差异生成模型的目标是在给定了数据集D,并且假设这个数据集的底层分布(underlying distribution)是Pdata,我们希望够近似出这个数据分布。如果我们能够学习到一个好的生成模型,我们就能用这个生成模型为下游任务做…...

计算机网络第2章(物理层)学习笔记
❤ 作者主页:欢迎来到我的技术博客😎 ❀ 个人介绍:大家好,本人热衷于Java后端开发,欢迎来交流学习哦!( ̄▽ ̄)~* 🍊 如果文章对您有帮助,记得关注、点赞、收藏、…...

4564: 保留尾部*
描述规定输入的字符串中只包含字母和*号,除了尾部的*号之外,请将字符串中其他*号全部删除。输入输入数据包括一串字符串,只包含字母和*,总长度不超过80。输出输出按要求删除*后的字符串。样例输入*******A*BC*DEF*G****样例输出AB…...

安卓项目搭建grpc环境
本篇文章使用的IDE是Android Studio。这里先吐槽一句,安卓项目搭建grpc环境,不管是引入插件还是引入第三方库,对于版本的要求都极为苛刻,一旦版本不匹配就会报错,所以对于版本的搭配一定要注意。 下面介绍的这个版本搭…...

Flink01: 基本介绍
一、什么是Flink 1. Flink是一个开源的分布式,高性能,高可用,准确的流处理框架 (1)分布式:表示flink程序可以运行在很多台机器上, (2)高性能:表示Flink处理性…...

设计模式之单例模式
文章の目录一、什么是单例模式二、如何实现单例模式1、利用JavaScript中的全局对象2、静态成员改造参考写在最后一、什么是单例模式 单例模式也称为单体模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点。 举个栗子:一个班级只有一…...

[oeasy]python0086_ASCII_出现背景_1963年_DEC_PDP系列主机_VT系列终端
编码进化 回忆上次内容 上次 回顾了 字符编码的新陈代谢 ibm 曾经的EBCDIC 由于 字符不连续导致 后续 出现无数问题 随着 网络的发展 数据交换的 需要原来的小隐患现在 产生了 巨大问题 Bemer 联合各方巨头 想要推出 字符连续的编码集 这新编码集 具体长什么样 呢࿱…...

基于FFmpeg实现的无声音屏幕录制
UI自动化测试时,有时需要进行录屏操作,这时我们是不需要声音的,我们可以通过FFmpeg进行简单的录制工作。 以下是在windows10环境下,基于FFmpeg实现的简单录制: Ffmpeg简介: 功能:有非常强大的…...

【项目精选】基于JSP物流信息网(论文+源码+视频)
点击下载源码 近年来,随着时代的进步,社会随之不断发展,经济也快速发展起来了,人民的消费水平在不断地提高,平常的实体店消费已经不能满足人们的需求;在者,互联网技术的不断发展也为电子商务的兴…...

linux异步IO编程实例分析
在Direct IO模式下,异步是非常有必要的(因为绕过了pagecache,直接和磁盘交互)。linux Native AIO正是基于这种场景设计的,具体的介绍见:KernelAsynchronousI/O (AIO)SupportforLinux。下面我们就来分析一下…...