10倍速开发开关电源:PSIM DLL集成指南与如何单步调试你的代码

文末有彩蛋哦。

去年提到要写一篇如何在利用PSIM + Visual Studio进行仿真联调,加速实际嵌入式端C代码的开发,但因为懒一直没兑现。

本期简单总结下实现的方法。

特别声明:本文约一半以上内容有kimi/文心一言提问式生成,仅用于技术交流,禁止用于商业使用。若推文内容存在侵权,请留言与我联系,我将删除对应内容。

1 Simulink VS PSIM

PSIM和Simulink都是电子仿真领域中广泛使用的软件工具,它们各有优势和劣势。以下是对两者在电子仿真方面的优劣势对比(基于Kimi提问式生成的答案,并做了微调):

PSIM

  • PSIM专为电力电子和电机控制系统设计,因此在这些领域的仿真中表现出较高的效率。

  • 它使用专门的仿真引擎,针对开关和瞬态行为进行了优化,适合处理快速开关事件和瞬态分析。

  • 对于非常复杂的电路或者需要大量矩阵运算的系统,PSIM可能不如Simulink高效。

  • 由于PSIM主要针对电力电子系统,对于信号处理或控制系统等其他类型的复杂电路,其效率可能不如Simulink。

  • 优势

  • 局限性

Simulink

  • Simulink作为一个多领域仿真工具,可以处理电子、控制、信号处理、通信等多个领域的复杂系统。

  • 依托于MATLAB的强大数学计算能力,Simulink能够处理复杂的算法和数学模型,适合进行系统级建模和仿真。

  • Simulink提供了丰富的模块库和工具箱,可以方便地构建和扩展模型,对于需要频繁修改和迭代的复杂电路设计非常有用。

  • 在处理非常复杂的电路时,Simulink的计算效率可能会受到影响,尤其是在模型规模非常大时,可能需要较长的仿真时间和更多的计算资源。

  • 优势

  • 局限性

个人使用体验

去年基于Simulink搭建了一个较为复杂的双向DCDC模型,并加载了多个c语言文件进行采样滤波,环路控制与状态切换功能的仿真,速度慢到无法接受,而且在与visual studio进行单步联调时Matlab容易闪退,最后只好切换到PSIM中进行同等功能的建模仿真,速度确实快了不少。实际产品软件的问题基本都能在模型中复现并调测,极大地加快了开发效率。

另外当前我使用的PSIM版本为V9.1,visual studio使用的是2010版本。若需使用其他版本,方法也是类似的。

2 为什么选择加载DLL方式?

对于单一的C文件仿真,可以直接在PSIM中使用简化C模块(Simplified C block)或通用C模块(General C block)来实现。

以通用C模块(General C block)为例,以下是常规的步骤:

  1. 添加通用C模块

    • 在菜单栏中,选择“Elements” -> “Other” -> “Function Blocks” -> “C block”。

  2. 配置C模块

    • 放置通用C模块到电路图中,并双击打开。

    • 在打开的界面中,可以选择不同的功能类型,如初始化(OpenSimUser Fcn)、运行时(RunSimUser Fcn)和退出时(CloseSimUser Fcn)的代码块。

  3. 编写C代码

    • 在“RunSimUser Fcn”模块中编写具体的执行代码。

  4. 设置输入输出

    • 输入输出端口在通用C模块中使用inout数组的形式。

  5. 编辑图形

    • 同样可以使用“Edit Image”功能来自定义模块的图形符号。

  6. 测试电路

    • 搭建电路并进行仿真,验证C模块的功能。

由于每个C程序块中的变量对于其他C程序块来说是不可见的。要将值从一个C程序块传递到另一个C程序块或其他电路部分,只能通过C程序块的输入输出端口。所以如果仅仅是仿真下简单的逻辑与算法,那么可以使用该方法。但是如果需要使用多个C语言的仿真,那么就会比较复杂。

从嵌入式产品的软件开发而言,即便扣除驱动层代码,服务层和业务层的功能代码通常会有多个甚至几十个源文件。举个例子,对于常规的开关电源的软件功能模块,通常包含采样滤波,环路控制算法,事件检测诊断,状态机等。因此,在这个使用场景下,建议使用dll的方式进行。

3 PSIM加载dll的方法

加载dll的前提是,咱们得先有个dll。具体方法可以参考下述链接,这里不再赘述。

PSIM中动态链接库DLL使用方法_psim 中的dll block中unable to load the dll file-CSDN博客

唯一需要注意的是

