DSP的CLA编程及注意事项之一

news2024/9/22 0:51:56

CLA简介

CLA(Control Law Accelerator),即控制律加速器,该 CLA 是完全可编程的独立 32 位浮点 CPU,专为优化数学密集型计算而设计,可显著提升控制算法的性能。与
执行指令和处理中断的标准传统处理器不同,CLA 实际上是任务驱动状态机,最多可支持 8 个用户定义的任务。
除了提供计算能力外,CLA 的独特之处还包括提供最小延迟并轻松访问主要控制外设。因此,CLA 非常适合用于
实现快速控制环路,从而释放 C28x 上的带宽以运行额外的控制环路并执行其他与诊断和通信相关的任务。
在目前数字电源的环路控制以及锁相的场景下得到非常广阔的应用。笔者目前由于在进行产品成本优化,现在以TI最新推出的280039C为例。简要说明一下CLA的工作原理以及应用说明。

CLA与外设

大多数实时控制算法用于对系统执行三个主要任务:激励、采样和控制。对系统进行激励涉及更新 PWM 寄存
器,对系统进行采样涉及访问 ADC 结果寄存器,而对系统进行控制涉及控制环路数学计算。CLA 作为独立的数学处理器,还能够访问用于控制应用的所有主要外设(如 EPWM、ADC、ECAP、EQEP、CMPSS 等)的寄存器。因此,CLA 可以执行采样和驱动以及计算控制逻辑,并且能够在没有任何 C28x 参与的情况下独立执行整个控制任务。
CLA访问PWM外设

__attribute__((interrupt)) void Cla1Task1 ( void )
{
 //
 // Uncomment this to debug the CLA while connected to the debugger
 //
 __mdebugstop();
 //
 // Write to the COMPA register to realize a particular duty value
 //
 EPWM_setCounterCompareValue(EPWM1_BASE, EPWM_COUNTER_COMPARE_A,
 (uint16_t)(duty * EPWM1_PERIOD + 0.5f));
 
 //
 // Update duty value and use the limiter
 //
 duty += 0.1f;
 duty = (duty > 0.9f) ? 0.1f : duty;
 //
 // Clear EPWM4 interrupt flag so that next interrupt can come in
 //
 EPWM_clearEventTriggerInterruptFlag(EPWM4_BASE);
}

CLA 的低中断延迟

在任何实时控制应用中,采样到输出的延迟(定义为检测、处理和驱动之间经过的时间)是系统的一项重要考虑因素。CLA 的低延迟架构在增加总体系统吞吐量的同时减少了这个采样到输出的时间。之所以可以实现这一点,是因为 CLA 以任务为导向,而非中断驱动状态机,并且不使用中断与硬件同步。相反,该器件支持多达八个独立任务,每个任务都映射到硬件事件,例如计时器,或 ADC 上的数据可用性,等等。在 CLA 上启动的任务会在不涉及任何中断或嵌套的情况下运行至完成,因此不必考虑传统上基于中断的处理器通常涉及到的任何上下文切换开销。所以,CLA 处理数据时几乎没有延迟,最终会降低采样到输出的延迟并实现更快的系统响应。
 中断驱动状态机与任务驱动状态机

提前中断脉冲的 CLA 流水线活动

即时”ADC 读取示例展示
如上图 所示,EPWM1 配置为生成频率为 1MHz 的 PWM 输出信号,该信号也用于在每个周期触发 ADC 采样。该示例还利用了 TI 的 5 类 ADC 中新增的特性,允许根据编程的 OFFSET 值将提前中断脉冲延迟几个周期。因此,ADCA 配置为对通道 0 上的输入进行采样,并在 S/H + 偏移周期结束时生成提前中断。此中断用于触发 CLA 控制任务。该 CLA 任务采用控制逻辑根据读取的 ADC 值更新 PWM 输出的占空比。提前中断特性和 CLA 的低中断延迟搭配使用,使得应用能够执行任何必要的前期工作,以便能够在 ADC 结果可用时立即对其进行处理,并且还能在下一个中断到达之前完成对 PWM 输出的更新。因此,所有三个步骤(采样、处理和驱动)都在 1MHz 周期内完成。如 CLA 任务的以下代码片段所示,为了进行说明,采用了 3 点移动平均滤波器来模拟处理序列,并且在读取 ADC 结果之前执行了少量表示为预处理代码的滤波序列步骤以便利用转换前的可用时间。

