STM32F0实现数字化SPWM纯正弦波逆变器

news2025/1/11 6:18:56

一、理论基础

所谓SPWM,就是通过只有开关两个状态(离散,数字的)的PWM序列产生正弦波(连续,模拟的)的方法。其理论基础一句话就能说明白:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。用人话类比就是五张一块和一张五块一样有价值。

从调制的角度可以理解为低频的50hz正弦信号作为调制波,高频的方波作为载波,调制方法是占空比调制,在经过全桥放大信号之后,通过低通滤波器就能还原出大功率的50hz正弦信号。

二、调制方法

常见的调制方法包括单极性PWM、双极性PWM、单极性倍频PWM。单双极性是以半个开关周期内负载上电压变化情况来分的。

单极性PWM调制在上半个正弦周期内一桥臂A两只功率管以较高的开关频率互补开关,另一桥臂B只开下管,这时负载上的电压在正电源电压和0V之间切换;在下半个周期则A桥臂只开下管,B桥臂高频互补开关,这时负载上的电压在负电源电压和0V之间切换,就产生了两个方向上的电压。半个周期内只有一侧桥臂受控。优点是开关损耗小,缺点是生成的正弦波在过零点会产生失真、控制复杂、而且MOS发热不均匀。

其负载上的波形图如下。

而双极性pwm则是在整个正弦周期内,四只管子都在高频开关状态工作,对角线上的管子一起导通,另一对角线上管子互补导通,实际上只需要一路互补的PWM控制,负载上电压在正电压和负电压之间切换,不出现0v。半个周期内两侧桥臂都受控。优点是控制简单、波形失真度小,缺点是管子开关损耗大,发热比较高。

其负载上的波形图如下:

倍频调制则是上两种控制方法的结合,半个周期内两侧桥臂都受控,但负载在半个周期内只在一种电压与0V之间切换,要么正要么负。其核心思想是两边桥臂分别由两个180度相位差的正弦波与三角载波比较来控制,优点是在开关器件工作频率一样的情况下,输出PWM频率是单极性SPWM的2倍,能够明显减少谐波,因此只需要相对较小的电感和电容滤波器件就可以起到很好的滤波效果,提升了系统的性能,也精简了系统体积,降低了成本。缺点就是控制麻烦。

三、占空比序列生成

这一部分的作用是控制管子什么时候开,什么时候关。

控制的方法有两大流派:模拟和数字。模拟的方法很简单,生成正弦波和三角波,直接输入比较器,产生高低电平控制管子开关。这个没啥好说的,搭电路的事。数字则也分两大流派,模拟模拟方法(两个模拟不同意思)的有自然采样法、规则采样法、不对称规则采样法。自然采样法是通过计算高频三角载波与正弦调制波的交点来确定开关切换点,以求出相应的脉冲宽度,而生成 SPWM波形的。本质上还是模拟那一套,不过由于脉宽计算公式是一个超越方程,采样点不能预先确定,只能通过数值迭代求解,所以用的很少。

规则采样法是对其的简化,只在三角波的顶点或底点位置对正弦波采样而形成阶梯波,计算简单,但是波形没那么像正弦波(谐波含量高)。

不对称规则采样法是规则采样法的优化,在每个载波周期采样两次, 即在三角波的顶点位置采样, 又在三角波的底点位置采样, 这样形成的阶梯波与正弦波的逼近程度会大大提高(谐波含量低了一点),但是计算量是规则采样法两倍。

数字实现的另一种流派则是等面积法,这是纯数学的,和模拟已经没关系了,还记得冲量相等而形状不同的窄脉冲吗?冲量在电路中就是伏秒积,在图中表现为面积,这个方法将正弦波等分,用等面积的PWM波代替,可以计算出来占空比。这种方法生成的正弦波精度是最高的。

图为我写的PY程序,计算得到的结果,调制深度为1,半个周期分16段。PWM幅度等于正弦波最大值,图中灰色部分是高电平时间。积分求面积,PWM波和正弦波的面积是相等的。

四、代码

最简单实现的SPWM我觉得是双极性调制。全程只需要控制一个PWM的占空比。代码包括两部分,生成SPWM占空比序列的py程序和基于hal库和STM32cubeMX的单片机程序。因为我用的是F030F4,这玩意两块多一片,只有16kRAM和4k运存,所以实时计算是没戏了,只能预先计算好占空比序列,用查表法实现。

生成SPWM占空比序列的py程序有两个,分别是单极性和双极性。先从单极性开始吧。

核心思想是分段,求正弦波的积分,除PWM周期长度,结果就是PWM占空比。结果是对称的,负半周就换个桥臂。很简单的数学,不详细分析了。

