Cómo leer la señal del sensor de posición del cigüeñal en una motocicleta

Estoy tratando de construir un tacómetro digital para mi motocicleta Yamaha FZS600 Fazer 2002. Tengo un problema con la lectura de la señal del sensor CPS. Es un sensor de efecto hall, supongo. Encontré el enchufe de la misma. Tiene dos cables. Uno es GND, por lo que el otro debe ser la señal. No tengo un osciloscopio para probarlo, así que lo conecté al osciloscopio de la tarjeta de sonido a través del divisor de voltaje y el amplificador operacional, como se puede ver en el siguiente esquema.

esquemático

simular este circuito : esquema creado con CircuitLab

Ajusté los valores R1 y R2 con un potenciómetro de 10k y obtuve la señal presentada en la imagen 1. Se ve bien (parece que no sería un problema leerlo con un uC).

Imagen 2 - Señal CPS leída por tarjeta de sonido

En el siguiente paso, conecté el mismo circuito a un pin analógico de un Arduino y cargué un programa simple para leer constantemente el voltaje en ese pin y transmitirlo a través de la serie. El resultado se puede ver en la imagen 2. No se parece en nada a la forma de onda de la imagen 2. En primer lugar, la señal leída por una tarjeta de sonido está invertida, pero es razonable. La señal leída por un Arduino no tiene sentido. La pregunta es cuál es el circuito adecuado para leer una señal de dicho sensor.

Imagen 2 - Señal CPS leída por Arduino AnalogRead()

El LM358 se alimenta individualmente desde 12 V con un condensador de 1uF a GND. Los valores ajustados son: R1 = 9,27 kOhm R2 = 1,79 kOhm

Sin divisor de voltaje o con R1 más pequeño, parece que mi circuito altera la lectura de CPS de la ECU de la motocicleta y el motor funciona de manera desigual o se detiene.


@Andy alias, tenías razón sobre el problema del alias. De acuerdo con su consejo, probé con éxito la señal CPS con Arduino a una velocidad más alta. La modificación requerida fue cambiar un prescaler del reloj ADC. Hice esto de acuerdo con este tutorial http://www.microsmart.co.za/technical/2014/03/01/advanced-arduino-adc/ y aquí está lo que tengo

Señal CPS muestreada con Arduino con un reloj ADC más rápido

Sin embargo, aún quedan dudas sobre el circuito adecuado para leer la señal CPS y filtrar el ruido. Cuando giro la perilla del divisor de voltaje del potenciómetro de manera que R2 se vuelve más grande y R1 más pequeño, la forma de onda se vuelve más ruidosa. Además, me pregunto qué nivel de voltaje puede tener esa señal CPS. Arduino indica que es de 5 V, pero ¿cómo puedo saber que no es mayor?

Es una señal digital (encendido/apagado). ¿Por qué lo conectarías a una entrada analógica?
Arduino viene con su propia interrupción fácil de implementar. Lo he usado varias veces para codificadores rotatorios y parece que es justo lo que podría necesitar. arduino.cc/en/Reference/AttachInterrupt
Estaba usando interrupciones pero las lecturas no eran lo que esperaba, por eso lo conecté a una entrada analógica, para ver qué estaba pasando en el circuito.
Presumiblemente, el doble pulso (en la forma de onda de la tarjeta de sonido) indica el Cilindro #1.
@Steve G El doble pulso no es un problema. En realidad, la forma de onda de la tarjeta de sonido es agradable y fácil de interpretar, pero ¿por qué la forma de onda en la entrada analógica de Arduino es tan ruidosa?
¿Cuál es la frecuencia de muestreo de Arduino? si está muestreando demasiado grueso (<3-5 veces el ancho de pulso esperado), obtendrá una salida que se parece mucho a esa. Una frecuencia de muestreo de 2 por pulso servirá, pero más es mejor.

Respuestas (1)

Se llama aliasing: si no convierte la señal analógica en digital a una velocidad lo suficientemente rápida, se acerca a suficiente basura. Considere esta imagen de una onda sinusoidal muestreada a una velocidad demasiado baja: -

http://www.iu.edu/~emusic/361/images/digitalaudio-aliasing.png

Imagina que la forma de onda marrón es tu señal analógica. Las flechas son cuando el Arduino muestrea la señal marrón y la línea punteada azul es lo que podría interpretar que significan esas muestras, es decir, nada como la señal original porque está muestreando a una velocidad demasiado lenta. Debe "muestrear" a una tasa que sea mayor que el doble de la frecuencia más alta de interés, como aquí: -

ingrese la descripción de la imagen aquí

Sin embargo, debería poder ver que el muestreo anterior perderá matices en la forma de onda que cambian demasiado rápido.

Ok, entonces intentaré probar con una tasa más alta. Todavía me pregunto por qué el propio amplificador operacional, como seguidor de voltaje, interrumpe el circuito CPS aunque, en teoría, tiene una alta impedancia de entrada. ¿Por qué necesita un divisor de voltaje antes?
¿Qué tan grande es la señal CPS y de qué voltaje (+ y -) se alimenta el LM358?
Tengo problemas para determinar un nivel de voltaje de la señal CPS porque no tengo un osciloscopio adecuado. El LM358 se alimenta de +12V y GND. Alimentarlo desde + 5 V da como resultado una salida limitada a 3,5 V. ¿Tal vez debería probar un amplificador operacional de riel a riel?
Cuando se alimenta con 12 V, ¿cuál es la señal de salida en términos de máximo y mínimo para la señal?
Su segundo gráfico (el que creo que muestra el aliasing) ocupa 500 ms y parece haber menos de 4500 muestras en esa ventana. Parece que hay más de 450 muestras en esa ventana o tal vez una cada milisegundo. Dado que un pulso parece ocupar aproximadamente 1 milisegundo, tiene un problema de alias.