1. 若发现PSIM加载dll之后,点击运行时提示找不到相关函数,可以参考下述的方法设置一下。

- 写一个def文件,强制导出此函数,其中双引号的名字要与你导出的文件名一致

- 在项目属性--链接器--输入--模块定义文件,选择刚才的def文件

2. 当PSIM已经加载了dll时,若需要在visual studio中重新编译生成dll,先要将PSIM关闭该文件,否则会提示生成失败。

为了演示方便,我这边创建了一个简单的PSIM文件和包含了多个c语言文件的dll工程,通过dll的功能函数将两个输入分别进行相加和取平均值操作。

4 在Visual studio中联调

1. 打开Visual studio dll工程,并打开PSIM软件。

2. 在Visual  studio中选择工具 -- 附加到进程 --选择PSIM.exe

3. 在刚才的对应的.c文件中 你想调试的地方添加断点

4. 在PSIM中运行模型

5. 此时你就可以看到代码会在你断点处停止,接下来你就可以根据需要愉快的进行调试,如单步调试,通过监视窗口查看当前作用域下的变量等visual studio丰富的调试工具了。

PSIM与VS联合调试

内容回顾:今天我们比较了PSIM和Simulink在电子仿真领域的优缺点,简单而言PSIM适合电力电子系统仿真并且在此类场景中仿真速度有优势,而Simulink适用于多领域的复杂系统建模。同时还介绍了在PSIM中加载和使用DLL的方法,包括配置C模块、编写C代码、设置输入输出端口和测试电路。此外,提供了在Visual Studio中与PSIM进行联合仿真和调试的步骤。

彩蛋:微信公众号-“ 芯连心嵌入式设计交流”,对话框回复“PSIM DLL”,可以下载推文中的示例,包含PSIM工程和visual studio工程源码。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mysql表级锁(表锁/元数据锁/意向锁)

文章目录 表级锁的分类1、表锁(分类)1.表共享读锁(read lock)2.表独占写锁(write lock)3.语法: 2、元数据锁(meta data lock )3、意向锁1.意向共享锁(IS):由语…

最小相位系统

最小相位系统 1、传递函数 一个线性系统的响应。 比如一个RC低通滤波器: 交流分量在电容的充放电中被滤除掉,通过设置电容器的电容值,以及电阻值,能够控制这种滤除能力,这个参数为RC。 电容的电抗为 1 / j w C 1/j…

【el-tooltips改造】Vue实现文本溢出才显示el-tooltip,否则不显示el-tooltips

