带着真实C代码去simulink仿真
应用介绍
Simulink仿真的一点思考 作者作为一名电力电子控制工程师,常常需要将Simulink仿真的算法转化为可烧录到嵌入式芯片的代码,于是仿真完后还需要费一番心思,将积木式的模型或者m语言翻译为可用的代码,而且还不确定代码是否有bug。是否能这样,仿真用的就是真实的C代码,既节省了翻译代码的时间,又让你的代码经受了Simulink仿真的检验,何乐而不为! 解决方案是这样的: 1. 建立个人的函数库,将常见的如PID,SVPWM,PLL,滤波器等写成函数,定义其对应的c文件和头文件。 2. Simulink仿真的控制不再积木式搭建,使用C-Script(或者S function)包含个人函数库,另外在c script中只需要加入部分代码即可。 02 PLECS C script工具的简单介绍 作者采用plecs 3.6.1,该软件可以作为一个工具包嵌入到Simulink中使用。里面的C-Script是专门用来在simulink仿真中运行c 代码的。帮助菜单如下介绍C-Script模块: 打开C script模块,将代码分为六层,Code declarations,Start function code,output function code,Updata function code,Derivative function code和Terminate function code。 Code declarations:此代码部分用于全局声明和定义,这是包含标准库标头的位置(例如math.h 或 stdio.h),可以定义要在 C-Script 函数中使用的宏、静态变量和外部源文件。包含Simulink模型文件的目录将自动添加到包含的搜索路径。 Start function code:开始函数代码在仿真开始时调用。一般用于初始化代码。 Output function code:在主要和次要时间步长期间调用输出函数,以更新该部分的输出信号。可以使用宏Input(i),Output(i)和CurrentTime来访问块的输入和输出以及当前时间。 Updata function code:如果该块具有离散的状态变量,则在处理完输出函数之后的主要时间步中,将调用一次更新函数。一般使用较少。 Derivative function code:如果块具有连续的状态变量,则在求解器的积分循环期间将调用导数函数。一般使用较少。 Terminate function code:在仿真结束时调用终止函数。 03 示例:三相三电平逆变器的模型搭建 a. 将个人的PID函数库,SPWM函数库,ADC函数库以及数据类型定义头文件放在Simulink文件同路径下。用于Simulink模型中C-Script 调用。 图1 C函数库与simulink模型置于同一路径 b. 搭建电路模型,模型分为电路部分,C代码部分,模拟芯片底层的脉冲生成模块。 图2 三电平simulink仿真模型结构 c. C-Script 中编辑代码 首先在C-Script 的设置界面输入该模块的输入个数,输出格式,运算步长等。 在Code declartions部分包含PID函数库,SPWM函数库,ADC函数库以及数据类型定义头文件,以及一些宏定义,如下图示例所示: 图3 C-Script 中Code declartions的定义 在Start function code中完成系统的初始化,本仿真中只对adc采样函数初始化。 图4 C-Script 中Start function code的定义 Output function code执行主要部分,如下截图所示,Output function code先后分别执行C-Script 模块的输入,包含三电平逆变器的输出线电压和输出电压幅度指令。接着对输出电压平均值的计算,输出电压平均值与指令值的PID计算,相位的计算以及三电平的SVPWM调制。最后为C-Script 的对外输出三电平逆变器的脉冲周期,翻转时间,生成脉冲。 图5 C-Script 中Output function code的定义 运行模型,三电平模块输出电压波形如下: 滤波后输出电压和电流波形如下所示: 模块输出电压波形验证了三电平SVPWM调制函数的正确性。滤波后输出电压和电流波形可以得到该逆变器从0到目标电压建立需要0.35s左右,可根据项目实际需要调整PID参数
©版权声明:本文内容由互联网用户自发贡献,版权归原创作者所有,本站不拥有所有权,也不承担相关法律责任。如果您发现本站中有涉嫌抄袭的内容,欢迎发送邮件至: www_apollocode_net@163.com 进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
转载请注明出处: apollocode » 带着真实C代码去simulink仿真
文件列表(部分)
名称 | 大小 | 修改日期 |
---|
发表评论 取消回复