Amplificación de la señal de pulso (0.1 .. 0.5V) a la entrada digital Arduino

5

Cómo esto puede ser tan difícil (para mí :-). La señal del sensor entrante descansa cerca de 0 voltios y proporciona ~ 0.5V pulsos, que deben leerse mediante la entrada digital de Arduino (interrupciones).

Hasta ahora, lo que he intentado:

  • 0.5Volts está solo bajo optoacoplador para funcionar, eso hubiera sido fácil.
  • Leyendo directamente esta pequeña señal a la entrada analógica. OK, pero el tiempo no es lo suficientemente preciso. Por lo tanto, definitivamente quiero utilizar la interrupción digital Arduino.

Cuando el sensor envía un pulso de 0.5V - > 5V a la entrada digital arduino en estado ALTO. Si la señal del sensor cae por debajo de 0.2V - > Entrada digital Arduino a estado BAJO.

OK, amplificadores OP quizás, pero ¿cómo? Han intentado simular, sin obtener las cosas correctas alrededor de un amplificador operacional adecuado.

  • Tengo un solo suministro de CC + 5 voltios para impulsar las cosas.
  • Me gustaría mantener la cantidad de componentes en un paquete pequeño y pequeño.

4 respuestas

6

La mayoría de los circuitos integrados ATMega ya tienen un módulo de comparador analógico (AC), por lo que no es necesario utilizar circuitos externos, a menos que desee controlar la histéresis.

Para un Arduino Uno, los pines de CA son PD6 y PD7 (pin digital 6 y pin digital 7 en el lenguaje "Arduino"). A PD6 (AIN0) conectaría una tensión de referencia de CC de donde quiere que esté su umbral (en su caso, ~ 0,3 V), y a PD7 (AIN1) conecte su señal de pulso de entrada.

Si desea poder medir más de una señal (aunque sea una a la vez), puede usar cualquiera de los pines de entrada analógica (A0 a A5) en lugar de PD7. La salida del multiplexor ADC dentro de la MCU se puede enrutar a través del comparador analógico. Sin embargo, tenga en cuenta que el ADC no se puede usar simultáneamente con el comparador analógico si se usa el multiplexor como fuente de entrada.

Para el ATMega32U4 en un Pololu Micro según su comentario, las cosas son un poco diferentes. Estos todavía tienen un comparador analógico, sin embargo, no tienen un pin AIN1. En su lugar, debe utilizar el ADC Mux como la fuente de su señal, por lo que eso significa que puede enviar la señal de pulso a cualquiera de los pines A0 a A5 en la microplaca.

Para la referencia de DC, AIN0, que está en PE6 que corresponde al pin digital 7.

Para su señal de CC de referencia, simplemente puede usar un par de resistencias como divisor de voltaje y posiblemente también un capacitor de desacoplamiento pequeño (~ 100nF) para suavizar el ruido.

Para leer si la señal es alta o baja, puede verificar el bit ACO del registro ACSR , o puede configurar una rutina de servicio de interrupción para el vector de interrupción ANALOG_COMP_vect .

Si está interesado en sincronizar su señal, el bit ACO también puede enrutarse internamente directamente al registro de captura de entrada del temporizador 1, para que pueda marcar las transiciones de la señal.

    
respondido por el Tom Carpenter
4

simular este circuito : esquema creado usando CircuitLab

Figura 1. Este comparador analógico con una referencia de 0.25 V dará una salida alta cuando la entrada exceda la referencia.

Cosas que ver:

  • Desea un comparador que funcione con un suministro de 5 V.
  • Asegúrese de que las entradas funcionen muy cerca de 0 V.
  • Muchos tienen salidas de colector abierto y requieren un pull-up. Es posible que pueda usar el pull-up interno del micro en lugar del R3.
  • No he mostrado un condensador de desacoplamiento en el suministro de 5 V. Necesitas uno.
respondido por el Transistor
1

Aquí hay un circuito simple que puede lograr lo que desea con solo unos pocos componentes baratos. La entrada de su sensor se conectará al terminal emisor del transistor NPN. La salida en el colector se conectará a la entrada digital de la placa MCU. Los 5 V para alimentar el circuito también pueden provenir de la placa MCU.

    
respondido por el Michael Karas
0

Casi allí ... pero no. Encontré esta biblioteca, así que no tengo que empezar a enmascarar esos registros (perezoso, sí, de hecho)

#include "analogComp.h"
// Pololu ASTAR a32u4
void setup() {
  // put your setup code here, to run once:
  analogComparator.setOn(AIN0, A1); // AIN0 is on D7. As a reference voltage
  analogComparator.enableInterrupt(speedSensorInterrupt);
  Serial.begin(9600);
}

void loop() 
{
   delay (1000);
   Serial.println(".");
}

void speedSensorInterrupt()
{
   Serial.println("Comparator Interrupt between A1<->D7!");
}

Entonces, D7 es correcto (AIN0), al menos hace efecto. Debido a que la interrupción se eleva cuando se pasa por encima de ~ 0.8 V en esa entrada. Sin embargo, el nivel de voltaje A1 (entrada de señal) no produce ningún efecto cuando se levanta la interrupción. Hmm, ¿cuál podría ser el problema?

    
respondido por el jengstro notarealsurname

Lea otras preguntas en las etiquetas