三端双向可控硅开关
三端双向可控硅开关元件是晶闸管的双向扩展,因此我们首先来考虑一下晶闸管的电气特性。晶闸管就像一个二极管,只有当微小的触发电流从栅极端子流到阴极端子时,它才会导通。晶闸管的电路符号表示了这种行为:
此外,即使在触发电流消除后,该装置仍会继续从阳极向阴极传导电流,如下所示:(1)在栅极施加超过晶闸管阈值电压的电压脉冲;(2)由此产生的栅极 - 阴极电流触发该装置,使其从阳极向阴极传导电流;(3)如果该阳极 - 阴极电流超过装置指定的“闭锁电流”,则在栅极电压(以及栅极电流)返回零后,它将继续导通;(4)当阳极 - 阴极电流降至装置指定的“保持电流”以下时,传导停止。
三端双向可控硅本质上是一种双向晶闸管。它的工作原理相同,但可以传导从 MT2 流向 MT1 或从 MT1 流向 MT2 的电流:
该项目中使用的配置是将 MT1 连接到地,触发电流从栅极流到 MT1。
上述讨论说明了为什么三端双向可控硅开关元件是控制流过负载(在本例中为白炽灯)的交流电的便捷元件。由 GPIO 引脚直接驱动的短触发脉冲在交流波形的个半周期的某个时刻打开三端双向可控硅开关元件。三端双向可控硅开关元件继续导通,直到负载电流小于保持电流。然后,另一个触发脉冲(相对于零交叉的延迟与个脉冲相同)使三端双向可控硅开关元件在第二个半周期导通。(如果您难以想象这一点,请参阅本文后面的示波器轨迹。)零交叉和触发脉冲之间的延迟决定了三端双向可控硅开关元件导通的交流波形部分,这反过来又决定了传输到负载的平均功率。使用微控制器可以高精度地控制此延迟。顺便说一句,如果你想知道为什么这种开关行为不会导致不必要的闪烁,请记住,白炽灯泡之所以发光是因为灯丝很热,其温度变化不如电流变化快,因此,灯可以有效地“平滑”流过灯丝的电流中相对高频的变化。
本项目中使用的三端双向可控硅开关元件是 STMicroelectronics 的部件编号 Z00607。该器件适用于低功耗应用。它可以用低至 5 mA 的栅极电流触发,其锁存和保持电流分别为 10 mA 和 5 mA。
电路
以下是该项目灯控制部分的示意图:
R 1是限流电阻;其大小可确保 GPIO 引脚源电流远超栅极触发电流(即 5 mA)。测量到栅极到 MT1 的压降为 360 mV,因此 (3.3 V - 0.36 V)/330 Ω = 8.9 mA。
以下是面包板的实现:
之所以使用两个灯泡而不是一个,是因为本项目使用的特定交流变压器的输出电流限制为 500 mA,而第二个灯泡提供的额外电阻可确保电流远低于此值。黑色塑料片可防止灯泡照亮光学传感器,从而防止环境光测量失真。
固件
新固件必须执行另外两项任务:根据环境光测量计算从零交叉到触发脉冲的适当延迟,并输出延迟的触发脉冲。项任务通过以下代码完成:
代码
//convert the ADC conversion result to a current measurement
//the actual value of the resistor in the test circuit is 4.6 kOhms
ADCMeasurement = (RawADCResult*ADCFactor)/4.6;
if(ADCMeasurement >= OPTSENS_CURRENT_MAX)
TriacGateEnableorDisable = TRIAC_GATE_DISABLE;//lamp is off
else if(ADCMeasurement <= OPTSENS_CURRENT_MIN)
{
TriacGateEnableorDisable = TRIAC_GATE_ENABLE;
TriacGateDelay = TRIAC_GATE_DELAY_MIN;//maximum lamp brightness
}
else
{
TriacGateEnableorDisable = TRIAC_GATE_ENABLE;
//trigger pulse delay is based on the ratio of current illuminance to maximum illuminance
TriacGateDelay = TRIAC_GATE_DELAY_MAX * (float)ADCMeasurement/OPTSENS_CURRENT_MAX;
}
首先,我们需要选择和环境光水平:如果光学传感器指示照度大于或等于环境光水平,则三端双向可控硅触发脉冲被禁用,灯熄灭。如果照度小于或等于环境光水平,则认为房间是黑暗的,触发脉冲延迟设置为向灯提供功率。如果照度介于这两个值之间,则按比例调整延迟 - 换句话说,当前照度与照度之间的比率与所选延迟与延迟之间的比率相同。成功的实际应用需要仔细选择和环境光水平,以确保根据居住者的需求调暗灯,并且根据对特定照明布置如何响应调光算法的经验观察,微调测量照度和触发延迟之间的数学关系将是有益的。
请记住,即使环境光水平小于或等于值,触发脉冲延迟也不会设置为零。如果在交流波形越过 0 V 后立即产生脉冲,则在栅极触发电流流动时,负载电流可能不会超过三端双向可控硅的锁存电流。保持触发脉冲延迟可确保三端双向可控硅锁存行为正常。
为了完成第二项任务(生成延迟触发脉冲),我们将 Timer2 配置为大约 500 ns 的时钟周期并启用 Timer2 中断。
代码
//-----------------------------------------------------------------------------
// INT0_ISR
//-----------------------------------------------------------------------------
SI_INTERRUPT (INT0_ISR, INT0_IRQn)
{
//the interrupt flag is cleared by hardware
FallingEdgeCount++;
SFRPAGE = TIMER2_PAGE;
TMR2 = 0xFFFF - TriacGateDelay;//Timer2 will overflow at the end of the delay period
TMR2CN0_TR2 = TriacGateEnableorDisable;//start Timer2, if lamp illumination is needed
}
//-----------------------------------------------------------------------------
// INT1_ISR
//-----------------------------------------------------------------------------
SI_INTERRUPT (INT1_ISR, INT1_IRQn)
{
//the interrupt flag is cleared by hardware
RisingEdgeCount++;
SFRPAGE = TIMER2_PAGE;
TMR2 = 0xFFFF - TriacGateDelay;//Timer2 will overflow at the end of the delay period
TMR2CN0_TR2 = TriacGateEnableorDisable;//start Timer2, if lamp illumination is needed
}
//-----------------------------------------------------------------------------
// TIMER2_ISR
//-----------------------------------------------------------------------------
//
// TIMER2 ISR Content goes here. Remember to clear flag bits:
// TMR2CN0::TF2H (Timer # High Byte Overflow Flag)
// TMR2CN0::TF2L (Timer # Low Byte Overflow Flag)
//-----------------------------------------------------------------------------
SI_INTERRUPT (TIMER2_ISR, TIMER2_IRQn)
{
SFRPAGE = TIMER2_PAGE;
TMR2CN0_TF2H = 0;//clear the interrupt flag
TMR2CN0_TR2 = 0;//stop Timer2
//here we output the trigger pulse (width is approximately 50 us)
TRIAC_GATE = HIGH;
SFRPAGE = TIMER4_PAGE; TMR4L = 0; while(TMR4L < 100);
TRIAC_GATE = LOW;
}