邹城网站设计,德州营销型网站,微博嵌入wordpress,windows优化大师win10本篇介绍在使用RA8-T系列芯片#xff0c;建立马达类工程应用时#xff0c;如何将电流环部分的指令和变量设置到TCM单元#xff0c;以提高电流环执行速度#xff0c;从而提高系统整体的运行性能#xff0c;在伺服和高端工业领域有很高的实用价值。本文以RA8T1为范例#x…
本篇介绍在使用RA8-T系列芯片建立马达类工程应用时如何将电流环部分的指令和变量设置到TCM单元以提高电流环执行速度从而提高系统整体的运行性能在伺服和高端工业领域有很高的实用价值。本文以RA8T1为范例亦可推广到具备TCM功能的RA8-T系列其他芯片和相关领域。 瑞萨新产品RA8-T系列芯片采用Cortex-M85内核并具有直接与处理器核心耦合的片上存储器TCM通过专用接口访问相比普通RAM或缓存能提供更快的访问速度和较低的延迟和确定性访问。在RA8T1中配置64KB(8KB×8 block)的ITCM和64KB(8KB×8 block)的DTCM。请参看数据手册可以看到TCM在RA8T1的实际地址。 ITCM和DTCM分别用于存储指令和数据以优化程序执行性能。在马达控制这种对实时性要求更高的应用中可以将电流环等关键环节的指令和变量放到TCM中提高执行速度从而提高系统整体性能。 本文以瑞萨RA8T1官方样例工程RA8T1_MCILV1_SPM_LESS_FOC_E2S_V101为基础对电流环进行TCM化设置相关操作可推广到RA系列搭载TCM的其他芯片和对应的示例软件工程。 RA8T2 sensorless方案的样例工程
当前工程测试环境及工具获取链接如下所示 IDE版本e2studio 2025-01 工具链版本13.2.1.arm-13-7。该版本可通过e2studio进行集成化安装。 FSP版本5.6.0 测试软件适配瑞萨官方开发套件MCK-RA8T1该套件的相关资料可在瑞萨官网下载链接MCK-RA8T1 Users Manual。套件由CPU板、驱动板、通信板、样例电机及相关配件组成。 可按如下图示参考用户手册搭建系统调试马达工程。系统电源推荐DC24V请另行准备。 将马达样例工程进行TCM优化的具体步骤 以RA8T1_MCILV1_SPM_LESS_FOC_E2S_V101工程为例首先需统计电流环需要的的所有函数并将它们分配到ITCM中。在本样例工程中这些函数分为两类一类是Open Source的一类被封装到lib文件中的。 由于涉及到的函数数量较多现仅举例说明设置方法 如函数R_ADC_Read其作用是读出当前的相电流采样数据是整个电流环计算的开端。函数体定义在/工程根目录/ra/fsp/src/r_adc/r_adc.c文件中。可在函数定义前增加修饰语句__attribute__((section(.itcm_data)))将该函数指定分配到ITCM中。 示例
__attribute__((section(.itcm_data)))
fsp_err_tR_ADC_Read(adc_ctrl_t * p_ctrl, adc_channel_tconst reg_id, uint16_t * const p_data) ITCM起始地址为0x00000000编译后查看map文件可以确认函数被分配到了ITCM区域中。 也可用系统推荐宏定义进行设置宏定义在\工程根目录\ra\fsp\src\bsp\mcu\all\bsp_compiler_support.h文件中具体定义如下所示
#defineBSP_PLACE_IN_SECTION(x)_attribute__((section(x))) __attribute__((__used__)) 本宏定义增加了对函数属性的进一步修饰通常可用的修饰如下所示
noinline/inline
used
long_call 对于函数的修饰不是本文重点请查阅其他材料进行确认。您可点击 【GUN】Function-Attributes_gun编译器高级属性-CSDN博客 获得相关信息。 通常情况下算法是公司的核心资产。所以存在封库使用或者利用第三方提供算法库的情况。在这样的情况下我们无法找到算法库中的函数本体进行设置。那我们就需要考虑将库文件整体放入ITCM中。 如RA8T1_MCILV1_SPM_LESS_FOC_E2S_V101样例工程使用了三个库文件librm_motor_current.alibrm_motor_estimate.alibrm_motor_speed.a分别用于处理电流环、位置估算、速度环的一些算法。 要实现本操作需对ld文件进行修改。ld文件链接描述文件是控制链接器行为的关键脚本文件主要用于管理目标文件的内存布局和符号解析。通过脚本指令精确控制输入文件(.o/.a)如何组合到输出文件(可执行文件/库)中并定义程序在内存中的布局结构。 在本工程的ld文件中首先定义了存储器的物理参数包括各内存区域的起始地址、容量及访问属性如可读/写/执行接着加载了必要的库文件通过SECTIONS指令规划段的分布策略明确代码段、数据段、特殊功能段在存储空间的具体位置。同时脚本还设置了关键的系统级配置指定程序执行的入口地址各模块能按预定逻辑在存储器中精准排布。 关于ld文件的布局不是本文重点请搜索相关资源进行理解。比如链接文章LD文件详解-Asp1rant-博客园。 ld文件的设置需使用标准命令本文不详细展开请点击相关资源进行理解。 下面我们详细介绍本次修改的操作 在工程目录script文件夹下打开fsp.ld文件。
在SECTIONS命令后链接代码段.text :内删除*(.text*)语句更改为*(EXCLUDE_FILE(*librm_motor_estimate.a:*.o *librm_motor_current.a:*.o *librm_motor_speed.a:*.o) .text.*)。这样在链接时将不对这三个.o的lib文件在此处进行链接。请看如下示例 在SECTIONS命令后在.itcm_data段内在KEEP(*(.itcm_data*))语句下面增加下面三个语句
KEEP(*librm_motor_estimate.a:*.o(.text.*))
KEEP(*librm_motor_current.a:*.o(.text.*))
KEEP(*librm_motor_speed.a:*.o(.text.*)) 更改后在链接过程中将这三个指定.o文件连接到itcm段。请看如下示例 设置完成后重新编译工程。排查map文件可以看到lib中的函数已经放置到ITCM中。如位置估算这几个函数排查如下 然后需统计电流环执行用到的所有变量并将所有变量放置到DTCM中。由于数量较多现举例说明设置方法。 如结构体变量g_motor_sensorless0此变量是电流环操作的主要变量结构体。变量定义在/工程目录/ra_gen/hal_data.c文件中可在变量定义前增加修饰语句__attribute__((section(.dtcm_data)))将其分配到DTCM中。 请看如下示例
__attribute__((section(.dtcm_data))) motor_instance_t g_motor_sensorless0
{ .p_ctrl g_motor_sensorless0_ctrl, .p_cfg g_motor_sensorless0_cfg, .p_api g_motor_on_sensorless, }; 在本应用中g_motor_sensorless0内部嵌套了其他结构体变量那么被嵌套的其他结构体也需要做类似声明分配到DTCM中。
DTCM起始地址为0x20000000编译后查看map文件可以确认变量被分配到了DTCM区域中。 因为瑞萨官方样例工程用FSP架构设置系统参数。所以在应用本例程测试时需做两个手动设置 1将/工程目录 /ra_gen/目录下的hal_data.c和hal_data.h文件设置为只读属性这样在每次编译时文件中所作的更改才不会被FSP默认设置覆盖。 2在进行变量的DTCM设置时如变量具有const标识符修饰需将const标识符去掉。否则类型修改产生冲突新的设置不能成功。 因为实际应用过程中系统建立的方法各不相同遇到上面两种情况需注意如自建工程没有相关设计则无需这两个手动步骤。
设置完成后可以在电流环程序块的出入口分别拉高和拉低I/O口以测试电流环执行时间。
测试结果为4.79us。 同等条件下未TCM化的例程电流环执行时间为5.72us。 可以看到TCM化有明显性能提升效果。 本文介绍了在使用瑞萨RA8-T系列芯片设计马达工程时如何将指令和变量放置到TCM单元从而加速特定执行的运行速度。可以最大限度地发挥瑞萨芯片优势为客户提供更好的解决方案。 文章来源RA生态工作室https://www.ramcu.cn/