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

Renesas R7FA8D1BH (Cortex®-M85) 上光电编码器测速功能

目录

概述

1 软硬件

1.1 软硬件环境信息

1.2 开发板信息

1.3 调试器信息

2 硬件架构

2.1 硬件框架结构

2.2 测速功能原理介绍

2.2.1 理论描述

2.2.2 实现原理

2.2.3 系统硬件结构

3 软件实现

3.1 FSP配置项目

3.2 代码实现

3.2.1 初始化函数

3.2.2 功能函数

3.3 源代码

4 系统测试

4.1 编译代码

4.2 测试


【野火】第二期瑞萨RA MCU创意氛围赛:自适应蓝牙控制智能小车-01

【野火】第二期瑞萨RA MCU创意氛围赛:自适应蓝牙控制智能小车-02

【野火】第二期瑞萨RA MCU创意氛围赛:自适应蓝牙控制智能小车-03

源代码下载地址:

https://www.firebbs.cn/forum.php?mod=viewthread&tid=37943&extra=page%3D1

概述

本文主要介绍Renesas R7FA8D1BH (Cortex®-M85) 上光电编码器测速功能,笔者介绍了测速功能的实现原理,FSP配置MCU资源的方法,还编写系统的软件代码,实现测速的功能。

1 软硬件

1.1 软硬件环境信息

软硬件信息版本信息
Renesas MCUR7FA8D1BH
KeilMDK ARM 5.38
FSP 版本5.3.0
调试工具:N32G45XVL-STBDAP-LINK

1.2 开发板信息

笔者选择使用野火耀阳开发板_瑞萨RA8,该板块的主控MCU为R7FA8D1BHECBD,7FA8D1BHECBD的内核为ARM Contex-M85。

1.3 调试器信息

对于R7FA8D1BHECBD芯片,其使用的内核为Cortex®-M85 Core, ST-LINK-V2或者J-LINK-V9不支持下载和调试功能。笔者经过多次尝试,发现N32G45XVL-STB板卡上自带的DAP-LINK可以下载和调试R7FA8D1BHECBD。

下图为N32G45XVL-STB开发板实物图:

2 硬件架构

2.1 硬件框架结构

IO接口配置功能:

IRQ1和IRQ11配置为外部中断模式,用于接收两个光电编码器的输入信号

TIMER-7: 配置为10us响应间隔,计算1s时间内总共经过的脉冲个数

系统工作框架结构如下:

2.2 测速功能原理介绍

2.2.1 理论描述

M法又叫做频率测量法。这种方法是在一个固定的定时时间内(以秒为单位),统计这段时间的编码器脉冲数,计算速度值。设编码器单圈总脉冲数为 C,在时间 T0 内,统计到的编码器脉冲数为 M0,则转速 n 的计算公式为:

参数介绍:

M0 : T0时间内的编码器脉冲数

C:    编码器单圈总脉冲数

T0:   单位时间

 n:    转速

公式中的编码器单圈总脉冲数 C 是常数,所以转速 n 跟 M0 成正比。这就使得在高速测量时 M0变大,可以获得较好的测量精度和平稳性,但是如果速度很低,低到每个 T0 内只有少数几个脉冲,此时算出的速度误差就会比较大,并且很不稳定。也有一些方法可以改善 M 法在低速测量的准确性,例如:增量式编码器倍频技术就是其中一种,比如原本捕获到的脉冲 M0 只有4 个,经过 4 倍频后,相同电机状态 M0 变成了 16 个,也就提升了低速下的测量精度。

2.2.2 实现原理

M0: 表示基准时钟周期,一般为1s

T0: 表示在一个M0时间内计数的秒冲总数

该码盘一周总共有20个孔,则其将一个圆分为20个等分,在测速的时候。只需记录其在M0(1 second)时间内走过孔的个数T0,然后通过轮胎的周长与孔等分的关系,就能计算出速度。

根据轮胎的直径,计算出周长

光电感应器用于实现脉冲计数功能 

 2.2.3 系统硬件结构

光电编码器接在后轮平行的两个电机上,,用于测试两组电机的转动速度:

左边编码器: 测试左边1组电机的转动速度

右边编码器: 测试右边1组电机的转动速度

3 软件实现

3.1 FSP配置项目

1)配置IO口外部中断

