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

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工程源码。

相关文章:

  • 【面试干货】如何选择MySQL数据库存储引擎(MyISAM 或 InnoDB)
  • 使用 Python 的 Tkinter 来创建 GUI 应用程序
  • 【排序算法】总结篇
  • Linux-常用命令-常用设置
  • 测试testing06081
  • 华为端云一体化开发 初始化云db表结构和表数据(实践2.0)(HarmonyOS学习第七课)
  • Electron qt开发教程
  • python代码中参数的默认值
  • 前端开发高频面试题
  • C++三大特性之多态
  • 党史馆3d网上展馆
  • 事件驱动和动画
  • http和https数据传输与协议区分
  • 清除Ubuntu系统中的无法启动的Ubuntu 24实例
  • 使用el-tree封装一个权限管理的小功能
  • [译] 怎样写一个基础的编译器
  • flutter的key在widget list的作用以及必要性
  • httpie使用详解
  • Java 23种设计模式 之单例模式 7种实现方式
  • Javascript 原型链
  • PAT A1092
  • Redis的resp协议
  • Twitter赢在开放,三年创造奇迹
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 关于extract.autodesk.io的一些说明
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 前端相关框架总和
  • 如何设计一个比特币钱包服务
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 数组的操作
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • Java总结 - String - 这篇请使劲喷我
  • 阿里云移动端播放器高级功能介绍
  • ​插件化DPI在商用WIFI中的价值
  • ​你们这样子,耽误我的工作进度怎么办?
  • ​数据链路层——流量控制可靠传输机制 ​
  • # 计算机视觉入门
  • ###项目技术发展史
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (55)MOS管专题--->(10)MOS管的封装
  • (arch)linux 转换文件编码格式
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (强烈推荐)移动端音视频从零到上手(上)
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • *上位机的定义
  • .NET Core中的时区转换问题
  • .Net Winform开发笔记(一)
  • .net 中viewstate的原理和使用
  • .NET框架设计—常被忽视的C#设计技巧
  • .NET学习教程二——.net基础定义+VS常用设置
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • @Controller和@RestController的区别?