雷竞技注册
项目

环境光监视器:零交叉检测

2015年8月16日经过罗伯特·凯

第4部分“如何制作环境光监测器”系列

第4部分“如何制作环境光监测器”系列

推荐水平

中间

本系列中的前一篇文章

所需的硬件/软件

描述 数量 Digi-key p / n
电路试验板 1 377-2094-ND
Receptacle-to-plug跳线 5. 1471 - 1231
环境光探测器 1 425 - 2778
4.7 kΩ电阻器 1 4.7kqbk-nd.
通用运放 1 LT1638CN8#PBF-ND
0.1µF电容器 4. 399-4266-nd.
比较器 1 LTC1440CN8 # PBF-ND
1MΩ电阻 1 1.0MQBK-ND
10 kΩ电阻 2 10 kqbk-nd
2.2kΩ电阻 1 2.2 kqbk-nd
12 V AC / AC壁挂电源 1 T1007-ND
5 V AC / DC壁挂电源 1 1470 - 2771

项目概述

在之前的项目中,我们成功地使用GA1A2S100光学传感器生成和数字化可靠的环境光测量。我们可以使用这些测量方法有很多种:例如,根据一天中的时间和天气状况评估室内照度,跟踪居住者对人工照明的使用情况,或者将环境光线水平与不同类型的灯泡或灯具相关联。一个更主动的应用是使用环境光数据来实时调整灯具提供的照明量。换句话说,基于GA1A2S100的环境光测量,我们可以实现一个由EFM8而不是手动开关控制的灯调光器。

我们的灯调光器包括两个主要部分。首先是过零检测电路,每当交流输入电压过0v时,输出一个数字信号到EFM8。第二种是控制电路,EFM8使用一种叫做可控硅的设备来限制通过灯的交流电流。零交叉检测电路允许EFM8同步其可控硅驱动信号与交流周期的开始,并通过增加或减少周期开始和信号之间的延迟,使可控硅,固件可以控制平均功率交付给灯。我们将在下一篇文章中讨论基于可控硅的控制电路;这里我们将重点关注零交叉检测部分。笔记:该调光器实现适用于白炽灯泡 - 标准荧光灯泡与该电路不兼容。

比较器

在这个单电源、轨对轨运算放大器和完全集成adc的时代,比较器可能有些被忽视。但是比较器仍然有自己的位置:它们是为特定的目的而优化的——比较,而不是放大——而且它们有时还会加入一些有用的功能,比如集成的电压基准和方便的可调迟滞。在这个电路中,我们将使用Linear Technology的LTC1440,它包括刚才提到的特性以及信号接地和负极供电的独立引脚。这意味着我们可以使用双极(即+/- 5v)电源,但仍然有比较器的输出信号参考地;这是很重要的,因为我们不想将-5 V发送到EFM8通用输入/输出(GPIO)管脚。本文讨论的电路使用了这种单独的接地参考引脚,这就是为什么输出过渡到+ 5v和0v而不是+ 5v和- 5v。正5v电源不是一个问题,因为EFM8的GPIO电路,虽然由3.3 V供电,被设计为安全接受5v输入。

力量

理论上,像这样的调光电路可以在标准的120v电源插座上工作。但我们并不想把120v的电压加到面包板上(安全第一),我们也不需要那种功率来演示电路的功能。因此,我们将使用12v壁挂式交流/交流变压器引入交流电压。

除此之外,我们还需要三个其他电压:3.3 V用于光学传感器,比较器+/- 5 V(我们还将使用5 V而不是3.3 V供电,主要是因为这使得更好地使用在面包板上提供的两个正电源轨道)。3.3 V和+5 V耗材来自EFM8评估板通过扩展标头, - 5 V从第二壁电源供电方便:

这些纤薄的设备是廉价的(约7美元)和便捷的方式,为面包板或原型PCB提供双极电源:您只需将正线连接到现有地节节,然后在这种情况下,负线变为-5 V.

滞后

比较电路相当简单:如果正输入端的电压高于负输入端的电压,则输出被驱动到正电源轨。如果正输入端的电压低于负输入端的电压,则输出被驱动到负电源轨或电路的地电位。(实际上,一些比较器使用一个开路漏极/开路集电极输出级,因此实际上并不“驱动”输出到正电源电压。)但是一个比较器电路这么简单可能会有一个严重的噪声问题,这就是滞后的原因。考虑以下基本电路:

在理想的正弦波输入下,输出为:

到目前为止还不错,但理想的正弦波供应不足;如果我们在输入信号中加入50 mV的100 kHz噪声,我们得到如下输出过渡:

虽然感兴趣的信号(即理论上无噪声的60 Hz正弦波)只在比较器阈值之上或之下进行一次过渡(在本例中为0 V),但噪声信号导致虚假的输入过渡,导致同样虚假的输出过渡。当然,在这个例子中,100 kHz的噪声可以很容易地用低通滤波器来抑制,但现实生活中的输入信号可能会受到许多频率的噪声以及不可预测的瞬态信号的影响。因此,我们转向迟滞,在这个特殊的应用中,这是一种技术,通过这种技术,比较器的阈值为负到正的变化与为正到负的变化的阈值不同:

