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发生器的方案,具有低成本、高灵活性、高集成度、高可靠性等优点。