您现在的位置:煤矿电工网>> 技术文章>> 图纸资料>> 电工论文>>正文内容

基于 ASIC 的数字式触发电路

 

摘要: 随着晶闸管应用日益广泛及晶闸管集成化程度日益提高,迫切要求发展集成化的移相触发电路。本文介绍了利用 CPLD/FPGA 芯片,采用 Verilog HDL 实现一种数字式三相整流触发电路的设计过程。

关键词: 晶闸管,数字式触发电路,专用集成电路, Verilog 硬件描述语言

Digital Trigger Circuit Based On Asic

Wang Hongsheng

Abstract As the development of the application of SCR and the integrated circuit of SCR, it is required to develop an ASIC(application-specific integrated circuit) for phase-movable trigger circuit.In this paper, I try to achieve an digital trigger circuit based on Asic by Verilog HDL.

Keywords: SCR, digital trigger circuit, ASIC, Verilog HDL

0 引言

    随着晶闸管应用日益广泛及晶闸管集成化程度日益提高,迫切要求发展集成化的移相触发电路。集成化触发器具有体积小、功耗低、性能可靠、使用方便等优点。 近年来,数字移相触发技术发展极为迅速,出现了以单片机以及 CPLD/FPGA 为核心的多种触发器集成电路。本文使用 ALTERA 公司的可编程芯片,采用 Verilog 硬件描述语言设计一种数字式双窄脉冲移相触发电路。其具有相序自适应,可用于调压、整流等应用中。

1 问题的提出

    采用分立元件组成的同步移相触发电路具有维护困难,稳定性差等缺点,而采用集成同步触发电路虽使用方便,但可重定制性较差。而使用 CPLD/FPGA 等可编程器件定制的同步触发电路,具有可编程性高,拓展性好等优点。本文主要讨论双窄脉冲的硬件描述语言实现,外围电路,如同步脉冲电路的采集,控制角输入键盘,功率放大电路由于时间与硬件资源有限,留待以后继续研究。

2 双窄脉冲形成环节

    对三相桥式全控整流电路,要求提供宽度大于 60 度小于 120 度的宽脉冲,或间隔 60 度的双窄脉冲。前者要求触发电路输出功率大,所以很少使用,一般都采用双窄脉冲。 采用双窄脉冲,即触发一个晶闸管时向小一个序号的晶闸管发补脉冲。关系如下:

  触发的晶闸管 V1 V2 V3 V4 V5 V6

  补发的晶闸管 V6 V1 V2 V3 V4 V5


 

图 1 补脉冲关系示意图

    控制角 a是滞后自然换相点的电度角,在工频条件下,它和时间Ta有如下关系:

    Ta=T/360*a=(20*a)/360=0.056ms。其中T是工频电源周期,a是控制角。由上式可知,只要知道控制角就可以算出定时时间Ta,采用软件时延来完成对控制角的延时。
Verilog的延时时间标尺中,时间单位和时间精度最小都可以到飞秒的数量级;故可由程序选择延时时间,且能得到很让人满意的波形。

    本程序中,采用 10us为一时间单位,精度为1us,对于脉冲宽度,为可靠触发,拟用15度,将其转为时间的话,为83.3个时间单位,由于两窄脉冲相位相差60度,相当与333.3个时间单位。输入a为控制角输入,输出out相应的6路脉冲经功率放大,作为触发信号依次接至三相桥式整流电路的六个门极上。

2.1程序如下: trigger.v

`timescale 10us/1us // 时间标度,单位为 10us ,精度为 1us

module trigger(out,a);

output[5:0] out; // 输出六路双脉冲信号

input[7:0] a; // 通过外围键盘电路,可输入控制角的值

reg[5:0] out;

wire[7:0] a;

wire[7:0] a_t;

parameter high=83.3; // 脉冲宽度 15 度左右。

parameter low=333.3; //60 度的脉冲间隔

assign a_t=(a*2000)/360; // 将输入的角度转换成时间形式

always // 波形的输出

begin

out=6'b000000; // 控制角延时

#a_t out=6'b100001; // 首先触发 VT1 ,同时对 VT6 补发一个脉冲

#high out=6'b000000; // 脉冲宽度延时

#low out=6'b000011; // 触发 VT2 ,同时给 VT1 补发一脉冲

#high out=6'b000000; // 脉冲宽度延时

#low out=6'b000110; // 触发 VT3 ,同时给 VT2 补发一脉冲

#high out=6'b000000; // 脉冲宽度延时

#low out=6'b001100; // 触发 VT4 ,同时给 VT3 补发一脉冲

#high out=6'b000000; // 脉冲宽度延时

#low out=6'b011000; // 触发 VT5 ,同时给 VT4 补发一脉冲

#high out=6'b000000; // 脉冲宽度延时

#low out=6'b110000; // 触发 VT6 ,同时给 VT5 补发一脉冲

end // 在 always 模块中循环

//initial $monitor($time,,,"out=%b",out);// 测试查看

endmodule

Test Bench (测试程序):test_trigger.v

`timescale 10us/1us

module test_trigger;

reg[7:0] a;

wire[5:0] out;

trigger trig(out,a);

initial a=30;

initial $monitor($time,,,"out=%d a=%d",out,a);

endmodule


    【字体: 】【收藏】【打印文章】【查看评论

    相关文章

    没有相关信息!