基于Verilog HDL的SPWM全数字算法的FPGA实现.doc_第1页
基于Verilog HDL的SPWM全数字算法的FPGA实现.doc_第2页
基于Verilog HDL的SPWM全数字算法的FPGA实现.doc_第3页
基于Verilog HDL的SPWM全数字算法的FPGA实现.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于Verilog HDL的SPWM全数字算法的FPGA实现丁电宽, 梁建均, 王文奇, 杨荣杰(安阳师范学院电气电子信息工程系, 安阳市 455002)摘 要 本文在详细阐述正弦脉宽调制算法的基础上,结合DDS技术,以Actel FPGA作为控制核心,通过自然采样法比较1个三角载波和3个相位差为1200的正弦波,利用Verilog HDL语言实现死区时间可调的SPWM全数字算法。并在Fushion StartKit开发板上实现SPWM全数字算法,通过逻辑分析仪和数字存储示波器得到了验证,为该技术进一步应用和推广提供了一个良好的开放平台。关键词:Actel FPGA; SPWM; DDS; Verilog HDL中图分类号:TP273 文献标识码 :B 文章编号 :SPWM Entire Digital Algorithm FPGA Realization Based on Verilog HDL DING Dian-kuan, LIANG Jian-jun, WANG Wen-qi, YANG Rong-jie(Department of Electrical & Electronics Information Engineering,Anyang Normal University,anyang 455002,China)Abstract: On the basis of explaining the SPWM algorithm, this paper combines DDS technology and puts Actel FPGA as the controlling core,through natural sampling method compare a triangular carrier with 3 for the 120 phase of the sine wave, using Verilog HDL language to implement adjustable cross-over time of all-digital algorithmic SPWM, and achieve entire digital algorithm SPWM on development board of Fushion StartKit.broad. Through the logic analyzer and digital storage oscilloscope has been verified, the application of technology to further promote and provide a good platform for open.Key words: Actel FPGA;sinusoidal pulse-width modulation;direct digita frequency synthests;Verilog HDL第 5 页 0 概述随着信号处理技术及集成电路制造工艺的不断发展,全数字化SPWM(正弦脉宽调制)算法在调速领域越来越受到青睐。实现SPWM控制算法的方法很多,其中模拟比较法因电路复杂,且不易与数字系统连接而很少采样;传统的微处理器因不能满足电机控制要求较高的采样频率(1 kHz)而逐渐被高性能的DSP硬件系统所取代,但该系统成本高,设计复杂。与传统方法相比,在现场可编程逻辑器件FPGA上产生一种新的SPWM控制算法,具有成本低、研发周期短、执行速度高、可扩展能力强等优点。该技术进一步推动了变频调速技术的发展。本文结合SPWM算法及FPGA的特点,以Actel FPGA作为控制核心,用Verilog HDL语言实现了可编程死区延时的三相六路SPWM全数字波形,并在Fushion StartKit开发板上实现了各功能模块,通过逻辑分析仪和数字存储示波器验证了SPWM波形及死区时间,为该技术进一步应用和推广提供了一个平台。1 Actel Fushion器件介绍1-2Actel Fushion系列器件是世界上第一款也是唯一一款具有模拟功能的Flash架构FPGA,结合先进的Flash FPGA数字技术和模拟技术,融合了FPGA数字内核、ADC、Flash存储器、模拟的IO、RTC等数字和模拟部分。Fushion器件内部具有2Mbit到8Mbit不等的用户可用的Flash memory;30个通道、最高12位精度、最高600ksps采样率的ADC;片内100MHz的RC振荡器与PLL(锁相环)一起共同为FPGA提供时钟;Fushion内部40bits的RTC除支持典型的RTC应用外,还可以控制片内1.5V的电压调整器以实现低功耗的睡眠和唤醒模式。这些特点极大地提高了单芯片的功能,简化了整个系统设计,大幅度减少了电路板面积和系统的总成本。Fushion系列AFS600内部含有用户使用的容量4Mbit的Flash memory存储器,内部存储器模块以Flash memory Block(FB)形式划分,每个FB限制为2Mbit的空间,用户可以单独使用每个FB块,也可以自行用逻辑来级联所有的FB块以构建大容量的Flash存储器。Flash memory读操作可以从FB阵列、页面缓冲区或状态寄存器中读取数据。2数字系统电路总体设计方案2.1 SPWM算法原理3正弦脉宽调制技术(SPWM)是调制波为正弦波、载波为三角波或锯齿波的一种脉宽调制法,是现代变频调速系统中应用最为广泛的脉宽调制方式。目前有自然采样法、规则采样法、等面积法等方法,其中规则采样法计算简单,但谐波含量较大;一种改进的等面积法谐波含量低,但计算复杂;不利于系统实现,而自然采样法是在正弦波和三角波的自然交点时刻控制功率开关器件的通断,是最理想的采样方法。本文采用等腰三角波和三路相差1200的正弦波比较生成SPWM波,在Fushion StartKit开发板上采用自然采样法,结合数字频率合成技术DDS,生成死区延时可调的SPWM全数字波形。2.2数字系统电路总体方案设计4-7Verilog HDL代码编写具有很好的易读性和可重用性,结合Verilog HDL硬件描述语言设计规范及SPWM工作机理,用自顶向下的分割方法对整个系统进行总体方案设计。首先从系统设计入手,在顶复位输入系统时钟48MHzPLL模块地址选择器第一相地址加法 器第二相地址加法 器第三相地址加法 器Flashmemory模块正 弦 函 数 表暂存器3暂存器2暂存器1存储器A存储器B存储器CA相比较器B相比较器C相比较器死区时延死区时延死区时延三角波发生器A相上A相下B相下B相上C相上C相下图1 顶层功能方框图层进行功能方框图的划分和结构设计。系统顶层功能方框图如图1所示。从图1可以看出,该系统主要包括:三角波产生模块,建立正弦函数表,三相正弦波产生和输出模块,三角波与正弦波比较控制模块,死区时延控制输出模块,时钟输出控制模块等控制模块。根据顶层设计的思想,采用Verilog HDL语言分别实现各个模块的设计,最后把各个模块嵌入到顶层模块中,使各个模块有机的组成一个完整的整体。3 系统模块的设计与实现3.1 直接数字频率合成模块8直接数字频率合成(DDS,Direct Digital Frequency Synthests)是采用数字化技术,通过控制频率控制字直接产生所需的各种不同频率信号,突破了模拟频率合成法的原理,从“相位”的概念出发进行频率合成。这种合成方法不仅可以给出不同频率的正弦波,而且还可以给出不同初始相位的正弦波,甚至可以给出各种任意波形。电路一般包括基准时钟、频率累加器、相位累加器、幅度/相位转换电路、D/A 转换器。在设计中,将要输出的波形数据(如正弦函数表)预先存在ROM(或RAM)单元中,然后在系统标准时钟频率下,按照一定的顺序从ROM(或RAM)单元中读出数据,再进行D/A转换,就可以得到一定频率的输出波形。本设计直接利用从Flash memory存储单元中读出的离散正弦函数值与生成的三角波进行比较,实现系统的全数字化要求。3.2 三角波产生模块本模块采用同步三角波调制方法,利用可逆计数器对输入时钟进行计数。计数器先执行加法,从0计数到255,再执行减法计数从255到0,从而形成三角载波,如此反复就可以得到峰峰值255连续的三角波形。输入时钟是系统时钟通过锁相环输出的1MHz的时钟。3.3 建立正弦函数表三角波的幅值范围在0255,而正弦波的幅值在-1+1之间,为了实现等幅值比较,将正弦波上移一个单位后,再将所有值同乘以128,即正弦波的幅值也在0255之间了。即m=128(sin(x)+1) (1)式(1)用C语言对此函数在一个周期(02)内768个量化并且直接生成Flash memory初始化文件(.ahx)格式,再用SmartGen输入将Flash memory配置成常用的数据存储器,将预先生成的.ahx文件导入生成data Storage宏模块,就建立了正弦函数表。生成正弦函数表的流程图如图2所示。3.4 三相正弦波产生和输出模块9-10FPGA的Fushion芯片理论上可以实现任何方式的数学运算逻辑,但由于芯片的容量限制,并不是任何计算都能实现的。因此需事先将正弦函数离散并加载到FPGA的Flash memory中,在正弦调制波的离散过程中即可将一个周期完整的离散。因此,只对其中A相进行离散化处理,数据存储Flash memory中,每个数据分配1个地址。即可以利用计数器来产生取正弦波数据的地址,通过数字频率合成技术改变计数器的计数频率就可以改变正弦波的频率。这样即可先输出一路的正弦波,另外两路正弦波产生的方法与此类似,只不过,起始取数据的地址相差1200,即分别从第256,512个数据开始取数。 为了在每个调制波周期查找正弦函数表以及分别与载波进行比较。在设计中采用时分复用技术,即依据三相关系,由一个地址计数器,通过基本量开始初始化变量x、n、i、m建立只写文件i=0i=768?i=i+1n=i,x=2pin/Nm=128(sin(x)+1)输出m,i生成.ahx文件结束NY图2 正弦函数表的流程图加1转移到另一地址计数器中,并且在跳转过程中,这一地址计数器加1指向下一单元,来分时取出三相地址单元的内容。利用对正弦表寻址的高速度,使一个正弦表在不同时间段查询不同相的正弦波的幅值,以达到减少正弦表所占用的FPGA资源的目的。这样就大大减少了逻辑数目,仅增加了地址选择器和三个同步存储器,实现了正弦函数表的复用,在很大程度上节省了芯片的资源。电路的具体实现:相位互差1200的三路地址数据并行输入,通过一个三选一的选择器进行选择,选择器的控制端接三进制的计数器。如计数器为0时,输出A相地址,取出A相正弦值。为1时,输出B相地址,取出B相正弦值。为2时,输出C相地址,取出C相正弦值。因此只要使输入的三相地址周期性变化,就可实现并行输入的三相地址数据在时间上形成了连续,也就实现了三相地址数据的合成。其存储单元功能框图如图3。这样就可以利用一个正弦表来得到三相的正弦值,达到减少正弦表占用FPGA资源的目的。分时地址计数器Flash memory正弦函数表sinAsinBsinc各相地址时钟图3 存储单元功能框图查表时每次只能输出一相的数据,所以每次产生的数据需利用寄存器先暂存一下。首先出来A相,通过暂存器l存入到A相存储器。接着出来B相,利用暂存器2存入到B相存储器。最后是C相,利用暂存器3存入到C相存储器中。这样,三相正弦波数据都存储在各自的存储器中,这三个寄存器采用同步控制信号,当控制信号触发时候,这时同时输出三相的正弦波数据用于后面的比较。该部分用状态机实现,其状态转换图如图4所示:B:取二路数据C:取三路数据A:取一路数据D:等待E:输出三路数据开始!rst|00100!rst|01000!rst|10000!rst|00001!rst|00001!rst|00010rst图4 状态转换图其部分程序代码如下:case(state1)A: /初始化状态begin ADDRES1=addr1; /时分复用第一路地址 READ_EN=1b1; /读使能开 NEXT=1b1; /开启预读模式 if(addr1=18d767) /生成地址 addr1=18d0; else if (!BUSY) /如不忙状态开始读 begin addr1=addr1+18d1; /地址自增 out0=DATAOUT; /数据暂存 state1=B; /取第二路数据地址 end endB: /取第二路数据beginADDRES1=addr2; /时分复用第二路地址READ_EN=1b1;NEXT=1b1;if(addr2=18d767)addr2=18d0;else if (!BUSY)begin addr2=addr2+18d1; out1=DATAOUT; state1=C; endendC: /取第三路数据beginADDRES1=addr3; /时分复用第三路地址READ_EN=1b1;NEXT=1b1;if(addr3=18d767)addr3=18d0;else if (!BUSY)beginaddr3=addr3+18d1; out2=DATAOUT; state1=D;endendD: /空操作状态begin state1=E;endE: /数据存储,同时取出三路数据begin outdata0=out0; outdata1=out1; outdata2=out2; state1out2) outdata4=1; else outdata4=0; if(outdata1out2) outdata5=1; else outdata5=0; if(outdata2out2) outdata6=1; else outdata6=0; end3.5 时延控制死区输出模块对于SPWM三相桥式逆变器,由于开关管固有开关时间Ts的影响,开通时间Ton往往小于关断时间Tof,因此容易发生同臂两只开关管同时导通的短路故障。为了避免这种故障的发生,通常要设置开关死区T,以保证同桥臂上的一只开关管可靠关断后,另一只开关管才能开通。死区的设置方式有两种:一种是提前关断、延时开通的双边对称设置;另一种是按时关断、延滞t开通的单边不对称设置。根据FPGA的编程特点,我们选择了按时关断、延滞t开通的单边不对称设置,并且时延死区的调节与控制,与时延控制死区模块的输入时钟clk有关。根据延时模块中延时信息:t=2Tclk clk是锁相环输出时钟CLK1MHz(本文采用的是1MHz)的2次分频得到的时钟,只要改变顶层模块中的对CLK1MHz的分频系数,就可以精确控制延滞t的大小,本文计算值t=4us。另外,死区调节单元还具有消除由于FPGA器件本身的时延造成的毛刺的功能。其部分死区控制程序代码如下:always (posedge clk or posedge rst )begin if(rst) /异步复位 begin /初始化寄存器 q=0; q0=0; end else begin /延时输出的D触发器 if(d) begin q0=1b1; q=q0; end else begin /立即清零 q=0; q0=0; end end end有关clk生成与调节的程序代码如下:always (posedge CLK1M or posedge rst) /分频产生时延控制时钟begin if(rst) /异步复位 begin clk=0; /时钟初始状态清零 couter=0; /计数初值设置零 end else begin if(couter=2b01) begin clk=clk; couter=0; end else couter=couter+1b1; /计数器加1 endend3.6时钟输出控制模块FushionAFS600器件的系统时钟是48MHz,因本设计正弦波的扫描频率和三角波的扫描频率预设为1MHz,为减少时钟输出模块的数量以及能方便更改系统输出SPWM波形的占空比和频率,本设计充分利用Fushion器件的时钟调整电路,用SmartGen生成一个静态PLL宏模块,把系统时钟分频成1MHz的时钟分别是CLK1M和CLK2M,并连接到全局网络上。当需要一定频率和不同占空比的SPWM脉冲时,只需计算出载波和调制波形的扫描频率,而后直接在SmartGen宏模块中修改静态PLL输出时钟,就可实现输出SPWM波形密度的控制与调节,从而满足各种工作频率的需求。4 基于FPGA的SPWM实现及系统测试4.1 SPWM控制技术的FPGA实现根据顶层功能图(如图1)分别用Verilog HDL语言和SmartGen输入描述了各个功能单元模块,并分别在Libero 8.1集成开发环境下通过编译和仿真验证。最后用Verilog HDL语言编写一个顶层模块实现各个功能模块的有机组合,以实现总体功能,再在Libero 8.1集成开发环境下进行编译、逻辑综合、布局布线后下载到目标器件Fushion AFS600器件FPGA上,实现了三相六路可控中的SPWM全数字算法的片上系统。4.2 系

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论