step -1: 配置P508接口

配置外部中断参数:

step-2: 配置P708接口

 配置中断函数

 step-3: 配置定时器函数

3.2 代码实现

3.2.1 初始化函数

 在3.1节中完成参数配置后,就可以生成代码,实现定时器配置和外部中断配置的功能。接下来实现具体的测速功能。

函数:void gpt_counter_Init (void)的功能介绍

代码25行: 打开定时器

代码29行: 启动定时器

函数:void Motor_speed_Init( void )的功能介绍

代码36行:打开IRQ1外部中断

代码40行:使能IRQ1的外部中断功能

代码44行:打开IRQ1外部中断

代码48行:使能IRQ1的外部中断功能

代码53行:使能外部中断

 3.2.2 功能函数

1)定时器回调函数,其主要实现计算速度的功能

代码62行:计数器的值加1

代码63行:实现1s的计数功能

代码65、66行:计算速度

2)计算速度和外部中断响应函数
 

函数: static float  calculate_speeds( uint32_t cnt )

功能: 计算当前的转动速度

函数:void g_external_irq1_Callback (external_irq_callback_args_t * p_args)

功能:外部中断IRQ1的中断回调函数

函数:void g_external_irq11_Callback (external_irq_callback_args_t * p_args)

功能:外部中断IRQ11的中断回调函数

3.3 源代码

 /*FILE NAME  :  motor_speed.cDescription:  calculate the motor running speedAuthor     :  tangmingfei2013@126.comDate       :  2024/09/28*/
#include "motor_speed.h"
#include "bsp_led.h"#define  PI          3.14159
#define  R           6.8         // unit: cm
#define  DIV_CNT     20Stru_MotorSpeed stru_MotorSpeed;
static uint32_t trig_LeftCnt = 0,trig_RightCnt=0;
static uint32_t count;static float calculate_speeds( uint32_t cnt );void gpt_counter_Init (void)
{fsp_err_t err = FSP_SUCCESS;/* Initializes the module. */err = R_GPT_Open(&g_timer7_ctrl, &g_timer7_cfg);/* Handle any errors. This function should be defined by the user. */assert(FSP_SUCCESS == err);/* Start the timer. */(void) R_GPT_Start(&g_timer7_ctrl);
}void Motor_speed_Init( void )
{/* Configure the external interrupt. */fsp_err_t err = R_ICU_ExternalIrqOpen(&g_external_irq1_ctrl, &g_external_irq1_cfg);assert(FSP_SUCCESS == err);/* Enable the external interrupt. *//* Enable not required when used with ELC or DMAC. */err = R_ICU_ExternalIrqEnable(&g_external_irq1_ctrl);assert(FSP_SUCCESS == err);/* Configure the external interrupt. */err = R_ICU_ExternalIrqOpen(&g_external_irq11_ctrl, &g_external_irq11_cfg);assert(FSP_SUCCESS == err);/* Enable the external interrupt. *//* Enable not required when used with ELC or DMAC. */err = R_ICU_ExternalIrqEnable(&g_external_irq11_ctrl);assert(FSP_SUCCESS == err);// init timer as 1ms gpt_counter_Init();
}void g_timer7_CallBack (timer_callback_args_t * p_args)
{if (TIMER_EVENT_CYCLE_END == p_args->event){/* Add application code to be called periodically here. */MONTIOR_TOGGLE;count++;if((count%1000) == 0){stru_MotorSpeed.leftSpeed = calculate_speeds(trig_LeftCnt);stru_MotorSpeed.rightSpeed =  calculate_speeds(trig_RightCnt);trig_RightCnt = 0;trig_LeftCnt = 0;}}
}static float  calculate_speeds( uint32_t cnt )
{float speeds;speeds = (float)(((PI*R)/20) * cnt);return  speeds;
}/* Called from icu_irq_isr */
void g_external_irq1_Callback (external_irq_callback_args_t * p_args)
{(void) p_args;trig_RightCnt++;
}/* Called from icu_irq_isr */
void g_external_irq11_Callback (external_irq_callback_args_t * p_args)
{(void) p_args;trig_LeftCnt++;
}/* End of this file */

4 系统测试

4.1 编译代码

编译代码下载到板卡中运行代码,系统通过OLED显示速度的值

4.2 测试

 1)电机停止状态下的速度

