所有关于电路
项目

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

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

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

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

推荐水平

中间的

本系列中的前一篇文章

必需的硬件/软件

描述 数量 Digi-key p / n
面包板 1 377-2094-ND
插座跳线电线 5. 1471 - 1231
环境光探测器 1 425-2778-nd.
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
10kΩ电阻 2 10kqbk-nd.
2.2kΩ电阻 1 2.2kqbk-nd.
12 V AC / AC壁挂电源 1 T1007-ND
5 V AC / DC壁挂电源 1 1470 - 2771

项目概述

在上一个项目中,我们通过GA1A2S100光学传感器成功地成功地产生了可靠的环境光测量。我们有各种方式可以使用这些测量:例如,在日常和天气条件的时间内评估室内照度,跟踪乘客使用人工照明的使用,或用不同类型的灯泡或灯与环境光水平相关。更积极主动的应用是使用环境光数据实时调整灯具提供的照明量。换句话说,我们可以基于Ga1a2s100的环境光测量来实现由手动开关而不是由EFM8控制的灯调光器。

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

比较器

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

力量

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

除此之外,我们还需要三个其他电压: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噪声,我们得到以下输出转换:

虽然感兴趣的信号(即,理论上无噪声的60hz正弦波)只在比较器阈值(在这种情况下,0 V)以上或以下做了一个跃迁,噪声信号引起了杂散输入跃迁,从而导致同样的杂散输出跃迁。当然,这个例子中的100khz噪声可以很容易地用低通滤波器来抑制,但现实生活中的输入信号可能会受到许多频率的噪声以及不可预知的瞬态的影响。因此,我们转向迟滞,在这个特殊的应用中,它是一种技术,使负向正转换的比较器阈值不同于正向负转换的阈值:

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

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

电路

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

这是面包板实现:

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

我们需要确保输入电压始终在可接受的输入范围内,因此电阻分频器网络旨在在输入为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看到下降边时触发。

当前固件的功能是计数上升和下降沿过渡和显示相应的频率。目的只是确认检测到的转换数量与预期频率相对应,即60 Hz。下面是两个用于外部中断的中断服务例程:

// ----------------------------------------------------------------------------------- // INT0_ISR //----------------------------------------------------------------------------- SI_INTERRUPT (INT0_ISR, INT0_IRQn) { //the interrupt flag is cleared by hardware FallingEdgeCount++; } //----------------------------------------------------------------------------- // INT1_ISR //----------------------------------------------------------------------------- SI_INTERRUPT (INT1_ISR, INT1_IRQn) { //the interrupt flag is cleared by hardware RisingEdgeCount++; }

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

虽然(1){adc0cn0_adbusy = start_conv;//等到转换完成时(ADC_CONV_COMPLETE == FALSE);adc_conv_complete = false;//检索10位ADC值并将其添加到RawadCreSult SFRPage = ADC0_Page中的累积和;Rawadcresult = Grawadcresult + ADC0;numberofmeasurements ++;/ *如果我们有足够的测量值来计算平均值,将右移右移右键通过测量数量* / if(numberofmeasurements == two_power_5){rawadcresult = grahadcresult >> 5;numberofmeasurement = 0;//将平均转换结果转换为电流测量和显示//测试电路中的电阻的实际值为4.6 kohms adcmeasurement =(Rawadcresult * Adcfactor)/4.6;// roncepmeasurementanddisplay(当前,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

我们不显示光学传感器的输出电流,而是显示一秒内计数的上升边数,这对应于每秒正弦波周期数。固件包括一个新的赫兹像素数据阵列,所以我们不会因为使用错误的单位显示频率而感到困惑。在下面的视频中你会注意到,每一秒的循环次数是有变化的。这主要是由于时间不规范,因为我们没有使用精确的方法来测量和同步1秒间隔(这是通过在输入引脚上应用稳定的60 Hz方波来确认的;观察到类似的变化)。在这个关键时刻,重要的一点是测量保持在60赫兹附近,这表明我们的零交叉探测器工作正常。

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

为自己提供这个项目!得到bom。

1条评论