正如游标所示,负向位置输入过渡的阈值约为50 mV多于标称阈值,正负转换的阈值是50 mV下面名义门槛。当输入电压增加超过50毫伏,引起输出跃迁后,输入必须低于50毫伏而不是消极的50 mV以引起另一个输出转换。结果是滞后电压频带:在输入过渡导致比较器输出转变之后,只要波动在滞后带内的波动仍然存在,输入电压就可以波动而不会触发另一输出转变。在该示例中,滞后电压带为50 mV - (-50 mV)= 100 mV。通过包含在电路中的滞后,输出转换如下所示:

有各种方法可以将滞后融入比较器电路;在此项目中,我们将使用LTC1440的集成滞后功能。在下一节中描述了为所需磁滞带配置LTC1440的过程。

电路

以下是我们零交叉检测电路的原理图:

这是面包板实现:

R.1和R2形成一个电阻分压器网络,将输入电压降低到与比较器输入级兼容的水平。您可能还记得壁挂式交流/交流变压器的额定输出为12v,但这是指均方根电压。峰值振幅为

我们需要确保输入电压始终在可接受的输入范围内,因此电阻分频器网络旨在在输入为17 V时产生约3 V.

滞后电压(即,标称阈值和实际正为负或负对阈值之间的差值等于REF引脚和Hyst引脚之间的电压差;因此,滞后电压频带等于REF和HYST之间电压的两倍。REF引脚始终为1.182 V上方负电源,因此电流通过r3.是1.182 v /(10kΩ+1mΩ)=1.17μA(LTC1440要求该电流为0.1和5μA)。因此,滞后电压为1.17μA×10kΩ= 12mV。我们首先以适量的滞后开始,因为该电路的目的是识别输入波形交叉0 V的时刻,并且滞后导致输入转换和输出信号之间的小延迟。如果我们对虚假转型遇到严重问题,我们只是增加了r的价值3.

固件

比较器的输出信号是使用EFM8的两个外部中断来检测的,一个对上升边缘跃迁敏感,一个对下降边缘跃迁敏感。

(由于某些原因,最初的8051架构在计时器控制寄存器中包含了外部中断配置位。)这两个中断可以分配到相同的GPIO管脚;当P0.0看到上升边时,一个中断将触发,当P0.0看到下降边时,另一个中断将触发。

当前固件的功能是计数上升和下降边缘的过渡,并显示相应的频率。目的是简单地确认检测到的跃迁数与预期频率(即60hz)相对应。下面是两个外部中断的中断服务程序:

//----------------------------------------------------------------------------- // INT0_ISR  //----------------------------------------------------------------------------- SI_INTERRUPT (INT0_ISR INT0_IRQn){/ /中断标志是通过硬件FallingEdgeCount + +;} //----------------------------------------------------------------------------- // INT1_ISR  //----------------------------------------------------------------------------- SI_INTERRUPT (INT1_ISR INT1_IRQn){/ /中断标志是通过硬件RisingEdgeCount + +;}

来自上一个项目的主要循环已经修改如下:

while(1) {ADC0CN0_ADBUSY = START_CONV;//等待转换完成while(ADC_CONV_COMPLETE == FALSE);ADC_CONV_COMPLETE = FALSE;//获取10位ADC值并将其加到RawADCResult的累加和SFRPAGE = ADC0_PAGE;RawADCResult = RawADCResult + ADC0;NumberofMeasurements + +;/*如果我们有足够的测量值来计算平均值,向右移动以除以测量值的数量*/如果(NumberofMeasurements == TWO_POWER_5) {RawADCResult = RawADCResult >> 5;NumberofMeasurements = 0;//将平均转换结果转换为电流测量并显示//测试电路中电阻的实际值为4.6 kOhms ADCMeasurement = (RawADCResult*ADCFactor)/4.6;/ / ConvertMeasurementandDisplay(目前,ADCMeasurement); //display the number of cycles counted in the last second ConvertMeasurementandDisplay(FREQUENCY, RisingEdgeCount); RisingEdgeCount = 0; FallingEdgeCount = 0; } /*the value 10700 (rather than 10000) was empirically found to produce a delay closer to one second*/ SFRPAGE = TIMER3_PAGE; TMR3 = 0; while(TMR3 < (10700/TWO_POWER_5)); }

AmbientLightMonitor_Part4.zip

我们不是显示光学传感器的输出电流,而是显示每秒计数的上升边数,这相当于每秒正弦波的周期数。固件包括一个新的像素数据数组单位赫兹,所以我们不会混淆自己显示频率使用错误的单位。在下面的视频中,你会注意到,从一秒到下一秒,循环的次数有一些变化。这主要是由于时间不规则,因为我们没有使用精确的方法来测量和同步一秒的间隔(这是通过对输入引脚施加稳定的60赫兹方波来确认的;也观察到类似的变化)。在这一点上,重要的一点是,测量保持在60赫兹附近,这表明我们的零交叉检测器功能正常。

下一篇文章:环境光照监测:使用三条转子,调节灯亮度

你自己试试这个项目吧!得到bom。

1条评论