双极性也差不多,不过需要做出更改。正弦波的积分除2倍的PWM周期长度,结果再加50%才是PWM占空比。占空比50%时等效0v输出,100%时等效+vcc,0%等效-vcc。

调制深度大致等于直流母线电压利用率,受到mos自举驱动器和mos的限制,高侧mos不可能持续导通,也就是说占空比不可能高到100%,90%算保守值,因此调制深度最好不大于90%。最后输出的正弦波的有效值=直流母线电压*调制深度/根号2,输入24vDC,调制深度0.90时可以输出有效值15.28vAC。改变调制深度就能改变正弦波电压。点一下运行,py会以双精度计算占空比,对于单片机11位的定时器精度绝对是大大超过了。

至于STM32,使用两个定时器,TIM1使用CH3互补输出48K的PWM,作为载波,TIM17作为中断时基,中断频率12.8khz(基波50Hz X 调制比256)。

生成好长度为256的占空比序列,存成数组。

重写TIM17中断回调函数,每次中断更新TIM1->CCR3的值,PWM占空比就会以12.8khz的刷新率改变。

到此为止SPWM逆变器的软件就完成了。只要正确连接硬件就能输出SPWM波。只要改变TIM17ARR值就能改变占空比刷新频率,实现变频。

五、硬件设计硬件上需要一个全桥,全桥PCBlayout和选型看我之前的帖子。懒得搞的话,我也有一个现成的全桥模块我发布在立创的开源平台上了,已经打样验证过实物。记得点赞收藏评论三连哦(笑)。这还懒得搞的话请拿钱砸我。

硬件上短接L1和H2,短接L2和H1,任意连接单片机的pwm和互补pwm到两个输入端,小心不要接错。在全桥输出端接上LC滤波器,上电开机就能看到正弦波了。

将这个正弦波接到变比合适的工频变压器上就可以升压到220v。我手头上没有合适的变压器就不测了。不过比较常规的方案是先升压到400v直流在输入高压全桥逆变成交流电,这样体积可以做的比较小两路相差180度正弦波能驱动步进电机,三路依次相差120度的正弦波就是三相逆变器。

上两张测试图吧。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

golang语法的注意事项

目录 1.源文件以.go结尾2.过文件只能存在一个mian 函数 (入口函数)3. go严格区分大小写4. golang的每行代码是一个语句 默认存在 ; 不需要自己写了5. golang 是每一行每一行的执行的 不要把多个语句写在一行6. 定义变量 或是导入的包未使用 无法同过编译7. {} 都是成对出现 为了…

Xtrak 塔克小车巡线代码以及红绿灯识别相关小改动

做的小改动: 只更改了xtark_follow_line.py 增加了一次HSV分割来做红绿灯识别(建议到时候用手机或者平板显示红色或者绿色图片),红绿图片: 将检测道路位置的方式从重心变为最接近屏幕中心的道路像素点。 检测不到道路之…

ubuntu 22.04部署dzzoffice及安装onlyoffice插件

目录 一、配置阿里源 二、安装数据库 三、安装依赖组件 (一)安装php7.4 (二)安装apache2 四、下载 dzzoffice 五、安装dzzoffice 六、安装onlyoffice插件 (一)从github下载小胡版onlyoffice替代原来…

如何学习及计算机编程,入门看这一篇就够了---以c语言为例

