entrada de datos Verilog

3

Hola, soy relativamente nuevo en verilog y necesito ayuda en parte de un proyecto en el que estoy trabajando. Necesito a alguien que me guíe sobre cómo leer los datos de un dispositivo analógico. Compré un sensor de temperatura analógico de sparkfun y estoy tratando de leer datos de él. Parece que no puedo encontrar ningún ejemplo de cómo obtener información. Estoy usando un Nexys3. Cualquier ayuda sería apreciada. Esto es todo lo que puedo hacer. He asignado mi ioport a un pin en el archivo de restricciones.

Gracias

module TempSensor(
    input wire clk,
    input wire reset,
    inout ioport
   );

reg tempV[7:0], tempC[7:0];


always @(posedge clk)
    begin
        tempV <= ioport;        
    end
endmodule
    
pregunta blackninja

2 respuestas

2

También puede usar amplificadores operacionales y un par de resistencias para construir un convertidor digital a analógico basado en una escalera R-2R como en la imagen adjunta (de las imágenes de Google como ilustración), y comparar esa salida con su señal usando otra opamp

(El74Hseríasumicroprocesadorensulugar,ylaseñalDACdelcomparadornosemuestraaquí)

Comiencecon0enelDAC,silacomparaciónledaDAC<laseñalluegolaaumentaaVcc(11111111paraunDACde8bits);luego,silacomparacióntedaDAC>laseñallareduceaVcc/2(01111111),luego,silacomparaciónesDAC<señalaVcc*0.75etc.etc.Estosellamaconvergenciaatravésdeladicotomía,perohayotrosalgoritmosbasadosenelmismohardware(aumentandoelDAChastaquelacomparacióncambiedesigno,porejemplo).

Porcierto,hayunavariantedeVerilogqueesparasistemasanalógicos(VerilogA)peronoharáloqueustedespera:elequivalentedeanalogRead()deunarduino.Inicialmente,Verilogestáhechoparasintetizarpuertas,porloquesumodelodecomportamientosolopuedeinteractuarfácilmenteconseñalesanalógicasatravésdeADCconinterfacesdigitalesindependientementedesuprincipiodefuncionamientoreal(conteo,dicotomíaDAC,DeltaSigma...).

PuedeencontrarfácilmentechipsintegradosqueleahorraránlamolestiadediseñarsupropioADC,porejemplo,elmuybásico TLC0820ACN . Salida paralela y no diferencial, de un solo canal, 8 bits, paquete grande ... No puede ser mucho más simple que eso.

    
respondido por el Mister Mystère
3

Parece que no hay entradas analógicas en esa placa Nexys3, por lo que tendría que usar un convertidor de analógico a digital para obtener los datos de ese sensor de temperatura. O podría usar un sensor de temperatura que tenga una salida digital.

También hay varias formas de construir un convertidor de analógico a digital que sea adecuado para su proyecto, pero como dice que es un principiante, podría ser más fácil usar piezas que están fácilmente disponibles. Pero si está interesado en probar un diseño analógico, no es muy difícil diseñar un circuito en el que primero descargue un condensador y luego deje que cargue a través de el sensor de temperatura analógico, que en este caso debería ser Una resistencia sensible a la temperatura NTC (o PTC). Entonces, podría tener un contador en funcionamiento en su FPGA y medir el tiempo que tarda el condensador en cargarse, lo que varía con la temperatura.

Para obtener los mejores resultados, puede usar un comparador analógico como LM358 para detectar el momento en que el condensador está suficientemente cargado. Pero eso puede no ser necesario. También puede conectarlo, a través de una resistencia de protección contra cortocircuitos, directamente a un pin de entrada en el FPGA, pero los resultados pueden no ser los más precisos. Y no conecte un capacitor directamente a los pines de E / S sin usar una resistencia en el medio: las corrientes rápidas que cargan y descargan el capacitor muy rápidamente pueden forzar el pin FPGA más allá de sus límites, envejeciendo rápidamente el chip (a mí me ocurrió).

Lo siento si me estoy complicando demasiado.

[Editar] Tomé una foto en este "Laboratorio de circuitos" para ilustrar de qué estoy hablando en los párrafos 2 y 3. El esquema muestra una posible conexión que usa 2 pines del FPGA. No es mínimo, pero es fácil de hacer. R1 y R3 existen realmente solo para proteger los controladores de pin FPGA, incluso si el FPGA está mal configurado, por lo que no hay forma de quemar los controladores.

simular este circuito : esquema creado usando CircuitLab

Puede descargar el condensador configurando la salida de CARGA / DESCARGA a "0" durante un tiempo suficientemente largo (10 ... 100 milisegundos). (Para una operación más robusta, también puede cambiar el pin MEDIDA a salida y llevarlo a "0" en este punto). Luego, cargue el condensador ajustando la salida de CARGA / DESCARGA a "1". Use la entrada MEDIDA para detectar cuándo cambia de "0" a "1". Usa un contador binario para medir el tiempo. Disminuya la capacidad para acelerar el tiempo de carga / descarga.

Cualquiera, edite el esquema y / o escriba el código de Verilog que funcione con esta idea.

    
respondido por el PkP

Lea otras preguntas en las etiquetas