//
 // Pre-processing for implementing moving average filter, takes 13 cycles
 // This is just to illustrate how cycles can be utilized to do some pre-
 // processing before ADC result latches.Based on the cycles taken by
 // pre-processing code, ADC interrupt offset need to be programmed
 //
 data_read_total = data_read + data_read_prev;
 data_read_prev2 = data_read_prev;
 data_read_prev = data_read;
 //
 // Reading ADC just-in-time
 //
 data_read = HWREGH(ADCARESULT_BASE + ADC_RESULTx_OFFSET_BASE + ADC_SOC_NUMBER0);
 //
 // "data_read_total" stores the cumulative sum of current and last 2 data elements
 //
 data_read_total += data_read;
 //
 // Taking average of 3 elements, normalizing for 12-bit and mapping to output duty
 // linearly in the range 0.1-0.9
 // duty = 0.1 + (0.9-0.1) * ((data_read_total / 3) / 2^12 )
 //
 duty = 0.1f + (data_read_total / (15360.0f));
 //
 // Writing to the COMPA register for realizing computed duty value
 //
 HWREGH(EPWM1_BASE + EPWM_O_CMPA + 0x1U) = (uint16_t)(duty * EPWM1_PERIOD + 0.5f);

将快速控制环路卸载到 CLA

CLA 的独特之处包括提供最小延迟并轻松访问主要控制外设,使 CLA 能够完全从 C28x 卸载快速控制算法任务。将控制任务卸载到 CLA 还有其他好处,例如执行中的抖动降低和控制环路的确定性操作。之所以可以实现这一点,是因为 CLA 以任务为导向,而非由中断服务驱动的状态机,并且 CLA 上的任务不能被中断,从而保证了控制环路的确定性。在管线型 CPU 中,如果 CPU 在 ISR 被接收时正在执行分支类型语句,ISR 可被延迟“n”个数量周期。但是,这对于 CLA CPU 来说不是问题,因为它本质上是任务驱动的,会在空闲状态下等待,直到周期性任务触发才开始执行。因此,将快速控制任务卸载到 CLA 并在 C28x 上运行其余任务有助于提高总体系统性能,同时减少执行中的抖动。

将环路 1 任务卸载到 CLA 的流程图

跨 C28x/CLA 处理共享资源

使用 CLA 可以有效地从 C28x 卸载控制任务,并在C2000 器件上实现并发控制环路执行,同时具有前面几节讨论的许多其他优势。但必须注意的是,仍然会在它们之间共享外设,并且对共享寄存器进行并发读取-修改-写入操作会产生数据争用条件,最终导致数据冲突或功能不正确。理想情况下,最好避免 CLA 和 C28x 在运行时同时对同一外设进行任何更新,但如果无法避免,则必须小心处理共享资源的冲突。其中 C28x 和 CLA 以不同频率独立执行对同一 (AQCSFRC) 寄存器的并发读取-修改-写入操作,这会在 C28x 和 CLA 之间产生竞态条件,并可能导致两者其中一个引发的更新丢失或被覆盖。这是一个标准的临界区问题,可以使用互斥等软件握手机制进行处理,但大多数实时控制应用程序对时间敏感,无法承受额外的软件周期开销。此示例建议使用一种基于硬件的替代技术来巧妙地调度 CLA 和 C28x 任务,从而避免对共享资源的访问发生重叠。基于硬件的调度技术利用了 EPWM 模块的可编程相移机制。

总结

