在很多PIC16和PIC18系列芯片中,配备有ZCD过零检测器模块。ZCD 模块检测交流信号何时越过地电位。
在MCC里的配置图如下:
原理简图
为了使ZCD模块能正常工作,检测信号要通过一个串联限流电阻与管脚连接。该电阻的阻值大小要经过计算,选择合适的阻值。计算的标准是当检测信号的峰值电压到来时,通过电阻的电流不超过300uA。
Zcpinv是内部的过零参考电压,典型值是0.75V,这是默认的检测门限。因为这个内部门限值不是0V,检测结果上会带有相位偏差。相位偏差可以通过外加上拉或下拉电阻来补偿。补偿之后,实际的检测门限具有了一点的调节性,可以将检测门限调节到0V。 具体的公式,这里就不贴了。感兴趣的,可以去看下面这篇应用笔记。
http://ww1.microchip.com/downloads/en/AppNotes/90003138A.pdf
MCC代码
这个模块没有太多软件参数需要配置,代码不多。
初始化。
void ZCD_Initialize (void)
{
// Set the ZCD to the options selected in the User Interface
// ZCDPOL not inverted; ZCDSEN enabled; ZCDINTP enabled; ZCDINTN disabled;
ZCDCON = 0x82;
// Clearing IF flag before enabling the interrupt.
PIR2bits.ZCDIF = 0;
// Enabling ZCD interrupt.
PIE2bits.ZCDIE = 1;
}
查询当前极性。
bool ZCD_IsLogicLevel(void)
{
// Return ZCD logic level depending on the output polarity selected.
return (ZCDCONbits.ZCDOUT);
}
处理中断
void ZCD_ISR(void)
{
// Clear the ZCD interrupt flag
PIR2bits.ZCDIF = 0;
}
|