Lecturas de voltaje incorrectas a través de ADC

0

Estoy tratando de crear un sintonizador eléctrico usando un piezo (por lo que puede usarse para detectar vibraciones en lugar de un micrófono que está sujeto al ruido ambiental)

Tengo el siguiente esquema usando un regulador de voltaje para crear 5v (5.09V es lo más cerca que puedo estar)

Luego, la batería alimenta el ADC y el amplificador operacional, y los datos de 10 bits se envían a los pines SPI de la Raspberry pi.

Estoy intentando crear una polarización de 3.3V para que se puedan leer los voltajes negativos generados por el piezo. (3.3V es la implementación más simple, ya que 3.3V está listo para funcionar)

Recientemente he cambiado el diseño porque el 5V del RPi era inestable y me daba un resultado erróneo, pero todavía estoy obteniendo malos resultados de mi configuración actual.

El código que utilizo lee el pin y convierte los datos a su voltaje correcto. Luego, los datos se muestran como un gráfico y se crean como un archivo .wav (el .wav se usará cuando pueda hacer la configuración correcta para escuchar la nota tocada)

Aquí está el código:

import spidev
import time
import os
import matplotlib.pyplot as plt
import wave
import numpy as np
from scipy.fftpack import fft, ifft
from scipy.io.wavfile import write

spi = spidev.SpiDev()
spi.open(0,0)

def read_spi(channel):
    spidata = spi.xfer2([96,0])
    data = ((spidata[0] & 3) << 8) + spidata[1]
    return data

def ConvertVolts(data):
    volts = (data * 5.09) / float(1023)
    return volts

ADC_channel = 0
samples = []


print "Starting detection..."
start_time = time.time()
try:
    while(True):
        samples.append(ConvertVolts(read_spi(ADC_channel))
except KeyboardInterrupt:
    pass
readTime = time.time() - start_time
print "Detection complete."
print("%s seconds" % (readTime))
time_axis = range(1,len(samples)+1,1)
print "Generating graph..."
plt.plot(time_axis,samples)
npSamples = np.asarray(samples)
scaled = np.int16(npSamples/np.max(np.abs(npSamples))*32767)
write('audio.wav', int(len(samples)/readTime),scaled)
plt.show()

Usando el código de arriba, genero un gráfico que se ve así:

Estossonlosresultadospormenosde1segundodelectura.

simular este circuito : esquema creado usando CircuitLab

¿Alguien puede explicar por qué no aparece 3.3V constantes en mi mesa?

Gracias.

EDITAR:

Cuando quito el amplificador operacional y conecto la entrada ADC al riel positivo (5.09V) obtengo una lectura de 768 o 3.8 voltios. Así que el código debe estar ligeramente fuera. Pero no entiendo por qué el 3.3V en el RPi es inconsistente a menos que esté hundiendo demasiados miliamperios y sea inestable.

EDIT2: Se actualizó el diseño. Tengo dos baterías de 9V y 2 LMT317. Uno generando 5.09V y otro con 2.46V. 2.46V está conectado a la entrada del ADC y 5V lo está alimentando. Todavía estoy obteniendo malos resultados que fluctúan entre 768, 256, 96 y 0. (3.82V, 1.27V, 0.47V y 0V, respectivamente)

Realmente no entiendo por el momento.
Además, si el CH0 se desconecta por completo, fluctúa entre 0 y 256.

simular este circuito

    
pregunta JamesDonnelly

1 respuesta

4

No tengo la reputación de publicar este comentario, así que tuve que "responder".

¿El ADC Vdd está realmente conectado como se muestra en el esquema? Si es así, no tiene una ruta actual desde el riel de alimentación y por lo tanto no tiene energía.

Parece que C3 y C4 están destinados a proporcionar desacoplamiento. Los condensadores que realizan esta función deben conectarse entre los rieles de suministro positivo y negativo directamente (es de esperar que estén cerca del IC para el que están proporcionando desacoplamiento).

El pin Vdd de U3 debe conectarse directamente al riel positivo y no a través de C3 o C4.

Lo siento si he leído mal tu esquema y me he ido en una tangente, pero realmente debería ser mucho más claro de lo que es.

(Mientras estamos en ello, ¿hay alguna diferencia entre la 'conexión a tierra' conectada al suministro negativo de OA1 y el riel negativo utilizado en el resto del circuito?)

    
respondido por el Ted

Lea otras preguntas en las etiquetas