如实显示嵌入式微控制器的自动代码生成?
它不仅包括功率级的设计,还包括控件的开发,这些控件通常在微控制器上实现。很少有开发人员在所有学科上都具备同样的技能,能够以同样高的质量水平设计系统的每个部分。像我一样的电气工程师通常不是受过教育的软件开发人员。在学习期间,他们中的大多数人都用C或脚本语言开发过小型程序,但只有少数人参与过大型软件项目并学会遵循结构化编程的原则。
然而,在工作中,电气工程师经常被分配对嵌入式微控制器进行编程的任务,这是有充分理由的:他们在如何控制电力电子电路方面拥有经验,并且了解整个系统的要求。此外,他们对微控制器的片上外设(例如PWM发生器和模数转换器(ADC))有很好的了解。不利的一面是,对于典型的电气工程师来说,当代码编译没有错误、系统按预期运行以及所有测试都通过时,产品开发就完成了。特别是在当今上市时间较短的压力下,几乎没有内在动力去编写可在产品的整个生命周期内重用和维护的代码。
因此,手写的代码库通常缺乏模块化、清晰的结构和适当的文档。因此,对于外部人员来说,从代码中找出它执行的功能变得很困难。即使是控制代码的作者自己,在几年后重新审视自己的代码时也可能会摸不着头脑,想知道他们在编写代码时的想法是什么。这就是为什么我们应该支持电气工程师所擅长的领域,即电子和控制设计,并将软件架构和实现留给经验丰富的软件开发人员或自动生成代码的计算机程序。
将控件建模为框图
绘制控制系统自然的方法是表示信号流的框图。他们以清晰易懂的方式可视化底层控制概念。属于在一起的功能单元可以封装在子系统中,以隐藏复杂性并创建层次结构。大多数控制系统仿真软件都是基于框图,这并不奇怪。
虽然仿真软件PLECS主要是为了加速电力电子电路的仿真而开发的,但它还为控制系统的设计提供了广泛的信号处理模块集合。PLECS库包括连续和离散传递函数、不连续和非线性模块以及坐标变换、锁相环(PLL)和PID控制器等电力电子应用经常需要的元件。作为示例,图1显示了太阳能逆变器中使用的电流控制器的框图。
图1. 具有谐振积分器和抗复位饱和的电流控制器
与类似工具一样,PLECS中设计的框图可以转换为等效的C代码。图2显示了PLECS为图1中的控制器生成的代码的摘录。生成的代码可以在不同的目标系统(例如微控制器)上编译和执行。从框图模型自动生成控制代码,而不是仅仅使用模型进行离线仿真并手动实现代码,具有一些显着的优点:
控制工程师可以专注于功能而不是其实现。
不需要经验丰富的嵌入式软件开发人员。
即使在开发过程的后期也可以对模型进行更改。
该模型本质上提供了清晰且的文档。
模型及其实现始终保持同步
我不想隐藏这样一个事实:使用模型作为定义控制代码的基础也有一些缺点:
该模型必须包含有关数据类型、采样率和执行任务的额外信息。
在处理框图时,用于跟踪更改的 Diff 工具仍处于起步阶段。
用户放弃了对实现细节和低级优化的控制。
并非所有低级功能都可以通过模型组件获得。
尽管自动代码生成有很多好处,但只有从一开始就加速和简化开发过程,它才会被接受。然而,节省的时间很大程度上取决于所使用的工具链。在Plexim,我们付出了巨大的努力,使使用PLECS和PLECS Coder的嵌入式代码生成成为一种简单直观的体验。
访问I/O外设
当开始微控制器项目时,令人头疼的通常不是控制算法本身的实现,而是配置和访问微控制器的I/O外设。在开始在中断驱动的控制环路内生成PWM并获取ADC读数之前,您需要学习1000多页的技术手册。新手不仅要应对如此陡峭的学习曲线。即使您已经了解某个微控制器系列的详细信息,在处理另一家制造商的微控制器时,您可能需要几乎从头开始。尽管竞争制造商的微控制器可能提供类似的外设,但命名约定和实现细节可能截然不同。
图2. PLECS生成的控制器C代码片段
对于涉及自动代码生成的高效工作流程,仅将控制算法的目标无关部分从框图转换为 C代码并将生成的代码导入特定于目标的软件项目是不够的。这种方法仍然需要用户编写和维护粘合代码来寻址特定于目标的外设,这是一项手动且容易出错的任务。如果需要具有一步代码生成功能的全自动工作流程,则有关目标外设的所有信息都必须包含在模型中。外设可以在模型中由在仿真期间充当信号源或接收器的各个模块来表示。在代码生成过程中,这些模块可以将特定于目标的代码注入到项目中,以配置相应的外设并提供数据访问。
图3. 太阳能逆变器的完整控制器模型,包括触发器和任务管理
PLECS中的目标块
对于电力电子应用中常见的选定微控制器系列,Plexim提供专用目标支持包(TSP),与PLECS和PLECS编码器结合使用。这些TSP包含一个目标块库,代表各个微控制器的各种片上外设。目标块可以通过其圆角与其他控制块区分开。
每个目标块都有一个对话框,允许用户配置相应的硬件外设。如果是模拟输入,用户可以选择ADC单元、输入通道、比例、偏移和采集时间窗口。由于每次数据采集都是由事件(例如定时器)启动的,因此用户还可以指定触发源。用户无需在配置寄存器中设置各个位,而是使用自然语言选项在更抽象的级别上配置外设。尽管不同微控制器系列之间的选项可能略有不同,并且并非所有硬件资源在每个芯片上都可用,但目标块提供的硬件抽象使得将模型移植到另一个微控制器变得非常容易。
PLECS中的目标块不仅提供对数字和模拟输入或输出的直观访问。它们还可以组合多个外设以提供更复杂的功能,例如具有斜坡补偿和前沿消隐的峰值电流控制。图 3 显示了太阳能逆变器的完整控制器模型,包括特定于目标的外围模块。当前控制器子系统包含图1的模型。
当查看目标块的底层时,您会注意到两种不同的实现,就像在可配置子系统中一样。一种实现是基于文本的,并包含Lua脚本语言的元代码。它用于根据对话框条目生成片上外设的代码。另一种实现是PLECS模型,它在离线仿真期间模拟硬件外设的行为。对于ADC,离线模型由触发采样保持元件和量化器组成。
代码生成子系统
要利用I/O外设的离线模型,控件必须与目标块一起包装在子系统中。当代表数据源的目标模块(例如ADC)被放置在子系统中时,输入端子将被添加到子系统模块。该输入可以连接到控制子系统外部的信号源,例如电路模型中的测量。同样,代表数据端点的目标模块(例如PWM发生器)将在子系统中创建输出端子。该输出可用作电源电路中半导体开关的栅极信号。将子系统中的控件分组不会对控制代码生成产生不利影响,因为可以告诉PLECS编码器仅为单个子系统生成代码。相反,当遵循这种方法时,在将代码部署到微控制器之前,可以使用离线仿真根据工厂模型来开发和验证控制系统。事实上,无需修改即可使用完全相同的模型进行离线仿真和代码生成,这确保了模型和代码始终保持同步。图4显示了太阳能逆变器的整体电路模型,其中图3中的控制器模型包含在一个子系统中。
基于事件的控制任务执行 当采用微控制器对电力电子系统进行闭环控制时,电流和电压测量值的采集通常与PWM生成同步。同步采样确保以尽可能低的开关谐波采集电流和电压。在大多数数字电流控制环路中,PWM发生器会定期触发ADC以对模拟测量结果进行采样。一旦ADC完成采样量的转换,它就会通过触发中断来发出新数字值存在的信号。在中断服务程序中,使用新获取的值计算控制算法,并将更新的占空比传递到PWM生成器。
在PLECS中,我们引入了一种特殊的信号类型(如图3中的棕色虚线所示)来定义和可视化触发事件的传播。为了对上述控制环进行建模,用户首先需要选择PWM发生器应在何种条件下发出触发事件,例如计数器下溢或溢出。然后,将PWM发生器的触发输出连接到ADC模块的触发输入,以控制采集时序。为了指示每次转换完成后都调用控制任务计算,ADC的触发输出终必须连接到特殊的“控制任务触发器”块。
多任务环境
单个控制回路通常不足以控制逆变器和驱动系统。大多数情况下,您会发现级联结构具有快速的内部电流控制环路和用于电压或速度调节的较慢的外部环路。虽然外环的计算可能需要一些时间,但简单电流控制任务的计算通常很快。然而,由于电流控制是高度动态的,因此必须以更高的执行速率来执行。为了地利用微控制器的计算能力,这种级联控制方案可以通过抢占式速率单调多任务处理来实现,其中快速电流控制任务中断较慢的外部控制环路的计算。控制模型必须分成具有不同采样率和中断优先级的多个任务。在PLECS中,这种划分是使用每个帧都包含一组块的帧以图形方式执行的。每个框架引用编码器设置中定义的特定任务。如果您的目标是多核处理器,您可以将各个任务分配给不同的。在图3中,黄色框将单独的任务分配给功率点跟踪器 (MPP) 和电压调节器,它们以比控制系统其他部分更低的采样率运行。
图4. 太阳能逆变器的电源电路,其控件包含在代码生成子系统中
要在同一任务中计算的块不一定必须放在同一帧中。由于多个帧可以引用相同的任务,因此将块分配给不同的任务不会干扰控制系统的逻辑结构。其他嵌入式代码生成工具采用子系统或特殊块来将各个任务彼此分开。然而,为了不同的目的而重复使用这些现有的结构可能会令人困惑。相反,PLECS中的任务帧让用户立即识别出一组共享特定于实现的属性的块。
- |
- +1 赞 0
- 收藏
- 评论 0
本文由玉鹤甘茗转载自TOPPOWER(顶源科技)官网,原文标题为:嵌入式微控制器的自动代码生成,本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。
相关研发服务和供应服务
相关推荐
ADC偏移误差和ADC增益误差实例应用
了解ADC的偏移和增益误差规范,例如ADC传输函数,并通过ADC偏移误差和ADC增益误差示例进行操作。
如何理解直流电机的工作原理和控制策略?
本文详细介绍了直流电机的工作原理,包括洛伦兹力作用、换向器原理以及磁场和电流的交互作用,并深入探讨了直流电机的控制电路设计,如功率电子器件应用、PWM调制、电流与速度反馈机制、保护和故障检测系统,以及电源和滤波的重要性,旨在实现对直流电机速度、扭矩和方向的精确控制。
如何理解和优化模数转换过程中的量化误差?
在本系列文章中,我们深入探讨了模数转换(ADC)和数模转换(DAC)的关键性能标准,重点分析了量化误差的成因、影响以及如何通过提高分辨率和采用适当的滤波器来优化转换质量,确保数字信号能准确反映模拟世界的现象。
解析ADC模数转换器中积分非线性(INL)的调整误差、和相对精度
本文中,TOPPOWER介绍了另一种定义INL误差的方法,即拟合线方法。在这种情况下,使用穿过所有代码的直线作为参考线。
一文解析电抗器的主要作用、工作原理及应用实例
电抗器是一种常见的电气元件,主要用于电力系统中,它的主要作用是通过改变电路中的电感来控制电流的大小和相位。本文TOPPOWER来为大家详细介绍电抗器的主要作用、工作原理及应用实例,希望对各位工程师朋友有所帮助。
解析ADC工作原理和分类
ADC是模数转换器(Analog-to-Digital Converter)的缩写,它是一种电子设备,用于将模拟信号转换为数字信号。模拟信号是连续变化的信号,而数字信号是离散的信号,由一系列离散数值组成。ADC广泛应用于各种领域,如通信、控制系统、传感器技术和音频处理等。在许多现代电子设备中,ADC都扮演着非常重要的角色,因为它可以帮助设备处理和分析来自外部世界的模拟信号。
一文详解光耦的作用、工作原理、优点、类型和应用
光耦合器(Optocoupler,简称光耦)是一种常用于电子电路中的半导体器件,主要用于电气隔离、信号传输和噪声抑制。光耦的基本作用是通过光信号来传递电信号,实现输入与输出之间的电气隔离,从而保护电路不受高电压或噪声的干扰。本文TOPPOWER详细介绍了光耦的作用、工作原理、优点、类型、应用等内容。
如何应对变频驱动器的常见故障?
本文详细介绍了变频驱动器(VFD)的故障原因,包括环境条件、电源线连接、总线故障、启动电流、电容问题和过流故障,并提供了相应的故障排除策略,以帮助维护VFD的正常运行和延长其使用寿命。
如何模拟ADC的前端?
对于SAR-ADC来说,模拟是一件棘手的事情。目前还没有完整的转换器模型可以准确地模拟整个设备。您拥有的资源是一个模拟SPICE文件,它可以模拟模拟输入引脚的稳定性。拥有此工具的幸运在于,您拥有一个强大的工具来解决关键、困难的转换器问题之一。
一文解析上拉电阻器以及上拉和下拉电阻的典型应用
上拉电阻是逻辑电路中使用的电阻,用于确保引脚在所有条件下具有明确定义的逻辑电平。下拉电阻的工作方式与上拉电阻相同,只是它们将引脚拉至逻辑低值。本文,TOPPOWER对上拉电阻和下拉电阻的定义、数值及应用等进行了详细的介绍。
高精度4-20mA电流环发送器,广泛用在工业应用中的模拟通信接口
对于工业过程控制仪表,4-20mA电流环发送器广泛用于维持适当的电流,直至系统的电压能力。电流环路的主要特征包括尽管互连线路中存在压降,仍能够保持信号的准确性,以及为设备提供工作电源的能力。
ADC与DAC测试,验证静态和动态特性的方法与分析
本文介绍了如何通过输入输出测试来验证模数转换器(ADC)和数模转换器(DAC)的静态和动态特性,包括失调误差、增益误差、积分非线性(INL)和微分非线性(DNL)的测量,以及使用频率分析来确定ADC的动态范围。
如何分析模数转换器在实际应用中的误差?
在设计测量系统时,我们需要充分了解不同的误差源以及它们对整体精度的影响。误差分析使我们能够自信地选择组件并确保系统满足精度要求。本文TOPPOWER通过不同的例子深入讨论ADC系统误差分析。
设计高能效电机控制系统
本文概述了电机控制设计注意事项,例如多电机控制、磁场定向控制、功率因数校正和无传感器控制。它还解决了当今的微控制器(MCU)如何为各种应用带来更高的精度、功效和更低的成本。
什么是微控制器中的欠压复位?又应如何防止误断电?
介绍微控制器中的欠压复位,如何防止误断电。
电子商城
现货市场
服务
测试1.2/50us-8/20us组合波,10/700us-5/320us组合波,8/20us单波。能够模拟雷电瞬变引起的浪涌冲击抗干扰测试,最高电压达20KV,电流达20KA。点击预约,支持到场/视频直播测试,资深专家全程指导。
实验室地址: 深圳/上海 提交需求>
可烧录IC封装SOP/MSOP/SSOP/TSOP/TSSOP/PLCC/QFP/QFN/MLP/MLF/BGA/CSP/SOT/DFN;IC包装Tray/Tube/Tape;IC厂商不限,交期1-3天。支持IC测试(FT/SLT),管装、托盘装、卷带装包装转换,IC打印标记加工。
最小起订量: 1pcs 提交需求>
登录 | 立即注册
提交评论