最近准备一个比赛的时候接触到了SPWM,很有意思,故志之。
所谓SPWM,就是在PWM的基础上改变了调制脉冲方式,脉冲宽度时间占空比按正弦规律排列,这样输出波形经过适当的滤波可以做到正弦波输出。它广泛地用于直流交流逆变器等,比如高级一些的UPS就是一个例子。三相SPWM是使用SPWM模拟市电的三相输出,在变频器领域被广泛的采用。
软件生成SPWM的步骤(以MSP432为例):
1.先用一个定时器A0产生一个频率为的PWM波。
2.在用定时器A1做一个计数器,计数频率为,数值范围为[0,N],则正弦波的频率 =
3.在程序中有一个存放一周期正弦值的数组sin_array[],注意在此数组中所有的数值都是正值,因为之后调节PWM占空比的时候需要SetCompare这个值,在实际使用时,考虑到节省内存空间,我只存入了1/4个周期,因为其他的部分可以通过镜像对称的办法计算得到。(数据生成的代码在文章最后)
4.在计时器A1中用sin_array[]查表找到对应的占空比数值。并SetCompare来调节PWM的占空比
一些注意点:
1.2,且倍数越大越好
2.定时器A0的重装载值即是正弦波表中的最大值
3.SPWM信号通过低通滤波可以得到正弦波
4.正弦波中的直流分量通过串接电容即可消除
用Python生成一个N=1000个元素的正弦的1/4数组代码:
__author__ = 'Read Air'
import math
import os
ls=os.linesep
PI = 3.14159265358979323846
s = ""
for i in range(256):
s = s + str(int(math.sin((i/512.0*PI))*500)) + ","
if (i % 16) == 15:
s = s + "n"
fname="sin_Array_256.txt"
if os.path.exists(fname):
print "ERROR: file already exists"
else:
fobj = open(fname, 'w')
fobj.writelines(s)
fobj.close()
print 'DONE!'
关键字:生成SPWM MSP432 正弦波 生成python代码
引用地址:
生成SPWM的原理【基于MSP432】【附带正弦波生成python代码】
推荐阅读最新更新时间:2024-11-12 14:13
三角波 方波发生 正弦波产生电路图
���·ͼ ����ԭ��˵����
[模拟电子]
高频纯正弦波逆变器完善短路保护-控制芯片HT1215
这是一款保护功能齐全的正弦波 逆变 电源模块,采用DC-DC-AC两级功率变换架构,其中推挽式DC-DC电路将来自蓄电池的24V或48V直流电压变换到DC335V,再由全桥式DC-AC将DC335V的电压逆变成AC220V 50Hz的标准交流电。该模块的DC-DC部分采用TL494控制,DC-AC部分采用HT1215 芯片 控制,该模块采用输入输出完全隔离的方案,具有完善的短路保护功能,短路开机及开机短路均可。 空载及满载的波形如下 满载: 空载: 用FLUKE43B测试空载和满载的THD分别为0.9%和2.1%。整机带过1200W运行,若持续满载工作20分钟,需要风冷,效率0.85 。用超微晶做的高频变压器在在这台
[电源管理]
MSP432在Energia上的使用(下)
其实我自己都没想到我居然会来填坑,不过说实话这好像也算不上填坑,毕竟之前在MSP430在Energia上的使用(上)这个帖子里讲的是MSP430,而且说的准备在VSCode里装Energia其实到现在还没弄,不过这里还是想介绍一下Energia的另一项功能,一个专属于MSP432的功能。 发现 事实证明多看官网还是有好处的,之前我在使用Energia对MSP430进行编程时一直非常疑惑,为什么TI公司不直接使用Arduino已有的IDE而非要做个自己的Energia导致不为人知非常冷门,但是官网上的介绍回答了我这一点。打开Energia官网,进入Guide界面,翻阅一下可以看见一个名词——MultiTasking,即多任务。众
[单片机]
MSP432 开发环境
安装CCS9.2,SDK包。 https://e2echina.ti.com/question_answer/microcontrollers/msp430/f/55/t/179621 SDK开发查找函数: http://dev.ti.com/tirex/content/simplelink_msp432_sdk_1_30_00_40/docs/driverlib/msp432p4xx/html/driverlib_html/modules.html 开ADC 和开1s定时器A中断: // * --|RST P5.5 | --- A0 (Analog Input) // * |
[单片机]
MSP432 FPU与DSP测试
前言 本文基于MSP432P401R,总所周知MSP432基于Cortex-M4内核,Cortex-M4内核相比于M3而言多了FPU(浮点运算单元)并支持DSP指令集,FPU配合DSP指令使得单片机浮点运算时间大大缩短。官方给出的数据是有近10倍的缩短。TI官方给只给出的FPU的例程,没有给出DSP例程,而且FPU例程描述的不清晰。下文将介绍如何开启FPU和移植DSP库并进行测试。 以下是本篇文章的正文内容 一、开启FPU MSP432是ARM内核,自然就支持MDK了。个人习惯使用MDK,也推荐MSP432使用MDK开发。 开启FPU之前先查看当前设备是否支持FPU,进入MDK调试界面,右下角查看地址0xE000ED88 数据
[单片机]
三相正弦波逆变器瞬态的共同导通问题设计方案(二)
解决方案 综上所述,需要采取措施消除由于C.dv/dt造成的误导通。其基本方法为:尽可能地采用Crss/Ciss比值小的MOSFET;降低Rt. (Cgdd+Cgs)时间常数,即减小Rt的阻值;减缓MOS-FET漏极电压的上升速率;采用负极性电压维持MOSFET的关断,将C.dv/dt所产生的电压尖峰施加负的初始电压,使其峰值不超过MOSFET的导通阈值电压Vth. 采用Crss/Ciss比值小的MOSFET 实际上,早期MOSFET的Cgd/(Cgd+Cgs)的比值往往小于Vth/Vm的比值,如400V/10A的IRF740,其Cgd为 120pF;Cgs为1400pF;Cgd/(Cgd+Cgs)为0.0789
[模拟电子]
msp432记录1-gpio使用
其实看sdk里面的文档已经将使用方法说得很清楚了,记录一些问题 msp_exp432p401r.h中GPIO typedef enum MSP_EXP432P401R_GPIOName中的声明是和 .c文件中gpioPinConfigs的定义是一一对应的 通过调用GPIO_init()即可将GPIO初始化成gpioPinConfigs 中的状态
[单片机]
如何检测晶振是否正常?
检测晶振是否正常的最实用的方法就是用示波器接晶振的任一引脚,示波器的接地引脚接线路板上的地,如果晶振正常则会显示正弦波(单片机内部将其变为方波),正弦波的频率与晶振的标注的频率相差不大。
[单片机]