2)电机转动之后的速度值

 

相关文章:

Renesas R7FA8D1BH (Cortex®-M85) 上光电编码器测速功能

目录 概述 1 软硬件 1.1 软硬件环境信息 1.2 开发板信息 1.3 调试器信息 2 硬件架构 2.1 硬件框架结构 2.2 测速功能原理介绍 2.2.1 理论描述 2.2.2 实现原理 2.2.3 系统硬件结构 3 软件实现 3.1 FSP配置项目 3.2 代码实现 3.2.1 初始化函数 3.2.2 功能函数 3.…...

软件测试学习笔记丨Linux三剑客-sed

本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/32521 一、简介 sed(Stream editor)是一个功能强大的文本流编辑器,主要用于对文本进行处理和转换。它适用于自动化处理大量的文本数据,能够支持…...

Vue脚手架学习 vue脚手架配置代理、插槽、Vuex使用、路由、ElementUi插件库的使用

目录 1.vue脚手架配置代理 1.1 方法一 1.2 方法二 2.插槽 2.1 默认插槽 2.2 具名插槽 2.3 作用域插槽 3.Vuex 3.1 概念 3.2 何时使用? 3.3 搭建vuex环境 3.4 基本使用 3.5 getters的使用 3.6 四个map方法的使用 3.6.1 mapState方法 3.6.2 mapGetter…...

使用yml文件安装环境时,如何添加conda和pip的镜像源

博客参考 添加conda镜像源 name: NAME channels:- conda-forge- pytorch- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2- defaults depende…...

c语言经典100例

1.字符串转为数字 #include <stdio.h>int strToInt(char *s) {int num0;int sign1;int step1;if (*s -){sign -1;s;}while (*s > 0&&*s < 9){num num*10(*s-0);step 10;s;}return num*sign; }int main() {char a[10] "-1234";char *s a ;pr…...

百易云资产管理运营系统 ufile.api.php SQL注入漏洞复现

0x01 产品描述&#xff1a; 百易云资产管理运营系统&#xff0c;是专门针对企业不动产资产管理和运营需求而设计的一套综合解决方案。该系统能够覆盖资产的全生命周期管理&#xff0c;包括资产的登记、盘点、评估、处置等多个环节&#xff0c;同时提供强大的运营分析功能&#…...

【分布式微服务云原生】《Redis RedLock 算法全解析:应对时钟漂移与网络分区挑战》

《Redis RedLock 算法全解析&#xff1a;应对时钟漂移与网络分区挑战》 摘要&#xff1a; 本文深入探讨 Redis 的 RedLock 算法&#xff0c;详细阐述其步骤及工作原理&#xff0c;同时重点分析该算法如何处理时钟漂移和网络分区这两个常见的分布式系统问题。读者将通过本文深入…...

OceanBase 的写盘与传统数据库有什么不同?

背景 在数据库开发过程中&#xff0c;“写盘”是一项核心操作&#xff0c;即将内存中暂存的数据安全地转储到磁盘上。在诸如MySQL这样的传统数据库管理系统中&#xff0c;写盘主要有以下几步&#xff1a;首先将数据写入缓存池&#xff1b;其次&#xff0c;为了确保数据的完整性…...

用Java爬虫API,轻松获取taobao商品SKU信息

在电子商务的世界里&#xff0c;SKU&#xff08;Stock Keeping Unit&#xff0c;库存单位&#xff09;是商品管理的基础。对于商家来说&#xff0c;SKU的详细信息对于库存管理、价格策略制定、市场分析等都有着重要作用。taobao作为中国最大的电子商务平台之一&#xff0c;提供…...

OpenHarmony 入门——ArkUI 自定义组件内同步的装饰器@State小结(二)

文章大纲 引言一、组件内状态装饰器State1、初始化2、使用规则3、变量的传递/访问规则说明4、支持的观察变化的场景5、State 变量的值初始化和更新机制6、State支持联合类型实例 引言 前一篇文章OpenHarmony 入门——ArkUI 自定义组件之间的状态装饰器小结&#xff08;一&…...

【Linux驱动开发】嵌入式Linux驱动开发基本步骤,字符设备开发入门,点亮LED

