基于FPGA的PWM控制器设计

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

FPGA实验报告

基于FPGA的PWM控制器设计

1设计任务与要求

1.1掌握PWM技术原理;了解PWM控制方法及应用;完成基于FPGA的PWM控制器设计。

1.2通过课程设计的实践,进一步理解和掌握硬件描述语言(VHDL或Verilog)和TOP-DOWN的设计流程,提高对实际项目的分析和设计能力,体会FPGA项目的过程,熟悉实验报告的编写规范。

2设计原理分析

2.1利用FPGA语言编写程序实现对50MHZ的硬件晶振进行分频和调节占空比。对硬件晶振的上升沿就行计数,当2nHZ频率利用高低电平进行分频时,当计数到n-1是对原电平进行反向就可以实现分频。占空比是对上升沿的计数是两个不同的数值时进行反向。

2.2脉宽调制(PWM)基本原理:控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。按一定的规则对各脉冲的宽度进行调制,即可改变逆变电路输出电压的大小,也可改变输出频率。

例如,把正弦半波波形分成N等份,就可把正弦半波看成由N个彼此相连的脉冲所组成的波形。这些脉冲宽度相等,都等于∏/n ,但幅值不等,且脉冲顶部不是水平直线,而是曲线,各脉冲的幅值按正弦规律变化。如果把上述脉冲序列用同样数量的等幅而不等宽的矩形脉冲序列代替,使矩形脉冲的中点和相应正弦等分的中点重合,且使矩形脉冲和相应正弦部分面积(即冲量)相等,就得到一组脉冲序列,这就是PWM波形。可以看出,各脉冲宽度是按正弦规律变化的。根据冲量相等效果相同的原理,PWM波形和正弦半波是等效的。对于正弦的负半周,也可以用同样的方法得到PWM波形。

在PWM波形中,各脉冲的幅值是相等的,要改变等效输出正弦波的幅值时,只要按同一比例系数改变各脉冲的宽度即可,因此在交-直-交变频器中,PWM 逆变电路输出的脉冲电压就是直流侧电压的幅值。

根据上述原理,在给出了正弦波频率,幅值和半个周期内的脉冲数后,PWM 波形各脉冲的宽度和间隔就可以准确计算出来。按照计算结果控制电路中各开关器件的通断,就可以得到所需要的PWM波形。

2.3原理图:

3设计方案

先设计分频器,以2分频为基础在器外部做循环可以实现2n倍分频。后面进行占空比调节使用计数器和比较器。根据精度不同分频倍数以及占空比精确度都都会不同。该电路使用的是5位计数器,故设置频率时要考虑占空比调节过程中已相当分频2^5倍。即m-2^5/2就是所应设置到分频器上的数值(注:并非分频倍率)。

4设计步骤

4.1自行编写分频器代码,通过编译等步骤生成分频器。

4.2调用软件自带比较器和计数器并搭建后续电路。

4.3仿真调试。

4.4下载到试验箱进行测试。

5设计程序代码

Library IEEE;

Use ieee.std_logic_1164.all;

Use ieee.std_logic_arith.all;

Use ieee.std_logic_unsigned.all;

Entity CPLD is

Generic (pulse_width:integer:=1

);

Port(clock_in:in std_logic;

Clock_out:out std_logic);

End entity;

Architecture pwm_architecture of CPLD is

Signal counter:std_logic _vector(4 downto 0):=”00000”;

Signal clock_1:std_logic:=’0’;

Signal counter_1:std_logic _vector(5 downto 0):=”000000”;

Begin

Process(clock_in)

Begin

If clock_in’event and clock_in=’1’ then

If pulse_width>counter_1 then

If counter>=”00001” then

Counter<=”00000”;

Else

Counter<=counter+’1’;

End if;

Counter_1<=counter_1+’1’;

Else

Counter_1<=”000000”;

Clock_1<=not clock_1;

End if;

End if;

End process;

Clock_out<=clock_1;

End architecture;

5仿真波形

6调试结果说明

由于比较器的位数有限因此所设置的占空比也是一个相对值并非特别精确。在仿真波形固定周期位置中出现了一个毛刺,老师指导可以通过滤波电路进行滤波。最后通过同学帮助通过修改比较器端口得到了解决。把输入端口的大于等于修改为大于号。消除了仿真过程中的毛刺。

相关文档
最新文档