信息时代,计算机变成不再是专业性很强的一门学科,更多的是变成了一种工具 用计算机爬取信息(爬虫)进行数据分析,数据可视化(大数据的某个方面)处理海量的数据,如excel(百…

声音生成项目(4)——从VariantAutoencoder(VAE)到VQ-VAE矢量量化变分编码器

文章目录 论文介绍步骤具体讲解自定义矢量量化层获取最近距离的码字的索引计算推导损失函数相关参考 矢量量化层的代码实现完整代码实现 论文介绍 不同于变分编码器和自动编码器,vq-vae中的latent space是离散的,并不是连续的,这能够避免后验…

第3章“程序的机器级表示”:理解指针

指针是 C 语言的一个重要特色。它们提供一种统一方式,能够远程访问数据结构。 指针基本的概念其实非常简单,下面的代码说明了许多这样的概念: struct str { /* Example Structure */int t;char v; };union uni { /* Example Union */int t;…

大厂C++面试基础题第1辑——虚函数七题精讲之一

> “虚函数的作用” 是面向对象的C编程最基础也最核心的知识点,如果不能无法正确回答本题,则只此一题,不管大厂还是小厂,都铁定无缘了。 概述 “虚函数” 是 C面向对象三最:最基础、最重要、最关键的知识点。我们从…

什么是Vue的Vite构建工具?如何使用Vite进行项目开发

什么是Vue的Vite构建工具?如何使用Vite进行项目开发 介绍 Vite是一个由Vue.js核心团队开发的构建工具。它的目标是提供一种快速的开发体验,同时保持生产环境的稳定性和可靠性。Vite使用了ES模块作为开发环境的原生模块格式,通过在开发服务器…

C++11中的关键字constexpr

文章目录 1、constexpr修饰普通变量2、constexpr修饰函数3、constexpr修饰类的构造函数 constexpr 关键字的功能是使指定的常量表达式获得在程序编译阶段计算出结果的能力,而不必等到程序运行阶段。C 11 标准中,constexpr 可用于修饰普通变量、函数&…

【Leetcode】DP | 序列及子数组问题

300 最长递增子序列 求数组最长严格递增子序列的长度。 D [ i ] D[i] D[i]代表以 n u m s [ i ] nums[i] nums[i]结尾的最长递增子序列的长度。 D [ i ] max ⁡ j < i , n u m s [ i ] > n u m s [ j ] ( D [ j ] 1 ) D[i] \max_{j < i,\ nums[i]>nums[j]}(D[…

什么是Vue的UI框架?

什么是Vue的UI框架&#xff1f; Vue.js 是一款流行的 JavaScript 框架&#xff0c;用来构建现代的单页面应用程序&#xff08;SPA&#xff09;。Vue.js 提供了丰富的功能和 API&#xff0c;但是在构建应用程序时&#xff0c;我们还需要使用一些 UI 组件来实现复杂的交互和界面…

【分布式能源选址与定容】光伏、储能双层优化配置接入配电网研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

02- 输入、输出及运算符(C语言)

一 输入、输出 1.1 输出函数 printf 函数是一个可变参数函数&#xff0c;参数的个数不定&#xff1a;int printf(const char *format, ...) printf("%d\n", x); printf("%d %d\n", x, y); 1.2 输入函数 1.2.1 scanf函数&#xff1a;int scanf(const …

利用AI点亮副业变现:5个变现实操案例的启示

AI变现副业实操案例 宝宝起名服务AI科技热点号头像壁纸职业头像收徒&#xff1a;萌娃头像定制头像平台挂载 小说推广号流量营销号百家号AI共创计划公众号流量主 知识付费知识星球小报童&#xff1a; 整体思维导图&#xff1a; 在这里先分享五个实操案例: 宝宝起名服务AI科技热…

[MySQL]一文带你学明白数据库控制语言——DCL

前言 嗨咯&#xff0c;小伙伴大家好呀&#xff01;好几天没见了&#xff0c;周末过得怎么样啊&#xff01;之前学过的SQL语句不会都忘了吧。如果忘了的话大家可以看一下前几期的文章。本期要学习的是SQL语句中的数据库控制语句——DCL&#xff0c;学习完毕之后MySQL中的SQL语句…

探索ll-hls低延迟直播协议

HLS全称为HTTP Live Streaming&#xff0c;其中m3u8作为描述协议&#xff0c;指向一系列切片文件。支持多码流与自适应码率&#xff0c;支持广告无缝播放&#xff0c;支持CMAF协议的低延时直播&#xff0c;也支持CDN动态选择。 我们先看下HLS整体架构&#xff0c;由三部分构成…

存储技术3 数据保护: RAID

Why RAID 性能限制了磁盘驱动单独的驱动存在预期的使用寿命 MTBF测量若一个驱动器的MTBF是750 000小时&#xff0c; 阵列中有100个驱动&#xff0c; 阵列的MTBF会变成 750000 / 100 7500小时 RAID用于减缓这个问题RAID特点 增大容量高可用性增强的性能 RAID implementation…

仿微信我的列表功能菜单按钮 我的个人中心页面功能菜单

前端vue自定义仿微信我的列表功能菜单按钮 我的个人中心页面功能菜单, 下载完整代码请访问https://ext.dcloud.net.cn/plugin?id12990 效果图如下: #### 使用方法 使用方法 <!-- leftTitle:标题 icon&#xff1a;左边图标 click&#xff1a;点击事件 --> <ccMe…

【java】IO流

IO流 原理 分类 字节流与字符流 节点流与包装流 Java IO详解&#xff08;五)------包装流 - YSOcean - 博客园 (cnblogs.com)JAVA I/O流 字符流和字节流、节点流和处理流(包装流、过滤流)、缓冲流_过滤流和缓冲流,字节流的关系_X-Dragon烟雨任平生的博客-CSDN博客 字符流 i…

算法模板(4):动态规划(2)

8.树形DP 没有上司的舞会 树上最大独立集问题 Ural 大学有 N N N 名职员&#xff0c;编号为 1 ∼ N 1 \sim N 1∼N。他们的关系就像一棵以校长为根的树&#xff0c;父节点就是子节点的直接上司。每个职员有一个快乐指数&#xff0c;用整数 H i H_i Hi​ 给出&#xff0c;…