【Linux驱动开发】嵌入式Linux驱动开发基本步骤&#xff0c;字符设备开发入门&#xff0c;点亮LED 文章目录 开发环境驱动文件编译驱动安装驱动自动创建设备节点文件 驱动开发驱动设备号地址映射&#xff0c;虚拟内存和硬件内存地址字符驱动旧字符驱动新字符驱动 应用程序开发…...

搬砖14、Python网络编程入门

网络编程入门 计算机网络基础 计算机网络是独立自主的计算机互联而成的系统的总称&#xff0c;组建计算机网络最主要的目的是实现多台计算机之间的通信和资源共享。今天计算机网络中的设备和计算机网络的用户已经多得不可计数&#xff0c;而计算机网络也可以称得上是一个“复…...

Transformer: Attention is All you need

Transformer Transformer是基于Encoder-Decoder结构的&#xff0c;将Seq2Seq中的RNN/GRU部分更换为Self-Attention部分 位置编码 Positional Encoding Self-attention丢失了位置信息 CNN 卷积神经网络可以保存相邻的位置信息 RNN 是顺序输入的&#xff0c;是包含了位置信息…...

C++:排序算法

目录 一、插入排序 1.直接插入排序 2.希尔排序 二、交换排序 1.冒泡排序 2.快速排序 三、选择排序 1.简单选择排序 2.堆排序 四、归并排序 1.二路归并排序的递归实现 2.二路归并排序的非递归实现 一、插入排序 1.直接插入排序 直接插入排序的基本思想是&#xff…...

期货日内稳赢策略:双15交易法详解

Eagle Trader的考试不仅涵盖了CFD交易&#xff0c;期货交易的考生人数也颇为可观。与外汇市场相比&#xff0c;期货在国内市场的普及程度更高&#xff0c;参与的群体也更为广泛。这得益于期货市场在国内相对成熟的监管体系&#xff0c;使得交易员对期货有了更深入的了解和信任。…...

2024年10月第2个交易周收盘总结:怎样卖出!

计划自己的交易&#xff0c;交易自己的计划。 跟随市场而情绪波动&#xff0c;最终一定会导向失败&#xff01; 连续、平稳、冷静地惯彻交易计划&#xff0c;比什么都重要&#xff01; 交易本身是极其简单和清楚的&#xff0c;让事情变复杂的原因不是行情走势和交易本身&…...

mysql 不支持utf8mb4_0900_ai_ci

Unknowncollation:‘utf8mb4_0900_ai_ci’ 解决方案&#xff1a; 1. 升级mysql为8.0以上&#xff08;不包含8.0&#xff09; 2. 修改编码类型&#xff1a; utf8mb4_0900_ai_ci/utf8mb4_0900_ci 修改为utf8_general_ci utf8mb4修改为utf8 utf8mb4_0900_ai_ci 是一种 MySQL 数…...

第10篇:防火墙与入侵检测系统

目录 引言 10.1 防火墙的基本概念 10.2 防火墙的分类 10.3 防火墙策略的配置与实现 10.4 入侵检测系统&#xff08;IDS&#xff09; 10.5 防火墙与IDS的结合 10.6 总结 第10篇&#xff1a;防火墙与入侵检测系统 引言 在当今的数字世界中&#xff0c;网络安全已经成为企…...

Jmeter监控服务器性能

目录 ServerAgent 安装 打开Jmeter ServerAgent 在Jmeter上监控服务器的性能比如CPU&#xff0c;内存等我们需要用到ServerAgent&#xff0c;这里可以下载我分享 ServerAgent-2.2.3.zip 链接: https://pan.baidu.com/s/1oZKsJGnrZx3iyt15DP1IYA?pwdedhs 提取码: edhs 安装…...

通过前端UI界面创建VUE项目

通过前端UI界面创建VUE项目&#xff0c;是比较方面的一种方式&#xff0c;下面我们详细分析一下流程&#xff1a; 1、找到合适目录 右键鼠标&#xff0c;点击在终端打开 2、开始创建 输入 vue ui 浏览器弹出页面 3、点击Create项目 显示已有文件列表&#xff0c;另外可以点击…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

PHP 8.5 即将发布:管道操作符、强力调试

前不久&#xff0c;PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5&#xff01;作为 PHP 语言的又一次重要迭代&#xff0c;PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是&#xff0c;借助强大的本地开发环境 ServBay&am…...