SVPWM在S-function中用C语言实现

本文回顾了SVPWM的基本原理及其实现过程,并提供了基于Simulink的C语言实现示例,旨在帮助读者巩固对SVPWM算法的理解。

       实现这个主要是为了回顾对SVPWM原理的理解和推导过程以及s-function c语言的操作方法

       SVPWM其实已经是业界常识了,TI,ST等企业已经帮大家敲好了代码,做好了demo板,写好了技术应用文档,想学的话去官网爬一爬,认真捣鼓一段时间就会了。

        但是再熟的东西,一直不回顾也会忘记。一个例子就是我自己的游泳技能。我在一条小河边长大,高中之前每年夏天经常游泳,当然是狗刨,玩水很溜。从高中到工作,10年时间,我就没正经游过泳了。直到前年我去天坛游泳馆游泳,一跳下去,沉了,好不容易扑腾起来,还游不远,特别费力。后来花了持续半年,一共七八次的专门游泳训练才恢复游泳技能。基本蛙泳,自由泳才掌握了。

        以此类推,自己的一些生存技能也是这样,要保持热度和敏感性。离开原有的项目,转战新项目快一年时间了,长时间没碰SVPWM了,容易生疏,闲来无事,在simulink里面重新写一写,保持感觉。

        SVPWM算法在功率变换器上的使用十分基础和重要,例如PMSM的控制,三相PFC整流器,并网逆变器等需要ACDC,DCAC的地方。

        SVPWM算法的过程大概是根据指令电压矢量在alpha和beta轴上的分量确定扇区,计算基本矢量的作用时间,根据扇区确定ABC三个桥臂的开关切换时间点,进而生成PWM。

        在工作中其实我是最不喜欢做仿真的。因为有现成的硬件平台,硬件设计和软件设计都有成熟的产品对应,有什么想法,直接写代码去平台上做实验,反而更快,更直接,更立竿见影。但是呢,从原理上看,现实的世界里的东西,只要我们对他的模型洞察的足够深刻全面,把他搬到虚拟的世界里面去,它是可以基本和现实世界的系统是一致的。并且仿真的世界可简单可繁琐、有时候为了学习基本理论,研究前沿的不好实际实现或者不成熟的东西,用仿真也是挺好的。比如我现在要保持对SVPWM不遗忘,我想到的一个好的办法就是用C语言在simuink里面重新一笔一划的写一遍就行了。有人会说你回去看看以前的代码不就行了吗,这话没错。但是这样看,我上面说了我忘记了自己曾经会的游泳,那么我再看游泳教学视频,多看几遍,我就能恢复以前的水平吗?我觉得还是会打折扣。事实也是这样的,我本来觉得我花两个小时就能写好、调试好,但是从今天早上开始到现在下午七点,我才搞完,才开始写这篇文档。因为中间确实出现了几个小细节,花了我好些时间去寻找原因。

       下面先放些图片说明过程,仿真模型和s-function的C语言程序,我会上传到我的资源里面,大家自己可以下载,不要C币,要点人民币,是为了筛选掉懒人,同时也给自己一点积继续做下去的动力。供有兴趣的人参考,仅仅用于学习哦,不能用于做产品哦,因为不能保证不因为这些程序而导致产品出问题。我这个仿真仅仅是为了练习对基本原理的敏感度而已。里面有很多考虑不周全的地方。

在CSDN首页搜索 :SVPWM_SfunctionCcsdn.rar,就可以看到我上传的资源,包含了下图的仿真模型,以及实现SPWM的.c和.h文件

图1 基于S-function的SVPWM的c语言实现仿真原理图

       输入信号是直流母线电压和指令电压信号在两相静止坐标系上的分量,这两个分量是相位互差90度的正弦量,以50hz为例。通过SVPWM算法的计算,输出三个桥臂开关切换的时间点和对应的扇区值,最后通过扇区基本矢量选择和基本时间因子分配到各个桥臂上去。

 图2  ABC三个桥臂输出电压经过LC滤波器后的波形

在CSDN首页搜索 :SVPWM_SfunctionCcsdn.rar,就可以看到我上传的资源,包含了下图的仿真模型,以及实现SPWM的.c和.h文件

要是嫌下载麻烦,或者懒得出那几块钱的人民币,那么下面贴出程序,程序是在s-function中写的c代码,哈哈。用心看下面的程序,学习matlab的使用方法,一定可以复现上图的内容。在此强调仅用于学习啊,不具备工程意义。

/*
 * sfuntmpl_basic.c: Basic 'C' template for a level 2 S-function.
 *
 * Copyright 1990-2013 The MathWorks, Inc.
 */


/*
 * You must specify the S_FUNCTION_NAME as the name of your S-function
 * (i.e. replace sfuntmpl_basic with the name of your S-function).
 *输入变量有四个u[0]u[1]u[2]u[3],分别是指令电压在alpha和belta轴上的分量,母线电压,PWM三角载波
 *输出变量有六个y[0]y[1]y[2]y[3],分别ABC三个桥臂0,1状态的切换时间点
 *
 *
 */

#define S_FUNCTION_NAME    SVPWM
#define S_FUNCTION_LEVEL   2
#define HALF_SQRT3         0.86602540378443864676372317075294
#define SQRT3              1.7320508075688772935274463415059
#define Tpwm               0.0000625
typedef int                 int16;
typedef long                int32;
typedef long long            int64;
typedef unsigned int   &n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

量子力学和生命科学

写作提升自己,打赏更能鼓励我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值