6883|6

15

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

Spwm波形输出幅值不一样 [复制链接]

利用STM32F4,高级定时器产生的三路SPWM。具体思路:对一个正弦波周期进行预采样,采样点数是12个点(SinePoint),既30度一个点。然后f(x) = N/2 + N/2-1 * sin(2πx/N) x∈[0…N-1],有这个公式取表格,N就是我量化的量,我取的32768,生成了12个数据表格。载波频率我设置了 Fp=15Khz,TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 调制波的频率想在5-250hz之间可调的,所以设置了参数Fs。对于每一频率的正弦波调制波则对应的载波比就是Fp/Fs = N ,也就是说N个PWM波调制一个周期的正弦波,而又一个正弦波我只采样了12个点,所以在这N个波形里,采样x点与采样x+1点之间的PWM个说就是N/12 ,因为x点与x+1点有多个PWM波,所以我会在x点与x+1点插入差值,使得PWM占空比不会突变的太多,插入方法是计算x与x+1点的差值,然后差值/两点之间PWM的个数,该值就是平均值了,既我每次PWM中断,占空比对应上一次的PWM中断所增加的量。
代码:
const int SPsinetable[] =
{
//采样数 12 , 30度一个点                N = 32768
//f(x) = N/2 + N/2-1 * sin(2πx/N) x∈[0…N-1]
0x4000,0x6000,0x776C,0x7FFF,
0x776C,0x6000,0x4000,0x2001,
0x0894,0x0001,0x0894,0x2000
};

                t1 = SPsinetable[angle1%SinePoint] ;  //A相
                t2 = SPsinetable[(angle1+SinePoint/3 )% SinePoint]  ; //B相,120度
                t3 = SPsinetable[(angle1+SinePoint*2/3)% SinePoint] ;//C相   240度


                if(SPsinetable[angle1%SinePoint] > SPsinetable[(angle1+1)%SinePoint])        //A相,判断当前采样点与下一个采样点的大小,决定占空比是加还是减
                {
                        CompareTwo = SPsinetable[angle1%SinePoint] - SPsinetable[(angle1+1)%SinePoint] ;        //计算与下一个采样点的差值
                        AveTwo =        ((long)CompareTwo * (long)Addflag + (float)PhasePoint*0.5 )/ (PhasePoint+1); //插入平均值,四舍五入,Addflag:比如10次,差度是10,每次就是1,第一次+1*1,第二次+2*1,第三次+3*1
                        t1 -= (uint16_t)AveTwo ;        //计算周期占空比增量
                }
                else
                {
                        CompareTwo = SPsinetable[(angle1+1)%SinePoint] - SPsinetable[angle1%SinePoint] ;
                        AveTwo =        ((long)CompareTwo * (long)Addflag + (float)PhasePoint*0.5 )/ (PhasePoint+1);
                        t1 += (uint16_t)AveTwo;
                }

               //B C相同理计算,省空间就不列了
                Addflag ++ ;

                t1 = tpwm *  t1  >> 15 ;  //占空比计算,>>15是因为之前的量化了10的15次方
                t2 = tpwm *  t2  >> 15 ;
                t3 = tpwm *  t3  >> 15 ;


PWM中断程序:                             if(TIM_GetFlagStatus(TIM1, TIM_FLAG_Update) == SET)
                {
                        
                        if(Spwm_R_Flag) //开启标志
                        {                        
                                if(PwmTimes > PhasePoint)        //每个采样点之间的脉冲计数
                                {
                                        PwmTimes = 0 ;
                                        Addflag = 0 ;
                                        if(AngleR > (SinePoint-1)) AngleR = 0 ;  //采样完成一个周期,进行下一个周期
                                        AngleR ++ ;        //取下一个采样点
                                }
                                SVMR(RefSpeedR, AngleR);        //RefSpeedR,与此无关,忽略SVMR()就是占空比计算函数
                                PwmTimes ++ ;
                        }
                    }
以上就是我的SPWM的主要思路,目前情况是输出的波形经过RC滤波出来的波形  调制波频率越大,幅值却越小(见图)。
玩电子的这个圈子太小了,昨天发在另外论坛的都没人回复,希望这里能找到答案~

a.JPG (1.76 MB, 下载次数: 0)

低频率下的波形

低频率下的波形

b.JPG (1.76 MB, 下载次数: 0)

高频率小的波形

高频率小的波形
此帖出自单片机论坛

最新回复

是滤波的问题,再高就畸变必然的  详情 回复 发表于 2017-7-18 10:42
点赞 关注
 

回复
举报

38

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
这跟你的滤波参数也有关
此帖出自单片机论坛
 
 

回复

2万

帖子

0

TA的资源

超级版主

板凳
 
“输出的波形经过RC滤波出来的波形  调制波频率越大,幅值却越小”

当然!
否则,怎么能够叫低通滤波呢?
此帖出自单片机论坛
 
 
 

回复

2700

帖子

0

TA的资源

五彩晶圆(初级)

4
 
你的思路错了,你想改变输出电压幅值,要改变的是pwm的发波系数
此帖出自单片机论坛
 
个人签名作为一个水军,就是尽量的多回帖,因为懂的技术少,所以回帖水分大,见谅!
EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,商家勿入!加群暗号:喵
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

5
 
换了一个电容,我输出检测的方法是 :
A相输出------R(3.8K)-------R(8.2K)----------
                                                                |
B相输出------R(3.8K)-------R(8.2K)--------O点
                                                                |
C相输出------R(3.8K)-------R(8.2K)----------
                       
同时在R8.2K电阻处并联了一个电容,106的。。我把这个电容换成了104,居然幅值上去了~~~...
此帖出自单片机论坛
 
 
 

回复

21

帖子

0

TA的资源

一粒金砂(中级)

6
 
junl1989 发表于 2016-9-24 09:27
换了一个电容,我输出检测的方法是 :
A相输出------R(3.8K)-------R(8.2K)----------
                   ...

上到原幅值了吗?  
此帖出自单片机论坛
 
 
 

回复

4005

帖子

0

TA的资源

版主

7
 
是滤波的问题,再高就畸变必然的
此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表