Como usar o comparador analógico do Arduino

As placas Arduino possuem um comparador analógico integrado usado para diferentes aplicações. Isso é digno de nota porque a entrada/saída digital e a modulação por largura de pulso (PWM) são normalmente usadas, enquanto os comparadores analógicos não.

Um comparador analógico integrado é útil em microcontroladores, fornecendo comparações de tensão, conversões digital para analógico, detecção de limite e PWM.

Dependendo da placa Arduino (existem várias opções), vários recursos de hardware e periféricos estão incluídos. A maioria das placas possui um comparador analógico. Neste artigo, discutiremos o comparador analógico integrado no microcontrolador ATmega328p. O Arduino UNO, Nano, Mini, Pro Mini, Fio, Ethernet e Lilypad são baseados no ATmega328p.

O que é um comparador analógico?
Um comparador analógico é um dispositivo eletrônico que compara os níveis de tensão de dois sinais de entrada, produzindo uma saída baseada em suas magnitudes relativas.

Vale a pena notar:

  • Se a tensão de entrada na entrada não inversora for maior que a tensão na entrada inversora, a saída do comparador é considerada lógica HIGH (1).
  • Se a tensão na entrada inversora for maior que a tensão na entrada não inversora, a saída do comparador é considerada lógica BAIXA (0).

Comparador analógico do ATmega328p
Em todas as placas Arduino, o comparador analógico é implementado através de um amplificador operacional ou de um circuito integrado comparador dedicado. O comparador analógico do Arduino é usado para tarefas como detecção de limite, conversão digital para analógico e PMW.

O microcontrolador ATmega328p possui um comparador analógico interno programável. A entrada positiva do comparador está disponível no pino D6 do controlador, e a entrada negativa está presente nos pinos de entrada analógica A0 a A7.

A saída do comparador analógico do Arduino pode acionar uma interrupção, que é o recurso mais útil deste periférico no Arduino.

O comparador do Arduino é programável e pode ser configurado definindo os registros associados. O comparador pode ser usado para obter a saída de comparação analógica ou para disparar uma interrupção.

Conforme visto no diagrama de blocos acima, AIN0 (PD6) é a entrada positiva do comparador e AIN1 (PD7) é a entrada negativa. Os sinais aplicados a estes dois pinos são avaliados pelo comparador.

Se o sinal em AIN0 for maior em magnitude do que o sinal em AIN1, a saída ACO do bit no registro ACSR será definida como alta. Caso contrário, o bit será definido como baixo.

Pode haver diferentes fontes de sinais para os dois pinos de entrada. Para a entrada positiva AIN0, o controlador pode ser configurado para usar uma tensão de banda de referência interna. Para a entrada negativa AIN1, qualquer um dos pinos de entrada analógica A0~A7 pode ser usado como fonte. Além disso, a saída do comparador pode ser usada como está ou pode acionar a interrupção de captura de entrada do Timer/Counter1.

Como usar o comparador analógico
Usar o comparador analógico do Arduino é relativamente simples, mas, primeiro, identifique os pinos do comparador na placa. Como cada tipo de placa Arduino é diferente, a atribuição dos pinos às entradas positivas e negativas do comparador também é diferente.

Pinos específicos em cada placa são designados para conversão analógica. Estes são pinos de entrada analógica numerados (como A0, A1, etc.) ou rotulados com '~' ou 'AC'. Conecte os sinais de entrada aos pinos do comparador. Um dos pinos de entrada também deve estar conectado a um sinal de referência fixo. A outra entrada é conectada ao sinal, que será comparado e monitorado.

Em seguida, defina as configurações do comparador, como tensão de referência, modo de interrupção e captura de entrada. Os registros associados são definidos no programa do usuário ou em bibliotecas e funções de biblioteca podem ser usadas. A programação do comparador com o suporte de uma biblioteca é normalmente mais fácil, pois não requer conhecimento dos registradores para configurar o comparador adequadamente.

Por último, leia a saída do comparador. A saída está disponível através de uma função ou variável de um programa de usuário de uma biblioteca específica. Caso contrário, talvez seja necessário ler o status de um registro associado ou de um bit que indica a saída do comparador.

