• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

用单片机产生的SPWM波形,存在的问题,高手请进!

最近业余时间,在用AVR的单片机做逆变器。

计划如下:

1.第一步,用相位修正模式PWM产生SPWM波形,载频为15.586K,写出程序,做调试的PCB。

2.第二步,用低电压进行开环调试,实测得出正弦波。

3.第三步,实现闭环控制,各种保护功能。

现在做在第二步,实测得出的波形和预期的差很多,请高手指教一二。

全部回复(136)
正序查看
倒序查看
ydcman
LV.8
2
2010-09-19 10:48

抱歉!到期了,已被删除了

0
回复
ydcman
LV.8
3
2010-09-19 10:57
@ydcman
抱歉!到期了,已被删除了

实测时空载波形像矩形波,改变调制度影响不大,轻微(20W)带载后波形变化很大,存在严重失真。测试主电压为24vdc,MOS管驱动TLP250,外接3路隔离驱动电源,电压均为12V

  

0
回复
ydcman
LV.8
4
2010-09-19 11:02
@ydcman
实测时空载波形像矩形波,改变调制度影响不大,轻微(20W)带载后波形变化很大,存在严重失真。测试主电压为24vdc,MOS管驱动TLP250,外接3路隔离驱动电源,电压均为12V[图片] [图片] 

采用等效面积法,单片机采用查表法,测试计算表格如下:

SPWM波的基准值(80) 

0
回复
771749862
LV.5
5
2010-09-19 12:23
@ydcman
采用等效面积法,单片机采用查表法,测试计算表格如下:[图片]SPWM波的基准值(80) 

个人感觉是程序没写好

0
回复
ydcman
LV.8
6
2010-09-19 15:17
@771749862
个人感觉是程序没写好

  对的,是在空载时调制度高了些,原先程序里有错误,每次更改的调制度值并没有被更新。后来改为30%时空载波形接近正弦波,带载吗,不谈了,毕竟闭环还没有加上去.手机拍摄角度的问题有些变形,实际不倾斜的只是有点消顶

0
回复
2010-09-19 17:07
@ydcman
[图片] [图片] 对的,是在空载时调制度高了些,原先程序里有错误,每次更改的调制度值并没有被更新。后来改为30%时空载波形接近正弦波,带载吗,不谈了,毕竟闭环还没有加上去.手机拍摄角度的问题有些变形,实际不倾斜的只是有点消顶
肯定是正弦表不对,不反馈的话,8位机查表也可以做到THD<1%
0
回复
ydcman
LV.8
8
2010-09-20 08:00
@ddmushroom
肯定是正弦表不对,不反馈的话,8位机查表也可以做到THD

载频可以选择在音频范围之内吗?有什么优缺点?

0
回复
ydcman
LV.8
9
2010-09-20 12:56
@ydcman
载频可以选择在音频范围之内吗?有什么优缺点?

呵呵,本想请教大家,最后变成了单口相声。没有用单片机做过SPWM波的吗?

0
回复
ddmushroom
LV.4
10
2010-09-20 12:59
@ydcman
呵呵,本想请教大家,最后变成了单口相声。没有用单片机做过SPWM波的吗?
说说为什么要用等效面积法来求正弦表
0
回复
ydcman
LV.8
11
2010-09-20 13:15
@ddmushroom
说说为什么要用等效面积法来求正弦表
理论上行的通,谐波少些;成本低,外围电路简单;计算方便,便于查表;你有什么好的建议吗?
0
回复
ddmushroom
LV.4
12
2010-09-20 13:20
@ydcman
理论上行的通,谐波少些;成本低,外围电路简单;计算方便,便于查表;你有什么好的建议吗?

求解这个超越方程有很多方法,等效面积法是减少MCU计算量,如果全查表,用PC的软件来计算完全可以用精度更好的算法。

个人看法,仅供参考

0
回复
ydcman
LV.8
13
2010-09-20 13:26
@ddmushroom
求解这个超越方程有很多方法,等效面积法是减少MCU计算量,如果全查表,用PC的软件来计算完全可以用精度更好的算法。个人看法,仅供参考
谢谢了,实际中都是PC机算出的值,单片机在运行中不进行运算,只是对逻辑和时序进行处理,假如执行运算程序,8位的单片机根本来不及;实测执行运算时,载频变小,原因分析:虽然采用中断处理输入PWM值。但由于在进行乘法或除法计算时暂用的寄存器多,响应中断前,存储这些寄存器需要一定的时间,所以造成载频实际变小很多。所以考虑用查表法。还有什么算法比较好的,精度高些,望指点一二,或者提个名称吧?
0
回复
ddmushroom
LV.4
14
2010-09-20 13:33
@ydcman
谢谢了,实际中都是PC机算出的值,单片机在运行中不进行运算,只是对逻辑和时序进行处理,假如执行运算程序,8位的单片机根本来不及;实测执行运算时,载频变小,原因分析:虽然采用中断处理输入PWM值。但由于在进行乘法或除法计算时暂用的寄存器多,响应中断前,存储这些寄存器需要一定的时间,所以造成载频实际变小很多。所以考虑用查表法。还有什么算法比较好的,精度高些,望指点一二,或者提个名称吧?