TI 的控制律加速器 (CLA) 提供的差异化特性支持在 C2000 器件上高效执行并发控制环路。CLA 经过专门设计,旨在提高实时 MCU 上的控制密集型数学例程的性能。CLA 的低延迟任务驱动架构非常独特,可降低采样到输出的延迟,这一点在控制应用中非常重要。对主要控制外设的直接访问和强大的浮点处理能力使 CLA 能够完全从主 CPU (C28x) 卸载控制任务,从而释放其带宽以执行其他系统任务。CLA 为 C2000 器件提供了额外的处理功能,并提高了器件的整体性能。本报告中讨论的用于调度 CLA 任务的相移机制可用于从器件中提取最大处理带宽。与基于硬件的控制律实现方案相比,CLA 的另一个主要优势是灵活性。CLA 是完全可编程的,开发人员可以自由修改他们的控制系统,而无需花费时间和高昂的成本重新设计基于硬件的解决方案

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Axure教程—上传文件

本文介绍用Axure制作文件上传效果 预览 预览地址:https://6q4of2.axshare.com 功能 1、点击”文件上传“按钮,显示上传的文件 2、点击”删除“图片,显示提示”是否要删除“,点击”是“,删除数据,点击”否…

开放式蓝牙耳机好不好,列举出几款值得入手的开放式蓝牙耳机

开放式耳机不仅能够提升幸福感还能听到周围环境声,大大提高安全性,不入耳不伤耳设计,既稳固又舒适,佩戴上耳无压力,还具有良好的音质和舒适的佩戴体验。但市面开放式耳机质量也参差不齐,有些使用感不佳&…

高压放大器使用说明书

高压放大器是一种电子设备,可以将输入信号的电能转换成输出信号的电能,从而实现信号放大的功能。它广泛应用于各种领域,例如通信、雷达、医疗等等。下面是一份高压放大器使用说明书,帮助用户更好地了解和使用该设备。 一、高压放大…

追思郭文彬:不管封我当什么长,下辈子我还当厨师!

6月28日,在北京联合大学旅游学院餐饮管理系的走廊,大大的长条桌上摆放着各类像生面点、面塑、包子等美食作品——牡丹、玉兰花、灯笼、小金鱼、花生、龙眼、山竹、翡翠白菜……作品精巧细致,形神兼备,宛若工艺品。 这些作品都出自…

MyBatis-Plus 实现PostgreSQL数据库jsonb类型的保存与查询

文章目录 在 handle 包下新建Jsonb处理类方式一方式二 PostgreSQL jsonb类型保存新建数据库表含有jsonb类型创建实体类Control创建保存数据库方法发起请求 PostgreSQL jsonb类型查询Control创建查询数据库方法发起请求 在 handle 包下新建Jsonb处理类 方式一 import com.alib…

(css)el-image图片完整显示,不拉伸收缩

(css)el-image图片完整显示&#xff0c;不拉伸收缩 <el-imagefit"contain" //重要设置src"../../../../1.png"altclass"chenguo_img_img" />

【RocketMQ】CentOS8安装RocketMQ

RocketMQ的安装 检查jdk环境 RocketMQ是基于java开发的&#xff0c;安装之前请先查看是否有jdk环境 java -version如果没有请去官网&#xff08;https://www.oracle.com/java/technologies/downloads/#java8&#xff09;下载 下载RocketMQ安装包 前往官网&#xff08;http…

信道编码:Matlab RS编码、译码使用方法

Matlab RS编码、译码使用方法 1. 相关函数 在MATLAB中进行RS编码的过程可以使用rsenc()函数或者comm.RSEncoder()函数。 1.1 rsenc()函数使用方法 在MATLAB中帮助中可以看到有三种使用形式&#xff0c;分别为 code rsenc(msg,n,k) code rsenc(msg,n,k,genpoly) code rs…

Excel拼接sql语句,批量导入数据

如下示例图&#xff1a; sql语句&#xff1a;"insert into table (code, path, method) values ("&A2&"’,"&B2&","&C2&"’’);" "("&A2&","&B2&","&C2…

数据分析Lambda架构详解

大家好&#xff0c;今天我们来介绍一个用于亿级实时数据分析架构Lambda架构。 Lambda架构 Lambda架构&#xff08;Lambda Architecture&#xff09;是由Twitter工程师南森马茨&#xff08;Nathan Marz&#xff09;提出的大数据处理架构。这一架构的提出基于马茨在BackType和Tw…