A saída indica claramente se o sinal de entrada é de magnitude maior ou menor que a tensão de referência fixa. A saída pode então ser usada para tomada de decisões ou desencadear ações específicas no programa do usuário. A saída também pode acionar uma captura de entrada semelhante a uma interrupção do Timer/Counter1 do Arduino UNO.

Registradores do Arduino
No ATmega328P, existem cinco registros do comparador analógico como segue:

1. ACSR (controle de comparador analógico e registro de status)
2. DIDR1 (registro de desativação de entrada digital 1)
3. ADCSRA (Registro de Controle e Status ADC A)
4. ADCSRB (controle ADC e registro de status B)
5. ADMUX (registro de seleção de multiplexador ADC)

Registro ACSR: o registro mais importante, que é utilizado para configurar o comparador analógico e monitorar os flags associados. O registro possui o bitmap abaixo.

O bit Analog Comparator Disable (ACD) habilita ou desabilita o comparador analógico. Se o bit estiver energizado, o comparador analógico será desabilitado. Caso contrário, o comparador analógico será habilitado. Desativar o comparador analógico reduz o consumo de energia do microcontrolador.

A seleção de bandgap do comparador analógico (ACBG) bit é usado para selecionar a entrada positiva do comparador. Se o bit estiver definido, uma tensão de referência de bandgap fixa será usada como entrada positiva. Caso contrário, a entrada em AIN0 é usada como entrada positiva do comparador.

A saída do comparador analógico (ACO) é o sinalizador de saída do comparador. Se a tensão em AIN0 for maior que em AIN1, o sinalizador será ativado. Caso contrário, está limpo.

O sinalizador de interrupção do comparador analógico (ACI) indica o estado da interrupção do comparador analógico. O sinalizador é definido sempre que ocorre uma interrupção.

A ativação da interrupção do comparador analógico (ACIE) habilita ou desabilita a interrupção do comparador analógico. Se o bit estiver energizado, a interrupção do comparador analógico será habilitada. Caso contrário, está desativado.

Ativação da captura de entrada do comparador analógico (ACIC) habilita ou desabilita a função de captura de entrada do Timer/Contador1 acionada pela saída do comparador analógico. Se o bit estiver definido, a captura de entrada será habilitada. Caso contrário, está desativado.

O ACIS1 e ACIS0 são bits de seleção do modo de interrupção do comparador analógico. Esses bits são usados ​​para configurar o tipo de interrupção do comparador. Se ambos os bits forem apagados, a interrupção do comparador na alternância de saída será selecionada. Se ACIS1 estiver desmarcado e ACIS0 estiver definido, o estado será reservado e não será usado. Se ACIS1 estiver definido e ACIS0 for zerado, a interrupção do comparador na borda de saída descendente será selecionada. Se ambos os bits estiverem ativados, a interrupção do comparador na borda ascendente será selecionada.

Registro DIDR1: possui apenas dois bits, AIN0D e AIN1D, com o seguinte bitmap:

Se AIN0D estiver definido, o buffer de entrada digital para AIN0 será desabilitado. Se AIN1D estiver definido, o buffer de entrada digital para AIN1 será desabilitado. Desabilitar o buffer de entrada digital para esses pinos é outra maneira de economizar o consumo de energia do controlador.

Registro ADCSRA: um bit importante para comparação analógica neste registro é ADEN. Possui o seguinte bitmap:

O bit ADEN é usado para ativar ou desativar o Arduino ADC. Se estiver definido, o ADC está habilitado. Caso contrário, o ADC será desativado. O restante dos bits desse registro configuram conversões analógico-digitais no Arduino e não têm nada a ver com a comparação analógica. (Por exemplo, o bit ADSC é usado para iniciar a conversão analógico-digital e o ADIF é usado como sinalizador de interrupção do ADC, etc.)

Registro ADCSRB: um bit importante para comparação analógica neste registro é ACME. Possui o seguinte bitmap:

O bit ACME determina se deve ou não usar a entrada analógica multiplexada. Se ADEN estiver desmarcado (isto é, ADC estiver desabilitado e ACME estiver configurado), os pinos de entrada analógica A0~A7 serão usados ​​para entrada negativa do comparador. Os demais bits deste registro referem-se à conversão analógico-digital e não têm nada a ver com o comparador analógico.

Registro ADMUX: os bits MUX3:1 do registro ADMUX são utilizados para selecionar qual entrada analógica A0~A7 deve ser utilizada como entrada negativa para o comparador. Possui o seguinte bitmap:

A fonte analógica é selecionada com base no status do bit MUX3:1, conforme tabela abaixo.

O restante dos bits deste registro estão relacionados à conversão analógico-digital e não têm nada a ver com o comparador analógico.

Aplicações de um comparador analógico
O comparador analógico do Arduino é normalmente usado para as seguintes tarefas…

Detecção de limite: a comparação analógica no Arduino é frequentemente usada para detectar se uma tensão excede um determinado nível limite. A tensão de entrada é comparada a uma tensão de referência fixa. Em seguida, a saída do comparador analógico é monitorada para verificar se a tensão de entrada excede a tensão de referência fixa. A detecção de limite é comumente usada para detectar a saída de um sensor analógico e se ela ultrapassou um valor predefinido.

Conversão digital para analógico: o comparador Arduino é usado em conjunto com uma rede resistor-ladder, que é conectada entre o pino de saída do comparador e uma tensão de referência fixa. Os pontos de conexão intermediários são então usados ​​para criar os níveis de tensão digital desejados. Esta técnica é normalmente usada para gerar tensões de referência analógicas para o ADC.

PWM: um comparador analógico pode gerar sinais modulados por largura de pulso para controlar um motor, um LED desbotado ou outras aplicações PWM.

Como configurar o comparador analógico do ATmega328P
Ao usar um comparador analógico, apenas alguns registros devem ser configurados. Depende das fontes de entrada positiva e negativa do comparador e da aplicação de sua saída.

Em operação normal, quando os sinais positivos e negativos do comparador são aplicados através de AIN0 e AIN1 respectivamente, apenas os registros ACSR e DIDR1 devem ser configurados no programa do usuário.

Para entrada positiva do comparador, a tensão de referência bandgap pode ser usada em vez da entrada externa. Ao usar a tensão de referência bandgap como entrada positiva, o ACSR deve ser configurado. O ACSR também deve configurar a interrupção do comparador, o modo de interrupção e a captura de entrada.

Para entrada negativa do comparador, os pinos de entrada analógica A0~A7 podem ser usados. Para definir a fonte de entrada analógica externa A0~A7 para uma entrada negativa, os registros ADCSRA, ADCSRB e ADMUX devem ser configurados.

Em todos os casos, o registro DIDR1 pode ser configurado para habilitar ou desabilitar o buffer de entrada digital para entrada positiva e negativa do comparador.

Comparando sinais
Agora, vamos programar uma comparação de tensão analógica normal usando o Arduino. Para fazer isso:

  • Conecte duas fontes de tensão aos pinos PD6 e PD7 do Arduino UNO. A tensão pode ser aplicada através de potenciômetros de 10K ou circuitos divisores de tensão.
  • Conecte um LED ao pino PD4 do Arduino para verificar o status do comparador analógico.
  • Nota: o ânodo dos LEDs deve ser conectado ao pino e o cátodo deve ser conectado ao terra através de um resistor em série.

Carregue o seguinte esboço para o Arduino UNO.

configuração nula {
DDRD = (1<
DIDR1 = (1<
ADCSRB &= ~(1<
CAA =
(0 << DCA) //Comparador Analógico: Habilitado
(0 << ACBG) // Limpa ACBG para usar entrada externa para entrada AIN0 +ve
(0 << ACO)
(1 << ICA) // Limpa a interrupção pendente configurando o bit
(0 << ACIE) //Interrupção do comparador analógico desabilitada
(0 << ACIC) // Captura de entrada do comparador analógico desabilitada
(0 << ACIS1) (0 << ACIS0); // Modo de interrupção do comparador analógico: interrupção do comparador na saída
Alternar
}

loop vazio {
se (ACSR & (1<
PORTD = (1<
outro
PORTD &= ~(1<
}

Ao carregar o esboço acima, se a tensão na entrada positiva (INV0/PD6) for maior que a tensão na entrada negativa (INV1/PD7), o bit de saída do comparador ACSR é definido e a saída digital no pino PD4 é definida para ALTO, fazendo com que o LED acenda.

Se a tensão na entrada positiva (INV0/PD6) for menor que a tensão na entrada negativa (INV1/PD7), o bit de saída do comparador ACSR é limpo e a saída digital no pino PD4 é definida como LOW, fazendo com que o LED desligar.

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.