8位机肯定是查表咯,就是查完了乘个系数

呵呵,不知道你用什么语言写的查表+计算。

我这部分是用汇编的,先把循环每条路径的时间先计算好,再用延时或者其他的什么把每条路的时间调成一样。频率不会有影响的

 

0
回复
ddmushroom
LV.4
15
2010-09-20 13:37
@ydcman
谢谢了,实际中都是PC机算出的值,单片机在运行中不进行运算,只是对逻辑和时序进行处理,假如执行运算程序,8位的单片机根本来不及;实测执行运算时,载频变小,原因分析:虽然采用中断处理输入PWM值。但由于在进行乘法或除法计算时暂用的寄存器多,响应中断前,存储这些寄存器需要一定的时间,所以造成载频实际变小很多。所以考虑用查表法。还有什么算法比较好的,精度高些,望指点一二,或者提个名称吧?
我是把sin泰勒展开的阶数取高一点,然后用MatLab求个数值解。,我是10bit的PWM端口,用的7阶,没具体比较过更高的阶数,估计没啥用
0
回复
ydcman
LV.8
16
2010-09-20 14:46
@ddmushroom
我是把sin泰勒展开的阶数取高一点,然后用MatLab求个数值解。,我是10bit的PWM端口,用的7阶,没具体比较过更高的阶数,估计没啥用

呵呵,说说我的看法,不到之处,请指教。

我用的是C语言,计算的话比如系数为1.01(每次调整变量为1%),那就是乘以101然后再除以100,对C语言不是问题,但连续累积的话计算量就比较大;比如连续调整3次都是电压不够。那对于单次的值就是101*101*101/1000000的计算量,这样不会丢数据(因为取整)。假如点取得多的话,计算量是很大的

0
回复
ddmushroom
LV.4
17
2010-09-20 15:05
@ydcman
呵呵,说说我的看法,不到之处,请指教。我用的是C语言,计算的话比如系数为1.01(每次调整变量为1%),那就是乘以101然后再除以100,对C语言不是问题,但连续累积的话计算量就比较大;比如连续调整3次都是电压不够。那对于单次的值就是101*101*101/1000000的计算量,这样不会丢数据(因为取整)。假如点取得多的话,计算量是很大的

这个部分最好不要用C,不同的编译器出来的长度都会不一样,会明显影响效果。

microchip的范例里面这段也是汇编的。你可以参考一下

 

另外,一次循环以后把因子保存下来就行了,没必要连续乘吧?你的MCU只有8位的PWM吗,双字节乘法也不会多多少时间的

0
回复
ydcman
LV.8
18
2010-09-20 15:26
@ddmushroom
这个部分最好不要用C,不同的编译器出来的长度都会不一样,会明显影响效果。microchip的范例里面这段也是汇编的。你可以参考一下 另外,一次循环以后把因子保存下来就行了,没必要连续乘吧?你的MCU只有8位的PWM吗,双字节乘法也不会多多少时间的

我用的是8位的PWM,有10位的PWM,没有用,考虑就是10位要双字节。

连成的原因是:假如有个小的值10,10*1.01=10,取整了;要是保存此值,以此类退的话,连续调整N次之后还是10.所以考虑连成的。我用的是AVR的,不是PIC的

0
回复
2010-09-20 15:34
@ydcman
我用的是8位的PWM,有10位的PWM,没有用,考虑就是10位要双字节。连成的原因是:假如有个小的值10,10*1.01=10,取整了;要是保存此值,以此类退的话,连续调整N次之后还是10.所以考虑连成的。我用的是AVR的,不是PIC的
用TMS320F28035绝对没有问题,还可以做单周期的浮点实时运算,那个闭环求解PWM的运算对它来说太小菜了。
0
回复
ydcman
LV.8
20
2010-09-20 15:36
@lizlk
用TMS320F28035绝对没有问题,还可以做单周期的浮点实时运算,那个闭环求解PWM的运算对它来说太小菜了。
呵呵,数字信号处理器运算速度肯定够了,可以实时计算。就是TI的东东价格贵了些,不是我这样的发烧友能玩的起的。
0
回复
ddmushroom
LV.4
21
2010-09-20 15:36
@ydcman
我用的是8位的PWM,有10位的PWM,没有用,考虑就是10位要双字节。连成的原因是:假如有个小的值10,10*1.01=10,取整了;要是保存此值,以此类退的话,连续调整N次之后还是10.所以考虑连成的。我用的是AVR的,不是PIC的
哦,我是全双字节运算,因子本身已经放大1000倍,每次调完保存一下
0
回复
2010-09-20 15:38
@ydcman
呵呵,数字信号处理器运算速度肯定够了,可以实时计算。就是TI的东东价格贵了些,不是我这样的发烧友能玩的起的。

发烧友,更有钱才是啊,既然发烧了,就要用旗舰型的东西啊。呵呵

再说价格也不贵啊,才3个USD而已啊。

0
回复
ydcman
LV.8
23
2010-09-20 15:40
@ddmushroom
哦,我是全双字节运算,因子本身已经放大1000倍,每次调完保存一下

嗯,谢谢了,你真是太牛了,这样既不影响速度,也可以满足精度,我理解仅仅停留在算法上,没有想到还有这一招。

0
回复
ddmushroom
LV.4
24
2010-09-20 15:49
@lizlk
发烧友,更有钱才是啊,既然发烧了,就要用旗舰型的东西啊。呵呵[图片]再说价格也不贵啊,才3个USD而已啊。

看看Ti现在主推的28x Piccolo系列的价格,真后悔当年怎么会定dsPIC的平台,都想推倒重来了。还被安富利的人嘲笑,TM气啊

不过离网的逆变没什么计算量,不并机的话8位也够了吧

0
回复
2010-09-20 15:52
@ddmushroom
看看Ti现在主推的28xPiccolo系列的价格,真后悔当年怎么会定dsPIC的平台,都想推倒重来了。还被安富利的人嘲笑,TM气啊不过离网的逆变没什么计算量,不并机的话8位也够了吧
呵呵,是啊,现在的PICCO可是非常好了,不过开发平台还不是很好,CCS是C2000的专用的。中文资料支持的也不够。
0
回复
ddmushroom
LV.4
26
2010-09-20 15:54
@ddmushroom
看看Ti现在主推的28xPiccolo系列的价格,真后悔当年怎么会定dsPIC的平台,都想推倒重来了。还被安富利的人嘲笑,TM气啊不过离网的逆变没什么计算量,不并机的话8位也够了吧

那帮人酸不溜秋的说,走过这么多厂,还没发现有一个用PIC平台的。业内70%用TI,剩下就是用freescale或者renesas。看来你们研究所果然创新能力强。

我真TM想一拖鞋丢过去:老子用啥管你们鸟事,就算憋死也不问狗日的安富利买东西

0
回复
2010-09-20 15:57
@ddmushroom
那帮人酸不溜秋的说,走过这么多厂,还没发现有一个用PIC平台的。业内70%用TI,剩下就是用freescale或者renesas。看来你们研究所果然创新能力强。我真TM想一拖鞋丢过去:老子用啥管你们鸟事,就算憋死也不问狗日的安富利买东西
呵呵,DSPIC用的人很多啊,安富利是推广老大,有点财大气粗的味道,呵呵。再说TI的C2000当时出来的时候并没有多少优势,只是现在慢慢完善了DSC的特点,从原先的DSP中脱离出来而已,要真正用的话,并不是随便一个人就能玩得通的这个东西的。
0
回复
ydcman
LV.8
28
2010-09-20 16:09
@ddmushroom
那帮人酸不溜秋的说,走过这么多厂,还没发现有一个用PIC平台的。业内70%用TI,剩下就是用freescale或者renesas。看来你们研究所果然创新能力强。我真TM想一拖鞋丢过去:老子用啥管你们鸟事,就算憋死也不问狗日的安富利买东西

用PIC的做逆变的还是很多的,是适用为主,一个单片机外围所有的信号都可以处理,干嘛非得用TI的。我最初是51的,汇编;后来学习C和AVR,个人感觉合用,用的精就行,没必要追寻最好的,还多公司还在用51,不也挺好的吗?我也可以用ARM的,感觉一则位数太高,没必要;还有就是要一个很长的熟悉过程。

0
回复
ddmushroom
LV.4
29
2010-09-20 16:11
@lizlk
呵呵,DSPIC用的人很多啊,安富利是推广老大,有点财大气粗的味道,呵呵。再说TI的C2000当时出来的时候并没有多少优势,只是现在慢慢完善了DSC的特点,从原先的DSP中脱离出来而已,要真正用的话,并不是随便一个人就能玩得通的这个东西的。

当时选microchip主要是他家文档做得好,资料全。价格倒是真的没考虑,反正平台在哪里,要改型号还是比较容易的。

起始我是想用freescale的,可惜他们技术支持实在太吊,我们这种级别只能自生自灭去了

0
回复
ydcman
LV.8
30
2010-09-20 16:35
@ydcman
嗯,谢谢了,你真是太牛了,这样既不影响速度,也可以满足精度,我理解仅仅停留在算法上,没有想到还有这一招。

呵呵,刚才不经意看了一下,没有想到一个下午回帖这么多,感谢两位高手的指点!

0
回复
ydcman
LV.8
31
2010-09-20 16:37
@lizlk
发烧友,更有钱才是啊,既然发烧了,就要用旗舰型的东西啊。呵呵[图片]再说价格也不贵啊,才3个USD而已啊。
呵呵,这是样品价格吗?批量价差不多,测试的话要交学费,一般*10吧,那光这一块就30多USD了,吃不消呀
0
回复