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

讨论单片机实现SPWM的算法及实现过程

在论坛上看到越来越多的地方在讨论用单片机直接输出SPWM波形的话题,但大多数都是在争论单片机能否实现的问题,就我最近在网上查找的一些单片机的资料,有一些增强型的单片机应该是可以的,如:
   菲利浦的p89lpc938,输出PWM最高32M,晶振最高18M,指令执行时间2至4个时钟周期.我目前所用
   c80051F系列,单周期指令执行,最高可达100MIPS(据宣传).输出I/O可编程.功能强大.
   还有在论坛上常看见的Si8250好像也不错.
   虽然在这里列出了几款单片机,我希望在下面的帖子就不要再讨论有关单片机硬件的问题.
   希望大家多多讨论SPWM的算法,以及用单片机实现的控制过程
全部回复(10)
正序查看
倒序查看
rrrrr1234
LV.3
2
2005-07-26 09:30
我现在仅对规则采样法了解一点,公式如下:
    脉宽=aTcsin(wTd) Tc为载波频率,a为调制度,w为正弦波角频率,  Td为脉冲所在的时间.这个公式算出的结果用两个IO输出,当一个IO输出一个半波的PWM时,此时另一个输出为无效电平.
我用单片机实现这个公式的想法:
    用查表的方法.把0.5Tcsin(wTd)算出做一个表格,用一个八位的A/D来采样输出电压的变化,计算后得到a值,再根据下面的式子算出实际的脉宽:0.5aTcsin(wTd)/128,这仅是我一点单纯的思路,希望大家积极发表意见,特别是如果我的想法有不对的地方,请不要保留.谢谢
0
回复
rrrrr1234
LV.3
3
2005-07-26 13:07
@rrrrr1234
我现在仅对规则采样法了解一点,公式如下:    脉宽=aTcsin(wTd)Tc为载波频率,a为调制度,w为正弦波角频率,  Td为脉冲所在的时间.这个公式算出的结果用两个IO输出,当一个IO输出一个半波的PWM时,此时另一个输出为无效电平.我用单片机实现这个公式的想法:    用查表的方法.把0.5Tcsin(wTd)算出做一个表格,用一个八位的A/D来采样输出电压的变化,计算后得到a值,再根据下面的式子算出实际的脉宽:0.5aTcsin(wTd)/128,这仅是我一点单纯的思路,希望大家积极发表意见,特别是如果我的想法有不对的地方,请不要保留.谢谢
没人回,提一个问题,资料上说规则采样法的直流电压利用率较代,仅
0.866,这个直流电压利用率是什么意思,是指比如直流电压为400V,那么输出正弦波最大幅值为400*0.866v吗?还是指效率?
已经知道直流电压利用率的意思是指400*0.866,但又有一个问题,这个0.866是指三相的时候给出的,现在我的是单相,那么这个值是1吗?
0
回复
hvic
LV.4
4
2005-07-26 17:55
@rrrrr1234
没人回,提一个问题,资料上说规则采样法的直流电压利用率较代,仅0.866,这个直流电压利用率是什么意思,是指比如直流电压为400V,那么输出正弦波最大幅值为400*0.866v吗?还是指效率?已经知道直流电压利用率的意思是指400*0.866,但又有一个问题,这个0.866是指三相的时候给出的,现在我的是单相,那么这个值是1吗?
做产品时要考虑价格的,这些单片机不便宜吧
0
回复
cpu51
LV.5
5
2005-08-02 08:28
@rrrrr1234
我现在仅对规则采样法了解一点,公式如下:    脉宽=aTcsin(wTd)Tc为载波频率,a为调制度,w为正弦波角频率,  Td为脉冲所在的时间.这个公式算出的结果用两个IO输出,当一个IO输出一个半波的PWM时,此时另一个输出为无效电平.我用单片机实现这个公式的想法:    用查表的方法.把0.5Tcsin(wTd)算出做一个表格,用一个八位的A/D来采样输出电压的变化,计算后得到a值,再根据下面的式子算出实际的脉宽:0.5aTcsin(wTd)/128,这仅是我一点单纯的思路,希望大家积极发表意见,特别是如果我的想法有不对的地方,请不要保留.谢谢
我开环控制,波形好,但闭环加入了调节的脉冲就不好了,不知如何将加入了调节的脉冲也变好.我是在每个脉冲上都加一个数值.这样我想就不是正弦了.
0
回复
rrrrr1234
LV.3
6
2005-08-08 17:00
@cpu51
我开环控制,波形好,但闭环加入了调节的脉冲就不好了,不知如何将加入了调节的脉冲也变好.我是在每个脉冲上都加一个数值.这样我想就不是正弦了.
都加一个数值是什么意思?是一个固定的值吗?如果是这样肯定不对了
0
回复
cpu51
LV.5
7
2005-08-08 18:07
@rrrrr1234
都加一个数值是什么意思?是一个固定的值吗?如果是这样肯定不对了
我是加一个固定的数值,确实不对,但让CPU计算SIN,来不及,如何办比较好呢,请指点呀.
0
回复
cpu51
LV.5
8
2005-09-27 08:16
@rrrrr1234
我现在仅对规则采样法了解一点,公式如下:    脉宽=aTcsin(wTd)Tc为载波频率,a为调制度,w为正弦波角频率,  Td为脉冲所在的时间.这个公式算出的结果用两个IO输出,当一个IO输出一个半波的PWM时,此时另一个输出为无效电平.我用单片机实现这个公式的想法:    用查表的方法.把0.5Tcsin(wTd)算出做一个表格,用一个八位的A/D来采样输出电压的变化,计算后得到a值,再根据下面的式子算出实际的脉宽:0.5aTcsin(wTd)/128,这仅是我一点单纯的思路,希望大家积极发表意见,特别是如果我的想法有不对的地方,请不要保留.谢谢
RRRRR1234,我还不清楚你的计算是怎么算的,如我的载频是25K,PWM-》TOP=200,半波125个数据,请计算出正弦表一看.
0
回复
sunrise
LV.5
9
2005-09-28 11:19
@rrrrr1234
我现在仅对规则采样法了解一点,公式如下:    脉宽=aTcsin(wTd)Tc为载波频率,a为调制度,w为正弦波角频率,  Td为脉冲所在的时间.这个公式算出的结果用两个IO输出,当一个IO输出一个半波的PWM时,此时另一个输出为无效电平.我用单片机实现这个公式的想法:    用查表的方法.把0.5Tcsin(wTd)算出做一个表格,用一个八位的A/D来采样输出电压的变化,计算后得到a值,再根据下面的式子算出实际的脉宽:0.5aTcsin(wTd)/128,这仅是我一点单纯的思路,希望大家积极发表意见,特别是如果我的想法有不对的地方,请不要保留.谢谢
我认为用P89LPC938单片机不用计算宽度,将Tcsin(wTd)(16位)算出做一个表格,利用采样电压计算一个系数K,算出KTcsin(wTd)的值,由CCU单元进行对称PWM比较,定时器中断更改一次定时值即可.
0
回复
lyx100
LV.4
10
2005-09-28 13:46
采用PIC16F74(RMB14)来做效果很好的.
0
回复
tsg999888
LV.1
11
2005-09-29 17:19
@lyx100
采用PIC16F74(RMB14)来做效果很好的.
可有原理图?能否贴出来大家学习?谢谢.
0
回复