注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
eeleader的个人空间 https://home.eeworld.com.cn/space-uid-210489.html [收藏] [复制] [分享] [RSS]
日志

基于FPGA的SPWM 设计

热度 4已有 10117 次阅读2013-2-23 14:40 |个人分类:FPGA 开发技术总结|

一、基础理论方面

   1)PWM是脉冲宽度调制(Pulse Width Modulation)的简称,它在自动控制和计算机技术领域中都有广泛的应用。PWM调制原理 ---------PWM 波通常由一列占空比不同的矩形脉冲构成,其占空比与信号的瞬时采样值成比例。

   

a1.gif
2)FPGA---SPWM

     正弦脉宽调制(SPWM)技术在交流调速系统中得到广泛应用,但SPWM的波形生成是应用中一个难点,目前形成SPWM的方法有:(1)由分立元件构成,结构简单,但可靠性和精度均不能满足要求;(2)采用计算机计算或查表方式,省却了硬件电路,但CPU负担很重; (3)采用专用集成电路,如SLE4520、SA4828等,但其功能固定,可扩展性差;(4)采用FPGA(现场可编门阵列),具有速度快、精度高且可以在线编程修改等优点,是一种较好的方案。 

     实现SPWM原理;用输出的正弦信号作为调制波,用高频三角波作为载波.。

     SPWM就是在对一个正弦波进行脉宽调制时,使脉冲系列的占空比按正弦规律来排列。当正弦值为最大值时,脉冲的宽度也最大,而脉冲间的间隔则最小。反之,当正弦值较小时,脉冲的宽度也较小,而脉冲间的间隔则较

   a2.gif

 

 正弦波的峰值电压与三角波峰值电压之比,通常称为SPWM的模

令三角波频率与正弦波频率之比为载波比,载波比越大,产生的SPWM波的“精度”上越高。

SPWM波的具体理论和实现方法还是比较多的,这方面没有深入研究,仅想说明,笔者,也就我呢,是根据对称规则采样方法实现的。

二、基于FPGA的实现简易SPWM波的生成-------顶层文件的代码说明

   module spwm(

            clock,key,

            A_Data,B_Data,C_Data,

            tri_q,da_clk,flag,led,

            SPWM_A,SPWM_B,SPWM_C

           );

input clock;  //系统时钟

input   key;// 按键频率控制

output reg  [7:0] A_Data,B_Data,C_Data;//三相正弦表格输出值,SignalTap调试中查看数据

output    [8:0] tri_q;   //DA数据输出

output   da_clk;  //DA时钟输出

output    flag,led;

output   SPWM_A ,SPWM_B,SPWM_C;//对外输出的相移120的正弦脉宽调制信号

wire tri_clk,tri_updn;//可逆计数器的时钟和计数方向(用于控制三角波的生成)

wire [31:0]fword;

int_div div (.clock(clock),

             .clk_out(da_clk));//该部分主要是在SignalTap调试中使用的采样时钟

//调用DDS模块:按键模块控制频率控制字fword,生成三路相位120度的“数字”正弦信号,并且产生控制可逆计数器的使能计数时钟和方向信号。主要技术参数是:一个正弦波周期采样样本数据个数1024(波形ROM表格深度)

dds dds(             

.clock(clock),      

.fword(fword),

.A_data(A_Data),

.B_data(B_Data),

.C_data(C_Data),

.clk1(tri_updn),

.clk512(tri_clk)     

);

//调用三角波模块:可逆计数器的实现产生三角波(能在每输出一个正弦值的时候产生一个三角波),与DDS产生的正弦数据值进行比较,产生SPWM波

cnt Tri(

.clk(tri_clk),

.A_data(A_Data),

.B_data(B_Data),

.C_data(C_Data),

.updn(tri_updn),

.q(tri_q),

.flag(flag),

.SPWM_A(SPWM_A),

.SPWM_B(SPWM_B),

.SPWM_C(SPWM_C),

        );

//按键控制频率模块

key_debounce  fre_control(

         .clock(clock),

        .key(key),

        .fword(fword),

         .led(led)//按键指示灯

                 );

 

Endmodule

 

2)实际中体会

  第一,DDS模块是一个比较常用的用数字方式实现模拟信号的方法,以前一直只用了频率控制,这一次还通过深入理解用上了相位控制,从这个角度来讲,可以用FPGA小菜一碟的实现频率和相位可控的多通道SPWM波,然后再去外加上RC滤波电路和运放电路就可以实现可控正弦波。

  第二,这里的DDS模块还有产生一个可逆计数器的计数使能时钟和方向控制时钟,需要具体说说的是,如果你输出的正弦值是8位的,那么你的计数器的计数范围是在0---255---0,如果你输出的正弦值是9位的,那么你的计数器的计数范围是在0---511---0。还有,每此计数变化后(一个“数字”三角波产生),DDS中只输出一个正弦值,进行比较。

 

a3.gif

  第三、不可小觑饿三角波的生成。这个所谓的SPWM的载波,是在实现中最让我花费心思的地方。

   三角波生成代码:

   always @(negedge clk ) 

    begin 

        if(!updn) begin

             counter =counter+1'b1;

             if(counter ==9'd255)  counter2=9'd256;

             q = counter;     end

       else  begin

              counter2 =counter2-1'b1;

             if(counter2 ==9'd0)  counter=-9'd1;

              q = counter2;  end

       flag =updn;

   end

  上述代码是在反复调试过程中遇到问题后写出的,谈不上写得很好,毕竟自己只是FPGA的菜鸟级人物,但是还是比较理想的生成所需波形。

   第四、在SPWM波生成以后,外接RC滤波电路,这里的目的呢,是滤掉高频信号,到“平滑”信号,这里的电容和电阻取得小些。再加上LM358小搭一个同相比例放大器,实现一个真正的“有源”信号输出和幅值控制。

     a4.gif

a5.gif

a6.gif

发表评论 评论 (4 个评论)
回复 H1123 2018-10-24 16:11
你好,能发一份完整版的程序看一下吗????Q:1486297970
回复 诗与远方 2019-7-16 19:45
楼主,你好,可以分享一下完整的工程吗,谢谢啦。993960025@qq.com
回复 jojojojojo 2019-7-21 18:52
您好能分享一份完整工程吗?谢谢2424315362@qq.com

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章