Comparadores Schmitt-trigger

O comparador é uma das peças mais importantes para os sistemas digitais. Ele tem a função de decidir se a entrada está em nível alto ou baixo, independente do sinal de entrada ser digital ou analógico.

Neste post veremos como comparadores Schmitt-trigger (comparadores com histerese) fazem uso de realimentação positiva para evitar ruídos de transição de estado.

Comparador Schmitt-trigger inversor e não-inversor
Comparador Schmitt-trigger inversor e não-inversor

Inscreva-se em nossa lista de emails para ser avisado sobre novos posts em resumos semanais.

Comparadores comuns

Comparadores comuns, sem histerese, são o tipo de comparador mais simples. Podem ser implementados de diversas formas, sendo a mais comum um amplificador (como um AMPOP) e um divisor resistivo para configurar o nível de troca de estado.

Comparador comum não-inversor e inversor
Comparador comum não-inversor e inversor

Devido sua simplicidade este tipo de comparador é muito bom para sistemas digitais, onde os níveis de saída são bem previsíveis (ex: 0 V ou 5 V) e com transições rápidas.

Mas em sistemas analógicos, onde a tensão pode variar por toda a excursão entre as tensões de alimentação ou que varie de forma lenta, este tipo de comparador não funciona muito bem.

Digamos que o sinal de entrada esteja subindo lentamente e adicionado a ele haja um pouco de ruído. Quando o sinal de entrada estiver próximo a tensão de transição (definida pelos resistores R1 e R2) o ruído fará com que a saída do comparador realize diversas transições. Isso acontece em cada transição do sinal de entrada, até que a amplitude do sinal seja maior que a do ruído.

Comparadores com histerese

Para evitar este problema utilizamos realimentação positiva para gerar histerese nos comparadores. (Comparadores com histerese também são chamados de comparardes Schmitt-trigger.)

Vimos no post anterior Teoria: Realimentação positiva (positive feedback) que realimentação positiva causa um sistema instável quando GH > 1, fazendo o sistema gerar uma tensão de saída infinita.

Na vida real a saída do amplificador é limitada pela tensão de alimentação, fazendo o amplificador saturar sua saída na polaridade positiva ou negativa de alimentação.

Abaixo há um exemplo típico de circuito comparador não-inversor com histerese.

Comparador não-inversor Schmitt-trigger com AMPOP e fonte simétrica
Comparador não-inversor com histerese

A realimentação positiva reforça o sinal de entrada, fazendo o sinal de comparação mover-se na mesma direção do sinal de entrada. Para modificar a saída para polaridade oposta é necessário que o sinal varie consideravelmente.

Abaixo temos um exemplo de laço de histerese formado pelo circuito acima (código do gráfico abaixo). Consideramos as tensões de alimentação ±VCC = ±1 V e R2 = 2 R1.

Comparador não-inversor com histerese
Comparador não-inversor com histerese

Note que quando a tensão de entrada sobe de -1 para +1 a saída troca de estado para nível alto (+1) quando a entrada é +0,5. Quando a tensão de entrada desce de +1 para -1 a saída de troca de estado para nível baixo (-1) quando a entrada é -0,5.

Isso permite que o sinal de entrada seja lento e com ruído sem que a saída do comparador realize diversas transições de estado.

Código para o gráfico

Este é o código MATLAB/OCTAVE para gerar o gráfico.

% MATLAB/OCTAVE
% Código para gerar gráfico da saída de um comparador com histerese
%   (ou comparador Schmitt-trigger)
%   vo vs vi (subida e descida de vi)

x = (-1 : 0.01 : 1); % vi

dy = 0.02; % Diferença de altora entre as curvas de subida e descida
           % (apenas visual, para uma curva não esconder a outra)

y1 = (x > 0.5) * 2 - 1 - dy; % vo para subida de vi
y2 = (x > -0.5) * 2 - 1 + dy; % vo para descida de vi

clf
plot(x,y1, x,y2)
axis([min(x) max(x) -1.5 1.5])
xlabel('v_i - Sinal de entrada do comparador')
ylabel('v_o - Sinal de saída do comparador')
legend({
  'Subida (v_i de 0 para 1)',
  'Descida (v_i de 1 para 0)'
})

xCoord = 0.53;
yCoord = 0.24;
annotation ("arrow", [xCoord-0.001 xCoord], [yCoord yCoord])

xCoord = 0.715;
yCoord = 0.53;
annotation ("arrow", [xCoord xCoord], [yCoord-0.001 yCoord])

xCoord = 0.51;
yCoord = 0.795;
annotation ("arrow", [xCoord xCoord-0.001], [yCoord yCoord])

xCoord = 0.325;
yCoord = 0.50;
annotation ("arrow", [xCoord xCoord], [yCoord yCoord-0.001])

Compartilhe!

Gostou do post? Foi útil? Clique abaixo e compartilhe com seus amigos!

Veja mais posts sobre Teoria.

Autor: Djones Boni

Engenheiro Eletricista e Eletrônico. Professor de Engenharia Eletrônica na UTFPR Toledo. Interesses: Sistemas eletrônicos embarcados e de tempo real.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *