打印

spwm的仿真笔记

[复制链接]
7432|36
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yjmwxwx 网友的帖子中,有关spwm作为信号源的滤波器设计
在spice仿真软件中没有spwm信号,spice中只有一个pwl文件支持信号源
于是写了一个生成spwm的pwl文件的程序
程序原理根据sin表生成一个pwl文件
说明:
一个pwm波表示如下图:

Tr为上升时间
Tf为下降时间
Ton为从pwm表中读取的数值
Tx为末尾与下一个pwm的间隙

python程序如下:
spwm_table=[14,18,21,24,26,27,26,24,21,18,14,9,6,3,1,0,1,3,6,9]
def get_period(f):
    return 1/f

def float2str(v,scale):
    return str(int(v*scale))+'p'

def get_pwl_line(t,v):
    return float2str(t,1e6)+','+str(v)


#stm32定时器频率
freq=56
spwm_period=28   ##arr寄存器

#stm32波形参数

Vinitial=0.0
Von=3.3
tr=1e-4
tf=1e-4
start=0.0

period=get_period(freq)*(spwm_period);
f=open('d:\spwm.txt','w')

for t in spwm_table:
    print(t)
    if (t==0) :
        msg=get_pwl_line(start,Vinitial)
        print(msg)
        f.write(msg)
        f.write('\r\n')
        msg=get_pwl_line(start+period-1e-4,Vinitial)
        print(msg)
        f.write(msg)
        f.write('\r\n')
    else:
        
        ton=t/freq
        msg=get_pwl_line(start,Vinitial)
        print(msg)
        f.write(msg)
        f.write('\r\n')
        msg=get_pwl_line(start+tr,Von)
        print(msg)
        f.write(msg)
        f.write('\r\n')
        msg=get_pwl_line(start+ton,Von)
        print(msg)
        f.write(msg)
        f.write('\r\n')
        msg=get_pwl_line(start+ton+tf,Vinitial)
        print(msg)
        f.write(msg)
        f.write('\r\n')
        msg=get_pwl_line(start+period-1e-5,Vinitial)
        print(msg)
        f.write(msg)
        f.write('\r\n')
    print('---')
    start=start+period

f.close()


使用特权

评论回复

相关帖子

沙发
叶春勇|  楼主 | 2021-8-26 13:47 | 只看该作者
生成的pwm波如下:

经滤波后

使用特权

评论回复
板凳
叶春勇|  楼主 | 2021-8-26 13:50 | 只看该作者
注意,PWL文件为一个spwm周期
使用时 加上“PWL repeat for N file=xxxxx endrepeat" ,这样spwm就能重复多个周期。就可以用这个波形去设计滤波器了。
@king5555 ,你有没有建立过spwm的信号模型?

使用特权

评论回复
地板
叶春勇|  楼主 | 2021-8-26 14:02 | 只看该作者
本帖最后由 叶春勇 于 2021-8-26 14:13 编辑

经spice软件fft分析,spwm信号很脏
我测试的是56M,周期=27+1,spwm长度20
基频在100khz,但是200k,300k,400k的谐波能量很大,信号非常的脏。

spwm波形文件.zip

1002 Bytes

使用特权

评论回复
评论
HWM 2021-8-26 16:53 回复TA
SPWM含丰富谐波,这很正常。 
5
Jack315| | 2021-8-26 14:05 | 只看该作者
这个干得漂亮,赞一个!

使用特权

评论回复
6
Jack315| | 2021-8-26 14:10 | 只看该作者
来个信号源 PWL 设置的详细教程。我的仿真就卡在这里了。

使用特权

评论回复
7
叶春勇|  楼主 | 2021-8-26 14:18 | 只看该作者
Jack315 发表于 2021-8-26 14:10
来个信号源 PWL 设置的详细教程。我的仿真就卡在这里了。

使用ltspice仿真软件
第一步:电压源对话框

第二步:
在仿真界面,修改电压源的值为

这样就ok了。

6871161273203900a7.png (14.87 KB )

6871161273203900a7.png

使用特权

评论回复
8
yjmwxwx| | 2021-8-26 14:33 | 只看该作者
感谢分享,波形确实够差的

使用特权

评论回复
9
Jack315| | 2021-8-26 14:48 | 只看该作者
叶春勇 发表于 2021-8-26 14:18
使用ltspice仿真软件
第一步:电压源对话框

收到。

偶熟悉的仿真器就是这个信号源的问题。
用方波、积分得到三角波。
然后和正弦信号比大小,这样也得到了 PWM 波。

原来的方波是 100KHz 的,换成 1MHz 以上估计电脑就要转不动了。
LTSpice 以前玩得少,你玩得 6 的。跟你学了

使用特权

评论回复
10
Jack315| | 2021-8-26 15:13 | 只看该作者
这个数据文件俺的仿真器里也能用。这下可好了

使用特权

评论回复
11
叶春勇|  楼主 | 2021-8-26 16:55 | 只看该作者
本帖最后由 叶春勇 于 2021-8-26 17:00 编辑
yjmwxwx 发表于 2021-8-26 14:33
感谢分享,波形确实够差的

