|
本系列文章主要介绍如何使用EFM8控制器制作一款智能环境光监测仪,共包含5个部分: ● Part 1:在LCD上显示测量值 ● Part 2:理解和实现ADC ● Part 3:测量和解析环境光照度 ● Part 4:过零检测 ● Part 5:使用双向可控硅调节灯亮度
所需的硬件/软件 ● SLSTK2000A EFM8评估板 ● Simplicity Studio集成开发环境 ● 面包板 ● 4.7k电阻 ● 1MΩ 电阻
简介 在本篇文章中,我们将继续完成基于光学传感器的自动调光器。在上一篇文章中,我们探讨了过零检测电路,在本文中,我们将使用过零检测信号来同步由EFM8产生的可控硅控制脉冲。过零信号和可控硅控制脉冲的上升沿之间的延迟由固件基于GA1A2S100光学传感器检测到的当前环境光强度进行调整,反过来,该延迟决定了向灯提供的平均功率 。可控硅在低压混合信号设计中不是特别常见的组件,因此首先我们将回顾该器件的特性。
三端双向可控硅 可控硅是晶闸管的双向扩展,因此首先考虑后一种器件的电气特性。晶闸管就像二极管,直到小的触发电流从栅极端子流到阴极端子才导通。这种行为由晶闸管的电路符号表示:
此外,即使在触发电流被移除之后,器件仍继续从阳极到阴极传导电流,如下:(1)将超过晶闸管阈值电压的电压脉冲施加到栅极; (2)得到的栅极 - 阴极电流触发器件,使其从阳极到阴极传导电流; (3)如果该阳极 - 阴极电流超过器件规定的“锁存电流(latching current)”,则在栅极电压(以及栅极电流)返回到零之后它将继续导通; (4)当阳极 - 阴极电流低于器件规定的“保持电流(holding current)”时,导通停止。
三端双向可控硅本质上是双向晶闸管。它按照相同的原理工作,但可以传导电流从MT2流向MT1或从MT1流向MT2:
本文中使用的配置将MT1接地,触发电流从门控流向MT1。
前面的讨论说明了为什么三端双向可控硅开关元件是用于控制流过负载(在这种情况下是白炽灯)的交流电流的便利部件。由GPIO引脚直接驱动的短触发脉冲在AC波形的前半个周期的某个时刻打开三端双向可控硅开关。三端双向可控硅开关继续导通,直到负载电流小于保持电流。然后,与第一脉冲相对于零交叉具有相同延迟的另一触发脉冲使得三端双向可控硅开关在第二半周期期间导通。 零交叉和触发脉冲之间的延迟决定了三端双向可控硅开关导通的交流波形部分,这又决定了供给的平均功率负载。通过微控制器,可以高精度地控制延迟。顺便说一句,如果你想知道为什么这种开关切换行为不会导致不希望的闪烁,请记住白炽灯泡会产生光线,因为灯丝是热的 - 温度不会像电流那样迅速变化,因此灯泡也是如此有效地“平滑”流过灯丝的电流的相对高频变化。
该项目中使用的三端双向可控硅开关是STMicroelectronics的Z00607型号。该器件适用于低功耗应用。它可以在低至5 mA的栅极电流下触发,其锁存和保持电流分别为10 mA和5 mA。
电路 以下是本文中灯控部分的原理图:
R1是限流电阻;它的大小可以确保GPIO引脚的输出电流远远超过最小栅极触发电流(即5 mA)。测量从栅极到MT1的电压降为360mV,因此(3.3V-0.36V)/330Ω= 8.9mA。
以下是使用面包板实现的电路:
在这里使用的是两个灯泡而不是一个,因为用于本文的特定交流变压器限制为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;
- }
复制代码首先,我们需要选择最大和最小环境光强度:如果光学传感器指示照度大于或等于最大环境光水平,则禁用三端双向可控硅开关触发脉冲并关闭灯泡。如果照度小于或等于最小环境光水平,则认为房间是暗的并且设置触发脉冲延迟以向灯提供最大功率。如果照度在这两个值之间,则按比例调整延迟 - 换句话说,当前照度和最大照度之间的比率与所选择的延迟和最大延迟之间的比率相同。成功的实际应用需要仔细选择最大和最小环境光水平,以确保灯根据乘员的需要调暗,并且微调测量照度和触发延迟之间的数学关系将是有益的。基于对特定照明布置如何响应调光算法的经验观察。
请记住,即使环境光水平小于或等于最小值,触发脉冲延迟也不会设置为零。如果在AC波形超过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;
- }
复制代码
每次外部中断检测到过零检测电路的上升沿或下降沿时,Timer2都会加载(65535 - 当前选择的触发延迟)。结果是定时器在延迟周期结束时溢出(引起中断),然后在Timer2 ISR中产生触发脉冲。
固件的总体功能如下:ADC转换大约每31ms发生一次(即每秒32个采样)。每个转换结果都被解释为来自光学传感器的输出电流量,然后通过上面所示的if-else程序处理该电流测量值,以确定是否需要触发脉冲,如果需要,则应确定延迟应该是多少。触发延迟以相同的速率调整(每秒32次);这为演示目的提供了良好的平滑响应,但是当然在实际应用中这种快速和过度的灯亮度变化是不希望的。 LCD每秒更新一次,使用最新的光学传感器输出电流值,这样您就可以看到测量的照度如何影响灯的亮度。
在以下两个图像中,蓝色线是触发脉冲,黄色线是三端双向可控硅开关上的电压。在触发脉冲之前,三端双向可控硅开关上存在完整的交流电压 - 它尚未导通,因此它实际上是开路。在触发脉冲之后直到半周期结束,三端双向可控硅开关导通,因此仅具有小的导通状态电压降(约1V)。
这里三端双向可控硅导通大约40%的AC半周期,因此这对应于适度的环境光水平(适中的灯亮度)。
现在,三端双向可控硅开关在大部分AC半周期内导通,这意味着低环境光水平导致固件增加灯的亮度。
|