当前位置: 首页 > news >正文

电机测试方法的介绍与功能实现(T测试方法)

目录

概述

1 理论介绍

2 实现原理

2.1 旋转式编码器原理

2.2 系统实现框图

2.3 测速原理 

2.4 计算速度值

3 STM32Cube配置项目

3.1 软件版本信息

3.2 配置项目

4 代码实现

4.1 电机速度控制

4.2 速度计算函数

4.3 功能实现

5 测试


概述

本文主要介绍测试电机速度方法(T测试方法)的实现原理与功能实现,笔者使用STM32F103芯片作为主控,并使用光电编码器作为测速装置,基于定时器和PWM实现电机速度测试和速度控制功能。还应该STM32Cube搭建项目实现测速的功能。

1 理论介绍

T 法:又叫做周期测量法。这种方法是建立一个已知频率的高频脉冲并对其计数,计数时间由捕获到的编码器相邻两个脉冲的间隔时间 T 决定,计数值为 M1。设编码器单圈总脉冲数为 C,高频脉冲的频率为 F0,则转速 n 的计算公式为:


公式中的参数介绍:

C:   编码器单圈总脉冲数

F0:  高频脉冲频率

M1:  编码器相邻两个脉冲的间隔时间计数

从公式可以看出,在电机高转速的时候,编码器脉冲间隔时间 TE 很小,使得测量周期内的高频脉冲计数值 M1 也变得很少,导致测量误差变大,而在低转速时, TE 足够大,测量周期内的 M1 也足够多,所以 T 法和 M 法刚好相反,更适合测量低速
 

2 实现原理

2.1 旋转式编码器原理

旋转编码器内部大都由码盘、光电检测装置和信号处理电路等部分构成。码盘上刻了若干圈线槽,线槽等距并且可透光,当码盘旋转时就会周期性的透过和遮挡来自光电检测装置的光线,这样检测装置就会周期性的生成若干电信号。但是这些电信号通常比较微弱,需要加入一套处理电路对信号进行放大和整形,最后把信号整形为脉冲信号并向外输出。

旋转式编码器的原理示例图:

2.2 系统实现框图

系统使用STM32F103作为主控芯片,TIMER-8定时器用于产生两路PWM信号驱动电机;使用IO 输入中断捕捉编码器的脉冲信号;TIMER-7产生高频信号用于统计两个编码器脉冲之间的高频脉冲个数。

2.3 测速原理 

参数介绍:

M0:  两个编码器脉冲之间的时间间隔

F0:  高频脉冲的个数

测速原理描述:

Step-1: 当M0上升沿时开启F0的计数

Step-2:    当M0第二次发生上升沿中断时,停止计数

2.4 计算速度值

已知参数:

轮胎直径(R): 6.8 (cm)

码盘细分数(一个周长):20个间隔

一个M0时间内测试到F0的:CNT

F0的周期为:    T(us)

计算公式如下:

V = (R/20)/(T*CNT)(cm/s)

3 STM32Cube配置项目

3.1 软件版本信息

软件名称版本信息
STM32CubeSTM32CubeMX 6.11
STM32 HALSTM32Cube_FW_F1_V1.8.5

3.2 配置项目

1)配置编码器IO,使能输入IO中断( External interrupt )

2)配置定时器计数中断,中断间隔时间为10us ( MCU系统工作时间为72M)

 

 3)定时器Timer-8产生PWM,其周期为10ms

 Timer-8的参数:

PWM的参数:

 

 配置参数完成后,就可以生成项目代码:

4 代码实现

4.1 电机速度控制

通过改变PWM的占空比来调整电机的转速,具体实现代码如下:

void pwm_ctrl_Init( void )
{HAL_TIM_Base_Stop( &htim8 );HAL_TIM_PWM_Start( &htim8, TIM_CHANNEL_1);    // PC6 HAL_TIM_PWM_Start( &htim8, TIM_CHANNEL_2);    // PC7HAL_TIM_SetPWM_Pulse( 1500, TIM_CHANNEL_1);HAL_TIM_SetPWM_Pulse( 0, TIM_CHANNEL_2);
}

4.2 速度计算函数

通过第二章节的原理可知,码盘间隔、轮胎直径、测试定时器频率已知。根据这些参数就能计算电机的转速。