形式化验证,A Theoretical Framework for SymbolicQuick Error Detection(四)

一、Article:文献出处&#xff08;方便再次搜索&#xff09; &#xff08;1&#xff09;作者 Florian Lonsing, Subhasish Mitra, and Clark Barrett&#xff08;Stanford University&#xff0c;斯坦福大学&#xff09; &#xff08;2&#xff09;文献题目 A Theoretical F…

目标检测之遮挡物体检测

一、遮挡的类别 类内遮挡&#xff0c;目标被同一类别的目标遮挡类间遮挡&#xff0c;目标被其它类别的目标遮挡 二、解决方法 数据标注 精调遮挡目标的GT边界框 数据增强 cutout&#xff1a;在训练时&#xff0c;随机mask目标&#xff0c;提升模型对遮挡的应对能力mosaic…

如何排查Trino常见报错问题

一、背景 必须前置知识&#xff1a;《Trino权威指南》第12章及周边涉及知识&#xff0c;基于392版本的使用层面入门书&#xff0c;引擎创始人亲自编写&#xff1a; https://www.wisdominterface.com/wp-content/uploads/2021/07/Trino-Oreilly-Guide.pdfhttps://www.wisdomin…

【Linux】基础IO——文件描述符/缓冲区/重定向/文件系统

文章目录 一、文件描述符二、缓冲区三、重定向的原理四、文件系统 (Linux Ext2)1 认识磁盘的结构CHSLBABlock 2 认识文件系统2.1 分区2.2 文件系统的结构2.3 剖析inode2.4 文件的操作 3 软硬链接3.1 软链接3.2 硬链接 &#x1f4dd; 个人主页 &#xff1a;超人不会飞)&#x1f…

低代码平台的价格范围及购买成本分析

Zoho Creator是一款强大而灵活的低代码应用程序开发平台&#xff0c;可帮助企业快速、高效地创建各种应用程序。但是&#xff0c;很多人可能会担心它的价格问题。在这篇文章中&#xff0c;我们将深入探讨Zoho Creator的定价策略和计划&#xff0c;以帮助您更好地理解其价格结构…

如何保证消息队列的高可用?

RabbitMQ的高可用性 RabbitMQ 是比较有代表性的&#xff0c;因为是基于主从&#xff08;非分布式&#xff09;做高可用性的&#xff0c;我们就以 RabbitMQ 为例子讲解第一种 MQ 的高可用性怎么实现。 RabbitMQ 有三种模式&#xff1a;单机模式、普通集群模式、镜像集群模式。…

【裸机开发】I2C 通信接口(一)—— I2C 通信时序协议及通信流程

目录 一、I2C 简介 二、I2C 的整体通信流程 三、主要通信时序和协议 3.1 开始 / 停止条件 3.2 地址传送 3.3 数据传输 3.4 应答条件 3.5 重复开始条件 四、总线仲裁机制&#xff08;SDA&#xff09; 1、什么是总线仲裁 2、总线仲裁的过程 五、时钟同步&#xff08;…

QT学习笔记:TCP客户端的实现

QT一般用来做客户端&#xff0c;我这里就简单讲一下怎么开发基于QT的TCP客户端。 1、用QtCreator创建项目 2、界面 3、.pro文件添加network QT core gui network 4、mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include &l…

关于Unity动画卡在第一帧的处理方法

今天在制作人物的死亡动画时出现了题目所说的问题&#xff0c;以下是动画的状态机 因为任何状态都可能死亡&#xff0c;所以是从anyState进入的死亡动画 进入条件为isDead是true&#xff0c;当角色死亡时这个条件就会设置成true 结果出现了卡在这个动画的问题 经过检查发现&a…

Java连接数据库——JDBC使用步骤

步骤: 1.注册驱动 ——导入相应平台厂商的驱动jar包(zip为源码) 驱动版本 8&#xff1a;com.mysql.cj.jdbc.Driver 驱动版本 5&#xff1a;com.mysql.jdbc.Driver DriverManger.registerDriver( new Driver() ); 2.创建链接 —— connection Java程序连接数据库要调用方法,方…