实现原理: 使用disabled属性控制el-tooltip的content显示与隐藏; 目标: 1行省略、多行省略、可缩放页面内的文本省略都有效。 实现方式: 1、自定义全局指令,tooltipAutoShow.js代码如下(参考的el-table中的…

TH方程学习 (7)

一、内容介绍 TH存在广泛应用,在下面案例中,将介绍几种相对运动模型,斜滑接近模型,本节学习斜滑接近制导方法能够对接近时间、接近方向以及自主接近过程的相对速度进行控制。施加脉冲时刻追踪器的位置连线可构成一条直线&#xf…

http接口上传文件响应413:413 Request Entity Too Large

目录 一、场景简介二、异常展示三、原因四、解决 一、场景简介 1、服务端有经过nginx代理 2、上传文件超过5M时,响应码为413 3、上传文件小于5M时,上传正常 二、异常展示 三、原因 nginx限制了上传数据的大小 四、解决 扩大nginx上传数据的大小 步…

QT4-QT5升级(3)GBK-UTF-8-乱码“常量中有换行符”

乱码有两种:我命名为汉字乱码菱形乱码如下: 1.文件编码为: GB2312 打开编码: GB2312 编译后: QString 部分字符串 常量中有换行符 char * …

MathType7.8学术必备神器 科研利器 教学好帮手

【MathType 7.8】数学公式编辑器,让学术和专业文档制作更高效、更准确!🧮✨ 作为一名软件技术专家,我一直在寻找一款能够轻松创建复杂数学公式的工具。幸运的是,我终于找到了MathType 7.8,这款强大的数学公…

[每周一更]-(第100期):介绍 goctl自动生成代码

​ 在自己组件库中,由于部分设计会存在重复引用各个模板的文件,并且基础架构中需要基础模块内容,就想到自动生成代码模板,刚好之前有使用过goctl,以下就简单描述下gozero中goctl场景和逻辑,后续自己借鉴将自…

Aptos Builder Jam 亚洲首站|见证 Aptos 公链 2024 年新突破

4 月下旬的「TinTin DESTINATION MOON」杭州站活动让我们构建下一个 Web3 巅峰的项目生态行动与未来战略。时隔三个月,「TinTin DESTINATION MOON」Aptos 线下活动将再次来到杭州,为 Aptos Builder Jam 亚洲首站火热造势,7 月 6 日诚邀 Web3 …

vuInhub靶场实战系列--Kioptrix Level #1

免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关。 目录 免责声明前言一、环境配置1.1 靶机信息1.2 靶场配置 二、信息收集2.1 主机发现2.2 端口扫描2.2.1 masscan2.2.2 nmap 2.3 指纹识别2.4 目录扫描2.4.1 dirb…

AI图书推荐:这就是ChatGPT

这本书《这就是ChatGPT》(What Is ChatGPT Doing ... and Why Does It Work )由Stephen Wolfram撰写 全书内容概要如下: **引言与预备知识** - 作者首先表达了对ChatGPT技术突破的兴奋之情,指出这不仅是技术的故事,也是…

第六篇红队笔记-百靶精讲之pWnOS2.0

ip修改 主机发现 nmap端口扫描 Web渗透 文件上传漏洞利用 获得初级系统shell 敏感文件获取 MySQL数据获取 Root和总结 直接尝试mysql账号

深度图的方法实现加雾,Synscapes数据集以及D455相机拍摄为例

前言 在次之前,我们已经做了图像加雾的一些研究,这里我们将从深度图的方法实现加雾展开细讲 图像加雾算法的研究与应用_图像加雾 算法-CSDN博客 接下来将要介绍如何使用深度图像生成雾效图像的方法。利用Synscapes数据集,通过读取EXR格式的…

数据库(28)——联合查询

对于union查询&#xff0c;就是把多次查询的结果合并起来&#xff0c;形成一个新的查询结果集。 语法 SELECT 字段列表 FROM 表A... UNION [ALL] SELECT 字段列表 FROM 表B...; 演示 select * from user where age > 22 union all select * from user where age < 50; u…

Android 11 低电量自动关机失效

Android 11 低电量自动关机 概述 安卓系统设计了低电关机功能&#xff0c;旨在当手机电池电量过低时自动关机&#xff0c;以保护手机硬件和数据安全。该功能由以下几个部分组成&#xff1a; 电池电量监测: 安卓系统通过 BatteryService 组件持续监测电池电量。BatteryService…

关于修改Python中pip默认安装路径的终极方法

别想了&#xff0c;终极方法就是手动复制&#xff0c;不过我可以给你参考一下手动复制的方法 关于手动移动pip安装包的方法 别想了&#xff0c;终极方法就是手动复制&#xff0c;不过我可以给你参考一下手动复制的方法一、首先确认一下pip默认安装路径二、再确认一下需要移动到…

王道408数据结构CH3_栈、队列

概述 3.栈、队列和数组 3.1 栈 3.1.1 基本操作 3.1.2 顺序栈 #define Maxsize 50typedef struct{ElemType data[Maxsize];int top; }SqStack;3.1.3 链式栈 typedef struct LinkNode{ElemType data;struct LinkNode *next; }*LiStack;3.2 队列 3.2.1 基本操作 3.2.2 顺序存储…

java异常处理知识点总结

一.前提知识 首先当运行出错的时候&#xff0c;有两种情况&#xff0c;一种叫做“错误”&#xff0c;另一种叫做“异常”。错误指的是运行过程中遇到了硬件或操作系统出错&#xff0c;这种情况程序员是没办法处理的&#xff0c;因为这是硬件和系统的问题&#xff0c;不能靠代码…

linux中dd命令以及如何测试读写速度

dd命令详解 dd命令是一个在Unix和类Unix系统中非常常用的命令行工具&#xff0c;它主要用于复制文件和转换文件数据。下面我会详细介绍一些dd命令的常见用法和功能&#xff1a; 基本语法 dd命令的基本语法如下&#xff1a; bash Copy Code dd [option]...主要选项和参数 if…

Meta Llama 3 RMSNorm(Root Mean Square Layer Normalization)

Meta Llama 3 RMSNorm&#xff08;Root Mean Square Layer Normalization&#xff09; flyfish 目录 Meta Llama 3 RMSNorm&#xff08;Root Mean Square Layer Normalization&#xff09;先看LayerNorm和BatchNorm举个例子计算 LayerNormRMSNorm 的整个计算过程实际代码实现结…