#define  PI                             3.14159
#define  R                              6.8              // unit: cm
#define  DIV_CNT                        20
#define  CYCLE_TIME                     20               // us
#define  CYC_INTEV                     ((PI*R)/DIV_CNT)  //cm
#define  PARA                           CYC_INTEV*(1000000/CYCLE_TIME)#if 1#define pr_debug(fmt, args...)     printf("DEBUG: " fmt, ##args)
#else#define pr_debug(fmt, args...)
#endifstatic uint32_t mfreq_cnt = 0;
static bool enable_cnt = false;float  calculate_speeds( uint32_t cnt )
{float speeds;speeds = PARA/cnt;pr_debug("run count: %d, speeds: %0.3f cm/s\r\n", cnt, speeds);return  speeds;
}

4.3 功能实现

代码48行: 重新EXTI中断函数

代码52行: 判断码盘的脉冲

代码56行: 记录第一次的脉冲位置

代码62行: 记录第二次的脉冲位置

代码63行: 禁止计数

代码64行: 计算速度

代码71行:定时器计数函数,该函数被HAL_TIM_PeriodElapsedCallback调用

源代码:

#define  PI                             3.14159
#define  R                              6.8              // unit: cm
#define  DIV_CNT                        20
#define  CYCLE_TIME                     20               // us
#define  CYC_INTEV                      ((PI*R)/DIV_CNT)  //cm
#define  PARA                           CYC_INTEV*(1000000/CYCLE_TIME)#if 1#define pr_debug(fmt, args...)     printf("DEBUG: " fmt, ##args)
#else#define pr_debug(fmt, args...)
#endifstatic uint32_t mfreq_cnt = 0;
static bool enable_cnt = false;float  calculate_speeds( uint32_t cnt )
{float speeds;speeds = PARA/cnt;pr_debug("run count: %d, speeds: %0.3f cm/s\r\n", cnt, speeds);return  speeds;
}void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{static uint16_t trg_cn = 0;if( GPIO_Pin == INPUT_TRIGGER_Pin){switch( trg_cn ){default:case 0:mfreq_cnt = 0;trg_cn = 1;enable_cnt = true;break;case 1:enable_cnt = false;calculate_speeds(mfreq_cnt);trg_cn = 0;break;}}
}void HAL_TimerCnt( void )
{if( enable_cnt ){mfreq_cnt++;}
}

5 测试

1)测试1

 电机转速控制PWM 占空比配置为:1500/10000。测试得到的速度如下:

2)测试2

 电机转速控制PWM 占空比配置为:5000/10000。测试得到的速度如下:

 

相关文章:

电机测试方法的介绍与功能实现(T测试方法)

目录 概述 1 理论介绍 2 实现原理 2.1 旋转式编码器原理 2.2 系统实现框图 2.3 测速原理 2.4 计算速度值 3 STM32Cube配置项目 3.1 软件版本信息 3.2 配置项目 4 代码实现 4.1 电机速度控制 4.2 速度计算函数 4.3 功能实现 5 测试 概述 本文主要介绍测试电机速…...

多线程和多进程的快速入门

多线程和多进程的快速入门 学习自:莫烦Python www.mofanpy.com Threading - 多线程运算python程序 ​ 多线程的简单理解:把数据分成很多段,将每一段数据放入一个线程,将所有的线程同时开始,大大的节省了运算时间。相…...

【TensorFlow深度学习】经典卷积网络架构回顾与分析

经典卷积网络架构回顾与分析 经典卷积网络架构回顾与分析:从AlexNet到ResNet、VGGLeNet、ResNet、DenseNet的深度探索AlexNet ——深度学习的破冰点火VGGNet — 简洁的美ResNet — 深持续深度的秘钥DenseNet — 密集大成塔实战代码示例:ResNet-50模型结语…...

Salesforce推出Einstein 1 Studio:用于自定义Einstein Copilot并将人工智能嵌入任何CRM应用程序的低代码人工智能工具

一、关键要点 1. Salesforce管理员和开发人员现在可以在每个Salesforce应用程序和工作流程中构建、定制和嵌入人工智能,包括Einstein Copilot。 2. Einstein 1 Studio与数据云深度集成,通过对客户数据和元数据的全面理解,解锁并统一被捕获的…...

点赋科技:建设智能饮品高地,打造数字化产业先锋

在当今数字化时代的浪潮中,点赋科技以其敏锐的洞察力和卓越的创新能力,致力于建设智能饮品高地,打造数字化产业先锋。 点赋深知智能饮品机对于推动社会进步和满足人们日益增长的需求的重要性。因此,他们投入大量资源和精力&#x…...

ORACLE RAC的一些基本理论知识

一 . Oracle RAC 的发展历程 1. Oracle Parallel Server (OPS) 早期阶段:Oracle 6 和 7 Oracle Parallel Server(OPS)是 Oracle RAC 的前身。 通过多个实例并行访问同一个数据库来提高性能。 共享磁盘架构,利用分布式锁管理&am…...

CMake的作用域:public/private/interface

在 CMake 中,public、private和 interface是用来指定目标属性的作用域的关键字,这三个有什么区别呢?这些关键字用于控制属性的可见性和传递性,影响了目标之间的依赖关系和属性传递。 public 如果在一个目标上使用 public关键字时…...

设计模式基础知识点(七大原则、UML类图)

Java设计模式(设计模式七大原则、UML类图) 设计模式的目的设计模式七大原则单一职能原则(SingleResponsibility)接口隔离原则(InterfaceSegreation)依赖倒转原则(DependenceInversion&#xff0…...

Android开机动画的结束过程BootAnimation(基于Android10.0.0-r41)

文章目录 Android 开机动画的结束过程BootAnimation(基于Android10.0.0-r41) Android 开机动画的结束过程BootAnimation(基于Android10.0.0-r41) 路径frameworks/base/cmds/bootanimation/bootanimation_main.cpp init进程把我们的BootAnimation的二进制文件拉起来了&#xf…...

微软远程连接工具:Microsoft Remote Desktop for Mac 中文版

Microsoft Remote Desktop 是一款由微软开发的远程桌面连接软件,它允许用户从远程地点连接到远程计算机或虚拟机,并在远程计算机上使用桌面应用程序和文件。 下载地址:https://www.macz.com/mac/5458.html?idOTI2NjQ5Jl8mMjcuMTg2LjEyNi4yMz…...

【安规介绍】

文章目录 一、基础知识安规上的六类危险的防护:安全电压漏电流接触电流能量问题:火灾问题:热问题结构问题阻燃等级绝缘等级:对接地系统的要求:结构要求:电气要求: 二、设计的关键电气绝缘距离电气爬电距离:…...

[sylar]后端学习:配置环境(一)

1.介绍 基于sylar大神的C高性能后端网络框架来进行环境配置和后续学习。网站链接:sylar的Linux环境配置 2.下载 按照视频进行下载,并进行下载,并最好还要下载一个vssh的软件。可以直接在网上搜索即可。 sylar_环境配置,vssh下…...

XDMA原理及其应用和发展

XDMA原理 XDMA的主要原理是通过直接访问主机内存,实现数据的快速传输。在传统的DMA(Direct Memory Access)技术中,数据传输需要经过CPU的干预,而XDMA可以绕过CPU,直接将数据从外设读取到主机内存或者从主机…...

携程梁建章:持续投资创新与AI,开启旅游行业未来增长

5月30至31日,携程集团在上海和张家界举办Envision 2024全球合作伙伴大会,邀请超50个国家和地区的1600余名外籍旅游业嘉宾与会,共同探讨中国跨境旅游市场发展机遇,讲好中国故事。 携程国际业务增速迅猛,创新与AI解锁未…...

【网络安全的神秘世界】在win11搭建pikachu靶场

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 下载pikachu压缩包 https://github.com/zhuifengshaonianhanlu/pikachu 下载好的pikachu放在phpstudy_pro/www目录下 创建pikachu数据库 打开phpstudy软件…...

基于Java的零食管理系统的设计与实现(论文+源码)_kaic

摘 要 随着科技的进步,以及网络的普及,都为人们的生活提供了极大的方便。因此,在管理”三姆”宿舍在线零食商店时,与现代的网络联系起来是非常必要的,本次设计的系统在研发过程中应用到了Java技术,这在一定…...

【案例实操】银河麒麟桌面操作系统实例分享,V10SP1重启后网卡错乱解决方法

1.问题现象 8 个网口, 命名从 eth1 开始到 eth8。 目前在系统 grub 里面加了 net.ifnames0 biosdevname0 参数, 然后在 udev 规则中加了一条固定网卡和硬件 pci 设备号的规则文件。 最后在 rc.local 中加了两条重新安装网卡驱动的命令( rmmod…...

初级前端开发岗

定位: 日常任务的辅助执行者,前端基础建设的参与者。 素质要求: 是否遵循部门敏捷流程、规范、P0制度;具备良好的沟通和协作能力;负责日常迭代任务的落地执行;拥有较强的执行力,能够灵活解决问题; 职责&#xff1a…...

颠仆流离学二叉树2 (Java篇)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. 🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人…...

柏林自由大学研究团队《Ecology Letters 》揭示AMF在植物对全球变化响应的作用

全球环境变化正在影响陆生植物生长。植物已经进化出各种策略来应对这些挑战,其中之一是与丛枝菌根真菌(AMF)形成共生关系(高达80%的陆生植物物种)。AMF为寄主植物提供各种益处,例如营养吸收、耐受性、食草动物防御和抗病能力,以换取糖和脂质(…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...