×
嵌入式 > 电路设计 > 详情

基于FPGA的三相PWM发生器

发布时间:2020-07-07 发布时间:
|

    摘要:介绍了基于FPGA设计+的三相PWM发生器。该发生器具有灵活和可编程等优点,可应用于交流电机驱动用的三相电压源逆变器。实验结果验证了本设计的有效性。

    关键词:脉宽调制  现场可编程门阵列

随着现代工业的要求和微电子技术的进步,交流传动已经迅速地从模拟控制转向数据控制,其中PWM技术与方法是其核心内容。但数字化PWM电路一直是设计中的难点,除了集成三相PWM发生器的80C196MC、TMS320F240等微处理器外,均采用中小规格集成电路设计感想 PWM,这是非常复杂的,往往使电路复杂、可靠性差。本文介绍了一种用单片大规模FPGA实现的三相PWM发生器,它具有三相脉冲中心对称、PWM周期和死区时间可编程等特点,且性能优异、灵活性和可靠性高。

1 基本原理

本设计的目的是产生三相逆变器的PWM信号波形。图1是用FPGA实现的PWM部分设计框图,它主要由脉宽寄存器、缓冲寄存器、周期寄存器、死区寄存器、死区发生器、数值比较器、控制逻辑等几部分构成。脉宽寄存器,决定三相PWM信号的脉宽;缓冲寄存器,实现对脉宽数据的双缓冲;周期寄存器,决定PWM的斩波周期;死区寄存器,决定上下桥臂的死区时间。脉宽寄存器在每个开关周期中由微处理器与更新一次,其输出数据经缓冲以后与基准计数器进行数值比较,得到三相PWM信号PA、PB、PC。再经过死区电路处理,最后产生6个中心对称的PWM驱动信号,驱动三相逆变器的6个功率器件。PWM算法可采用SPWM(正弦PWM)或者SVPWM(空间矢量PWM)。

FPGA中的基准计数器,用来产生类似模拟电路中的三角波基准,是一个最小计数值为0、最大计数值为周期寄存器中保存的数值、计数方向交替变化的可逆计数器。基准计数器单元在最大计数值时产生一个同步信号SYN,当它有效时将三个脉宽寄存器的数据存入各自的缓冲寄存器,实现双缓冲,使三个脉宽寄存器在SYN无效时可依次由微处理器更新而不影响最终的三相同步关系。同时基准计数器单元产生一个方向信号DIR,可作为微处理器的外部中断源(边缘触发方式),在PWM开关周期的起始点产生中断。

微处理器软件设计较简单,在初始化阶段设置好周期寄存器、死区寄存器,以后只需在PWM中断服务程序中将计算好的三相脉宽数据分别送到各自的脉宽寄存器,然后退出中断服务程序,等待控制器在SYN脉冲控制下将三个脉宽寄存器的数据锁存到各自的缓冲寄存器中。在下一个PWM周期中输出相应的脉冲,同时中断被触发,便开始了下一个PWM中断服务程序。程序要求PWM中断服务程序运行时间小于PWM周期,由此决定了PWM最高运行频率。图2为PWM波形图。

2 内部设计

以A相为例,基准计数器由加减计数器构成。加计数和减计数交替执行,计数周期由周期寄存器决定,DIR指示计数方向,同步信号SYN用来加载A相缓冲器。PA是缓冲器与基准计数器的数值比较结果,死区发生器由死区计数器和一些组合逻辑组成,使同相的上下桥臂驱动信号错开一个死区时间,防止功率器件短路。死区时间由死区寄存器决定,最后输出A上下桥臂驱动信号AH和AL。

死区计数器采和饱和计数器,饱和计数器的特性类似于电容的充放电过程,规则为:

(1)当输入为0时,如果计数值等于0,则计数值保持不变,否则作减1计数;

(2)当输入为1时,如果计数值等于max,则计数值保持不变,否则作加1计数;

(3)当输入为1且死区计数器数值为max时,AL=0,AH=1,上桥臂导通;

(4)当输入为0且死区计数器数值为0时,AL=1,AH=0,下桥臂导通;

(5)当死区计数器数值在0~max之间时,AL=0,AH=0,上下桥臂都截止,形成死区。

其中,max等于死区寄存器的数值。

周期寄存器和脉宽寄存器为14位,死区寄存器为8位,在20MHz时钟,开关频率为610Hz~10MHz,死区时间为0~12.8μs,脉冲分辨率为50ns。

FPGA采用VHDL硬件描述语言进行设计,上面给出死区发生器的VHDL设计:

Entity dead is

Port(clk,px:in std_logic;

Xh,xl:out std_logic;

Dead_time:in std_logic_vector(7 downto 0);

Q:inout std_logic_vector(7 downto 0));

End dead;

Architecture dead of dead is

Begin

Process(clk)

Begin

If (clk'EVENT and clk='1') then

If ((px='1') and (q/=dead_time)) then

Q<=Q+1;

Elsif ((px='0') and (q/="00000000")) then q<=q-1;

End if;

If ((px='1') and (q=dead_time)) then

Xh<='1';

Else

Xh<='0';

End if;

If ((px='0') and (q="00000000")) then

Xl<='1';

Else

Xl<='0';

End if;

End if;

End process;

End dead;

3 试验与结构

FPGA采用ACTEL公司反熔丝工艺的42MX16,应用在所研制的交流主轴驱动器中,图3是其6个基极驱动信号波形。在实际应用中,除PWM外,在同一片FPGA中还设计了光电编码器计数单元、输入脉冲计数器、I/O接口、保护电路、译码器等全部外围数字逻辑电路,它与DSP、A/D芯片和接口电路构成非常简洁的交流电机驱动器的控制部分。采用FGPA构成三相PWM发生器的方案,具有低成本、高灵活性、高集成度、高可靠性等优点。


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
强势助攻抗疫战!芯旺微ChipON 32位MCU被应用于医疗电子设备