5 votos

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

Cómo esto puede ser tan difícil (para mí :-). La señal entrante del sensor está cerca de los 0 voltios y da pulsos de ~ 0,5V, que debe ser leída por la entrada digital de Arduino (interrupciones).

Hasta ahora, lo que he intentado:

  • 0.5Voltios está justo debajo del optoacoplador para funcionar, eso habría sido fácil.
  • Leyendo directamente esta pequeña señal a la entrada analógica. Bien, pero la sincronización no es lo suficientemente precisa. Así que, definitivamente quiero usar la interrupción digital de Arduino.

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

Bien, amplificadores OP tal vez, pero ¿cómo? He tratado de simular, sin hacer bien las cosas con un amplificador de operación adecuado.

  • Tengo un solo suministro de DC +5Voltios para manejar las cosas.
  • Me gustaría mantener la cantidad de componentes en un paquete pequeño, diminuto.

1 votos

¿Por qué no utilizar el comparador analógico con una referencia adecuada?

0 votos

Un comparador analógico está bien, pero si tu entrada es un poco ruidosa, un disparador Schmidt podría estar configurado para disparar sólo por debajo de 0,2V y por encima de 0,3V. EEVblog #941 - Tutorial sobre el disparo de Schmitt

6voto

Tom Carpenter Puntos 7192

La mayoría de los IC de ATMega ya tienen construido un módulo de comparación analógica (AC), así que no hay necesidad de usar circuitos externos a menos que quieras controlar la histéresis.

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

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


Para el ATMega32U4 en un Pololu Micro según tu 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 debes usar el ADC Mux como fuente de tu señal, lo que significa que puedes alimentar la señal de pulso en cualquiera de los pines A0 a A5 de la micro placa.

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


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

Para leer si la señal es alta o baja, puedes comprobar la ACO un poco de la ACSR registro, o puede establecer una rutina de servicio de interrupción para el ANALOG_COMP_vect vector de interrupción.

Si está interesado en cronometrar su señal, el ACO también puede ser dirigido internamente directamente al registro de captura de entrada del Temporizador 1, de modo que se pueden marcar las transiciones de la señal.

0 votos

Ah, sí. Ahora estamos hablando. Pero, resulta que ahora tengo 32U4 micro arduino (pololu). Espero que no sea muy diferente del arduino Uno 'estándar', cuando se accede directamente a los registros. Este micro-arduino tiene dos entradas analógicas (libre de usar en mi caso). Definitivamente le doy una oportunidad a esto primero, antes de juguetear con los semiconductores.

0 votos

@jengstronotarealsurname Para esa placa, debes usar D7 para la tensión de referencia DC, y cualquiera de los pines analógicos A0 a A5 para la señal de entrada de pulsos. Sin embargo no puedes usar el ADC al mismo tiempo que usas el comparador analógico para este dispositivo.

4voto

transistor Puntos 2074

schematic

simular este circuito - Esquema creado utilizando 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 hay que ver:

  • Quiere un comparador que funcione con un suministro de 5 V.
  • Asegúrate de que las entradas funcionen muy cerca de 0 V.
  • Muchos tienen salidas de colector abierto y requieren un pull-up. Tal vez puedas 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.

0 votos

Estoy bastante seguro de que el "Arduino" o más precisamente la serie atmega mcu tiene un comparador incorporado. Así que ni siquiera necesitas uno externo.

1 votos

@Mike Parece que pensamos lo mismo al mismo tiempo :).

1voto

Bernd Puntos 61

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

enter image description here

0 votos

Esto parece muy interesante, necesito probarlo con algún sw de simulación electrónica. "Empujar" la señal hacia arriba al emisor, y de alguna manera superar el problema con menos de 0,7V base-emisor :-) Es este circuito de alguna manera afecta a la fuente de entrada de todos modos. La señal de entrada es "robado / paralelo" de la aplicación del sensor original.

0 votos

Este circuito requiere la señal de la fuente del sensor para hundir la corriente del emisor NPN cuando la salida del sensor es baja. Tal y como está diseñado, esa corriente es bastante baja.

0 votos

Si es demasiada corriente hay que recurrir a la comp

0voto

user1491537 Puntos 106

Ya casi está... pero no. Encontré esta librería, así que no tengo que empezar a enmascarar esos registros (perezoso, sí)

#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!");
}

Por lo tanto, D7 tiene razón (AIN0), al menos hace efecto. Debido a que la interrupción se levanta cuando va más de ~0.8V en esa entrada. Sin embargo, el nivel de voltaje de A1 (entrada de señal), no hace ningún efecto cuando la interrupción se eleva. Hmm, ¿cuál podría ser el problema?

0 votos

Movido esto a un foro más correcto, el lado de Arduino (sw). arduino.stackexchange.com/questions/53399/

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X