已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于Verilog HDL的SPWM全数字算法的FPGA实现 摘 要: 在详细阐述正弦脉宽调制算法的基础上,结合DDS技术,以Actel FPGA作为控制核心,通过自然采样法比较1个三角载波和3个相位差为1 200的正弦波,利用Verilog HDL语言实现死区时间可调的SPWM全数字算法,并在Fushion StartKit开发板上实现SPWM全数字算法。通过逻辑分析仪和数字存储示波器得到了验证,为该技术进一步应用和推广提供了一个良好的开放平台。 关键词: Actel FPGA;SPWM;DDS;Verilog HDL 随着信号处理技术及集成电路制造工艺的不断发展,全数字化SPWM(正弦脉宽调制)算法在调速领域越来越受到青睐。实现SPWM控制算法的方法很多,其中模拟比较法因电路复杂、且不易与数字系统连接而很少采用;传统的微处理器因不能满足电机控制所要求的较高采样频率(1 kHz)而逐渐被高性能的DSP硬件系统所取代,但该系统成本高、设计复杂。与传统方法相比,在现场可编程逻辑器件FPGA上产生一种新的SPWM控制算法,具有成本低、研发周期短、执行速度高、可扩展能力强等优点。该技术进一步推动了变频调速技术的发展。 本文结合SPWM算法及FPGA的特点,以Actel FPGA作为控制核心,用Verilog HDL语言实现了可编程死区延时的三相六路SPWM全数字波形,并在Fushion StartKit开发板上实现了各功能模块,通过逻辑分析仪和数字存储示波器上验证了SPWM波形及死区时间,为该技术进一步应用和推广提供了一个平台。1 Actel Fushion器件介绍1-2 Actel Fushion系列器件是一款具有模拟功能的Flash架构FPGA,结合先进的Flash FPGA数字技术和模拟技术,融合了FPGA数字内核、ADC、Flash存储器、模拟的I/O、RTC等部分。Fushion器件内部具有2 Mbit到8 Mbit不等的用户可用的Flash存储器;30个通道、最高12位精度、最高600 kS/s采样率的ADC;片内100 MHz的RC振荡器与PLL(锁相环)共同为FPGA提供时钟;Fushion内部40 bit的RTC除支持典型的RTC应用外,还可以控制片内1.5 V的电压调整器以实现低功耗的睡眠和唤醒模式。这些特点极大地提高了单芯片的功能,简化了整个系统设计,大幅度减少了电路板面积和系统的总成本。 Fushion系列AFS600内部含有用户使用的容量为4 Mbit的Flash存储器,内部存储器模块以Flash memory Block(FB)形式划分,每个FB限制为2 Mbit的空间,用户可以单独使用每个FB块,也可以自行用逻辑来级联所有的FB块以构建大容量的Flash存储器。Flash 存储器读操作可以从FB阵列、页面缓冲区或状态寄存器中读取数据。2 数字系统电路总体设计方案2.1 SPWM算法原理3 正弦脉宽调制技术(SPWM)是调制波为正弦波、载波为三角波或锯齿波的一种脉宽调制法,是现代变频调速系统中应用最为广泛的脉宽调制方式,目前有自然采样法、规则采样法、等面积法等。其中规则采样法计算简单,但谐波含量较大;一种改进的等面积法谐波含量低,但计算复杂,不利于系统实现;自然采样法是在正弦波和三角波的自然交点时刻控制功率开关器件的通断,是最理想的采样方法。 本文采用等腰三角波和三路相差120的正弦波比较生成SPWM波,在Fushion StartKit开发板上采用自然采样法,结合数字频率合成技术DDS,生成死区延时可调的SPWM全数字波形。2.2 数字系统电路总体方案设计4-7 Verilog HDL硬件描述语言具有很好的易读性和可重用性,结合Verilog HDL硬件描述语言设计规范及SPWM工作机理,用自顶向下的分割方法对整个系统进行总体方案设计。首先从系统设计入手,在顶层进行功能方框图的划分和结构设计。系统顶层功能方框图如图1所示。 根据顶层设计的思想,采用Verilog HDL语言分别实现各个模块的设计,最后把各个模块嵌入到顶层模块中,使各个模块有机地组成一个完整的整体。3 系统模块的设计与实现3.1 直接数字频率合成模块8 直接数字频率合成DDS是采用数字化技术,通过控制频率控制字直接产生所需的各种不同频率信号,突破了模拟频率合成法的原理,从“相位”的概念出发进行频率合成。这种合成方法不仅可以给出不同频率的正弦波,而且还可以给出不同初始相位的正弦波,甚至可以给出各种任意波形。电路一般包括基准时钟、频率累加器、相位累加器、幅度/相位转换电路、D/A 转换器。在设计中,将要输出的波形数据(如正弦函数表)预先存在ROM(或RAM)单元中,然后在系统标准时钟频率下,按照一定的顺序从ROM(或RAM)单元中读出数据,再进行D/A转换,就可以得到一定频率的输出波形。本设计直接利用从Flash存储器的存储单元中读出的离散正弦函数值与生成的三角波进行比较,实现系统的全数字化要求。3.2 三角波产生模块 本模块采用同步三角波调制方法,利用可逆计数器对输入时钟进行计数。计数器先执行加法,从0计数到255,再执行减法计数从255到0,从而形成三角载波。如此反复就可以得到峰峰值255连续的三角波形。输入时钟是系统时钟通过锁相环输出的1 MHz的时钟。3.3 建立正弦函数表 三角波的幅值范围在0255,而正弦波的幅值在-1+1之间,为了实现等幅值比较,将正弦波上移一个单位后,再将所有值同乘以128,使正弦波的幅值也在0255之间。即: m=128(sin(x)+1) (1) 式(1)用C语言对此函数在一个周期(02)内完成768个量化并且直接生成Flash存储器的初始化文件(.ahx)格式,再用SmartGen输入将Flash 存储器配置成常用的数据存储器,将预先生成的.ahx文件导入生成data Storage宏模块,就建立了正弦函数表。生成正弦函数表的流程图如图2所示。3.4 三相正弦波产生和输出模块9,10 FPGA的Fushion芯片理论上可以实现任何方式的数学运算逻辑,但由于芯片的容量限制,并不是任何计算都能实现的。因此需事先将正弦函数离散并加载到FPGA的Flash存储器中,在正弦调制波的离散过程中即可将一个周期完整地离散。因此,只对其中A相进行离散化处理,数据存储在Flash存储器中,每个数据分配1个地址。即可以利用计数器来产生取正弦波数据的地址,通过数字频率合成技术改变计数器的计数频率就可以改变正弦波的频率。这样即可先输出一路的正弦波,另外两路正弦波产生的方法与此类似,只是起始取数据的地址相差120,即分别从第256和第512个数据开始取数。 为了在每个调制波周期查找正弦函数表以及分别与载波进行比较,在设计中采用时分复用技术。即依据三相关系,由一个地址计数器,通过基本量加1转移到另一地址计数器中,并且在跳转过程中,这一地址计数器加1指向下一单元,从而分时取出三相地址单元的内容。利用对正弦表寻址的高速度,使一个正弦表在不同时间段查询不同相的正弦波的幅值,以达到减少正弦表所占用的FPGA资源的目的。这样就大大减少了逻辑数目,仅增加了地址选择器和三个同步存储器,实现了正弦函数表的复用,在很大程度上节省了芯片的资源。 电路的具体实现:相位互差120的三路地址数据并行输入,通过一个三选一的选择器进行选择,选择器的控制端接三进制的计数器。如计数器为0时,输出A相地址,取出A相正弦值;为1时,输出B相地址,取出B相正弦值;为2时,输出C相地址,取出C相正弦值。因此只要使输入的三相地址周期性变化,就可实现并行输入的三相地址数据在时间上的连续,也就实现了三相地址数据的合成。其存储单元功能框图如图3。这样就可以利用一个正弦表来得到三相的正弦值,达到减少正弦表占用FPGA资源的目的。 查表时每次只能输出一相的数据,所以每次产生的数据需利用寄存器先暂存一下。首先输出A相,通过暂存器l存入到A相存储器;接着输出B相,利用暂存器2存入到B相存储器;最后输出C相,利用暂存器3存入到C相存储器中。这样,三相正弦波数据都存储在各自的存储器中,这三个寄存器采用同步控制信号,当控制信号触发时,同时输出三相的正弦波数据用于后面的比较。该部分用状态机实现,其状态转换图如图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: /取第二路数据 begin ADDRES1=addr2; /时分复用第二路地址 READ_EN=1b1; NEXT=1b1; if(addr2=18d767) addr2=18d0; else if (!BUSY) begin addr2=addr2+18d1; out1=DATAOUT; state1=C; end endC: /取第三路数据 begin ADDRES1=addr3; /时分复用第三路地址 READ_EN=1b1; NEXT=1b1; if(addr3=18d767) addr3=18d0; else if (!BUSY) begin addr3=addr3+18d1; out2=DATAOUT; state1=D; end endD: /空操作状态 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.6 时延控制死区输出模块 对于SPWM三相桥式逆变器,由于开关管固有开关时间Ts的影响,开通时间Ton往往小于关断时间Tof,因此容易发生同臂两只开关管同时导通的短路故障。为了避免这种故障的发生,通常要设置开关死区T,以保证同桥臂上的一只开关管可靠关断后,另一只开关管才能开通。死区的设置方式有两种:一种是提前关断、延时开通的双边对称设置;另一种是按时关断、延滞t开通的单边不对称设置。根据FPGA的编程特点,选择了按时关断、延滞t开通的单边不对称设置,并且时延死区的调节与控制与时延控制死区模块的输入时钟clk有关。 根据延时模块中延时信息:t=2Tclk clk是锁相环输出时钟CLK 1 MHz(本文采用的是1 MHz)的2次分频得到的时钟,只要改变顶层模块中对CLK 1 MHz的分频系数,就可以精确控制延滞t的大小,本文计算值t=4s。 另外,死区调节单元还能消除由于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 end end3.7 时钟输出控制模块 FushionAFS600器件的系统时钟是48 MHz,因本设计正弦波的扫描频率和三角波的扫描频率预设为1 MHz,为减少时钟输出模块的数量以及能方便更改系统输出SPWM波形的占空比和频率,本设计充分利用Fushion器件的时钟调整电路,用SmartGen生成一个静态PLL宏模块,把系统时钟分频成1 MHz的时钟分别是CLK 1 M和CLK 2 M,并连接到全局网络上。当需要一定频率和不同占空比的SPWM脉冲时,只需计算出载波和调制波形的扫描频率,而后直接在SmartGen宏模块中修改静态PLL输出时钟,就可实现输出SPWM波形密度的控制与调节,从而满足各种工作频率的需求。4 基于FPGA的SPWM实现及系统测试4.1 SPWM控制技术的FPGA实现 根据顶层功能图(如图1),分别用Verilog HDL语言和SmartGen输入描述了各个功能单元模块,并分别在Libero 8.1集成开发环境下通过编译和仿真验证。最后用Verilog HDL语言编写一个顶层模块实现各个功能模块的有机组合,以实现总体功能,再在Libero 8.1集成开发环境下进行编译、逻辑综合、布局布线后下载到目标器件Fush
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 沈阳理工大学《工厂供电》2021-2022学年期末试卷
- 固定总价合同规范要求
- 国药器械销售合同
- 合同保证金遗失声明
- 合同法第三章42条
- 2024年兴安客运从业资格证考试模板
- 2024融资合同股权股份转让协议
- 2024工伤劳动合同范文
- 2024小区绿化工程合同
- 英语阅读记录卡-20210813175455
- 河北省保定市定州市2024-2025学年九年级上学期期中考试化学试卷
- 2024-2030年狂犬疫苗行业市场深度分析及发展策略研究报告
- 《基因指导蛋白质的合成》(第 1课时)教学设计
- 2024-2030年果蔬行业市场发展现状及竞争格局与投资战略研究报告
- 2 0 2 4 年 7 月 国开专科《法理学》期末纸质考试 试题及答案
- 大疆在线测评题答案
- 公共政策分析第一章
- 行业协会重大活动备案报告制度
- 北京市海淀区2024学年七年级上学期语文期中试卷【含参考答案】
- 2024年新人教版七年级上册数学教学课件 5.2 解一元一次方程 第4课时 利用去分母解一元一次方程
- Unit 4 My Favourite Subject教学设计2024-2025学年人教版(2024)英语七年级上册
评论
0/150
提交评论