过零比较器输出低电平不为0

用tlv3691做了个过零比较器,如图那样,但是不知道为什么输出波形在低电平时候不为0。但是用lmc7215的话就是可以的。求解!!

img

img

输出串联个二极管是可以的,通过二极管压降低效率0点的偏移

该回答引用ChatGPT
问题分析:

根据楼主提供的信息和波形图,可以初步确定问题在于输出的低电平不为0。这里有两种情况可能会出现:

1.在AD输入为0时,过零比较器的输出等于其非反相输入,但是对于某些过零比较器来说,这个值不一定是0。

2.芯片自身特点的差异性。

解决方案:

1.在输入为0且输出低电平不为0时,检查是否使用了正确的过零比较器,同时检查滤波电容的大小是否合适。

2.换一款不会出现这样问题的芯片,如楼主提到的lmc7215。

代码作答:

以tlv3691过零比较器为例,下面给出代码:


const int zerocrosspin = 2;
volatile int dimming = 128;

void zerocross() {
int dimtime = (75*dimming); // For 60Hz => 8333
delayMicroseconds(dimtime); // Wait till firing point of dimmer
digitalWrite(outPin, HIGH); // turn on light
delayMicroseconds(8.33); // triac On propogation delay (for 60Hz)
digitalWrite(outPin, LOW); // turn off light
}

void setup() {
pinMode(outPin, OUTPUT); // Set AC Load pin as output
attachInterrupt(0, zerocross, RISING); // Choose the zero cross interrupt # from the table above
}

void loop() {
// 0%-100%
for (int i=0; i<=100; i++){
dimming = i;
delay(10);
}

// 100%-0%
for (int i=100; i>=0; i--){
dimming = i;
delay(10);
}
}


其中,过零比较器的输入接Arduino的引脚2,输出接开关电源的控制端口。在loop函数中实现了0-100%灯光的调节,通过改变dimming的值来实现控制。需要注意的是,具体的芯片和开关电源控制方式可能会有所不同,楼主在代码实现时可根据自己的实际硬件情况进行调整。

根据你提供的信息,可能有以下原因导致输出波形在低电平时不为0:

输入电压过低。TLV3691的工作电压范围是2.7V至36V,如果输入电压低于2.7V,输出波形在低电平时不为0是正常的。

过零检测电路的设计问题。可能是你的过零检测电路在低电平时的输出不稳定,导致输出波形不为0。你可以检查你的电路设计是否有误,或者尝试修改电路以获得更好的稳定性。

TLV3691故障。如果以上两个原因检查后不存在问题,那么可能是TLV3691本身出现了故障。你可以尝试更换一个新的TLV3691或者使用其他型号的过零比较器来排除故障。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

解决了,只是单纯的比较器用法错了,单电源模式下 输入端不能为负 实际用起来器件会坏的。如果单电源要使用的话,可以用两个电阻分压,中间接地。然后正的接比较器正电源端,负的接负。这样的输出为正负电平交替,后面加个钳位二极管基本就能用了。