这个是100hz的波形文件,56M频率 周期560,sin表长度=1000,从你的源文件生成的。我自己仿真的结果,滤波器设计的好,采样点多的,最终正弦波非常好。


spwm_100Hz.zip

12.73 KB

使用特权

评论回复
12
yjmwxwx| | 2021-8-26 17:50 | 只看该作者
叶春勇 发表于 2021-8-26 16:55
这个是100hz的波形文件,56M频率 周期560,sin表长度=1000,从你的源文件生成的。我自己仿真的结果,滤波 ...

麻烦帮忙仿真了,这个仿真软件我还不会用,现在的波形感觉已经不错了,四个正弦波的振幅也差不多。

使用特权

评论回复
13
Jack315| | 2021-8-26 18:07 | 只看该作者
叶春勇 发表于 2021-8-26 14:02
经spice软件fft分析,spwm信号很脏
我测试的是56M,周期=27+1,spwm长度20
基频在100khz,但是200k,300k,4 ...

能不能帮整个正弦 100KHz,PWM 脉冲频率 10MHz的数据文件。
滤波器要仿真这个信号的输出波形。

先转 MATLAB 来试试,又要整传递函数了……

使用特权

评论回复
14
叶春勇|  楼主 | 2021-8-26 18:56 | 只看该作者
yjmwxwx 发表于 2021-8-26 17:50
麻烦帮忙仿真了,这个仿真软件我还不会用,现在的波形感觉已经不错了,四个正弦波的振幅也差不多。
...

电桥里面那个自动平衡的运放(下臂?),如果采样电阻100k,经过运放放大,就乱七八糟的。估计10k也是。

使用特权

评论回复
15
yjmwxwx| | 2021-8-26 19:19 | 只看该作者
叶春勇 发表于 2021-8-26 18:56
电桥里面那个自动平衡的运放(下臂?),如果采样电阻100k,经过运放放大,就乱七八糟的。估计10k也是。
...

那里波形肯定好不了,关键是还要滤波电路简单还要能用在多个频率上

使用特权

评论回复
16
叶春勇|  楼主 | 2021-8-26 19:34 | 只看该作者
yjmwxwx 发表于 2021-8-26 19:19
那里波形肯定好不了,关键是还要滤波电路简单还要能用在多个频率上

如果这个滤波器就一个,起始100Hz,终值100khz的带通,基本无解,100Hz里面就有大量100Khz以内的高频信号。无非就是切换档位。你不是后来胡乱搞了个针对100Hz的换档,不就这个意思吗?



使用特权

评论回复
17
yjmwxwx| | 2021-8-26 19:51 | 只看该作者
叶春勇 发表于 2021-8-26 19:34
如果这个滤波器就一个,起始100Hz,终值100khz的带通,基本无解,100Hz里面就有大量100Khz以内的高频信号 ...

对啊,100HZ里面很多100KHZ的高频信号,一个滤波器应该不行吧,100HZ以前搞过,ARR里面是111,正弦表点数5000,最高振幅111,波形很差不如现在好,感觉胡乱加了个电容和三极管满足要求了,搞成多路滤波器是不是还要接个模拟开关,电路这方面我实在是不懂

使用特权

评论回复
18
叶春勇|  楼主 | 2021-8-26 20:01 | 只看该作者
yjmwxwx 发表于 2021-8-26 19:51
对啊,100HZ里面很多100KHZ的高频信号,一个滤波器应该不行吧,100HZ以前搞过,ARR里面是111,正弦表点数 ...

慢慢折腾,搞多了就知道坑在哪,就是HWM所说的试错成本。
网上琳琅满目的电桥,技术路线多着呢。哪个好,哪个差,这不就排坑呗。

使用特权

评论回复
19
Jack315| | 2021-8-26 21:00 | 只看该作者
本帖最后由 Jack315 于 2021-8-26 21:03 编辑
叶春勇 发表于 2021-8-26 19:34
如果这个滤波器就一个,起始100Hz,终值100khz的带通,基本无解,100Hz里面就有大量100Khz以内的高频信号 ...

SPWM 产生的正弦波看起来是没解了。

俄版用的 MCU 有直接的 DAC,XJW 用的是 DDS。
SPWM 的只能一个点(正弦频率)。和方波的方案是一个意思。
多个点的时候,每个点都要一个高 Q 的带通滤波器。

@yjmwxwx 以你手上的资源,基本玩不下去了。
实在要玩下去的话,就做多个正弦振荡器,然后用模拟开关选择;或者用方波,然后测时间常数……
还要继续下去吗?

使用特权

评论回复
20
叶春勇|  楼主 | 2021-8-26 21:10 | 只看该作者
king5555 发表于 2021-8-26 17:53
设置过几次PWL(t1 v1 t2 v2...),但在PWL FILE中我只试过一次,从电脑音讯中抓过一短音乐的.wav档案,用 ...

本大师教导我们,代数搞不定,用数值计算(spice)搞

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

151

主题

4800

帖子

49

粉丝