[Proyecto en desarrollo] - Osciloscopio digital 80 MSPS / 64k RAM

Foristas,

Creo este tema para empezar a documentar el desarrollo de mi proxima version de osciloscopio digital. Estimo que al ir tirando los avances aqui, puedo no solo compartirlo sino obtener muy buenas ideas.

Aclaracion importante: Es un proyecto en desarrollo y va mutando constantemente. Ya estoy cerca de pasar al diseño de PCB pero primero quiero dejar perfecto esto en la teoria.

Otra aclaracion: Con este osciloscopio se intenta obtener algo "decente", utilizando los materiales mas conseguibles que se pueda.

El esquematico que adjunto es una impresion de la simulacion de proteus de la etapa de captura digital, por lo tanto hay unas cuantas cosas que se han puesto alli solo a fines de simulacion. (ej: inversores, puerto serie rs232, generadores de señal, etc)

Tambien se intenta obtener unas cuantas partes desde el reciclaje de computadoras. Tooooodo este circuito podria implementarse en una FPGA y andaria a los tiros pero lamentablemente no las consigo y con la importacion se me hace prohibitivo. Sin embargo, los PLD estan ahi, ya veran.

El osciloscopio, si despierta interes, vendra con esquematicos, PCB y software (en visual basic .net, pero si alguien quiere colaborar con java o algo que ande en linux, puedo proporcionar toda la informacion del protocolo de comunicacion).

Enumero algunas de las caracteristicas principales:

- Tasa de captura digital de 80 MSPS, real time.
- 64 Kb de profundidad de memoria x canal, cantidad de datos pre-trigger seleccionables
- 2 canales + trigger externo
- Trigger de hardware digital, trigger externo analogico y trigger por software
- Ancho de banda analogico a definir, posiblemente alrededor de los 100mhz
- Conexion USB, alimentacion desde el USB (veremos si con 500ma me alcanza)

Componentes y su decision:

- 2 conversores ADC ADS831 de TI. Estos conversores los obtuve como samples :) y van a un maximo de 80MSPS. Entre estos y la ram daran en ultima instancia la velocidad.

- Modulo Oscilador de cristal de 80mhz rescatado de placas viejas de PC

- Transceivers 74LS245 rescatados de lectoras de CD y motherboard viejas. Necesarios para direccionar los datos. (podria usar el 74LS244 pero los pines son super incomodos para el PCB)

- 4 Memorias SRAM de 15ns 61256 rescatadas en este caso de un modulito de memoria cache de mother para 486, pero que tambien se obtienen de lectoras de CD viejas.

- Micro PIC 18F4550 (probablemente un 18F2550 ande OK pero habria que multiplexar pines)

- 74HC4094, serial shifter, simplemente para ahorrar pines :)

- flip flop 74F74 (importante la F) y NAND 74F00 rescatados, otra vez, de lectoras de CD y plaqueterio de PC. Estos cumplen la funcion de dividir la captura entre 2 grupos de RAM para asi poder alcanzar 80 MSPS con memorias de 15 nanos. (grabo en una ram en ciclo de reloj alto y en la otra en bajo). Este conjunto estoy evaluando reemplazarlo por una GAL

- Por ultimo, y super importante: GAL22v10 de 5ns de tiempo de propagacion (las mas rapidas que consegui). Simplemente porque las tengo para usarlas y se que esto es una complicacion muy grande para otra persona que quiera hacerlo.

La finalidad de este post NO es proveer un circuito para armar y usar. Eso es imposible dada la complejidad del mismo y la disponibilidad de componentes. La idea es brindar algo que funcione y que sirva de base para sus diseños propios basados en los componentes que tengan.

Por ej: Yo uso 3 GAL 22v10:

- 1r PLD es el trigger digital. Basicamente es un comparador de 2 palabras de 8 bits y tiene 1 pin de salida que dice si A > B. Esto se puede reemplazar por 1 integrado de la serie TTL que ahora no recuerdo la denominacion. Lo que pasa que ese integrado no es tan rapido como la GAL.

- 2do PLD es el contador SINCRONO (importantisimo) de 9 bits con carryout, reemplazable por 74F269 de la serie TTL

- 3r PLD cumple multiple funcion de:
a- contador sincrono de los bits restantes
b- selector de fuente de reloj
c- determinador de trigger
d- generador de clock para el contador de desborde (integrado en el PIC pufff 1 integrado menos!)
Este PLD es reemplazable por otro 74F269 y unas cuantas NAND + flip flops

Como ven, si bien esto asi como esta "no sirve para nada", si es una buena base de ideas si interpretan el esquematico. Voy a ir posteando a medida que avance el proyecto y espero sus ideas o preguntas!

Aca les dejo una captura de pantalla para ir entusiasmando:

oscitest.png

Se trata de una senoidal de 50khz en el canal A y una cuadrada de 100khz en canal B sampleadas a 50 MSPS (a 80mhz el proteus me pone impaciente :) )

En el programa, cada division tiene 100 puntos de sample.

A 80 mhz, este osciloscopio tendria su escala minima en 1.25us / DIV a 100 samples pero gracias al forista palurdo que me dio una leccion de matematicas, a partir de alli empieza la interpolacion y se lo puede hacer ver muy razonablemente señales en el dominio de los 200ns / DIV.

Ademas, estoy estudiando agregarle al menos 1 disparo retardado de trigger para hacer Equivalent time sampling pero no estoy seguro de querer complicar mas una PCB de por si complicada.

Proximamente, mas avances, sus opiniones, ideas, criticas, etc son bienvenidas!
 

Adjuntos

  • osciloscopio80mhz-preview.pdf
    43.3 KB · Visitas: 99
Aqui adjunto una version del esquematico un poco mas prolija y con descripciones de los distintos integrados.

Tambien se reemplazo el conjunto 74F74 + 74LS00 por otro PLD GAL22v10

Adjunto tambien el proyecto completo que se compone de:

- Simulacion en proteus 8
- Firmware de prueba del PIC en CCS C
- Firmware de los 3 PLD GAL22v10 (modelo AM22v10 en proteus)
- Programa de test hecho en Visual Studio 2010, junto con el EXE por si no tienen el entorno (en bin)

Para poder ver el firmware de los PLD, pueden abrir los archivos .PLD con un block de notas, o para cambiar algo, descargarse el WinCUPL de Atmel.

Si usan la simulacion del proteus, recuerden editar los integrados GAL22v10 y el PIC para apuntar correctamente a los archivos .HEX y .JED

Tambien quiero hacer notar que SYSCLK lo deje en 1mhz en vez de 80mhz para hacer que la simulacion ande rapido. A 80mhz hay que ajustar el valor del TMR0 del PIC para que el trigger quede exactamente en el medio.

El potenciometro de nivel de trigger junto con sus selectores son para simulacion exclusivamente. En realidad se transferiran los valores al PIC mediante USB.

No me dejen hablando solo :D aporten lo que se les ocurra, todo sirve para mejorar.

PD: Si no tienen acceso a conseguir los GAL 22v10, con ingenio se pueden reemplazar por integrados TTL bastante comunes (ej: 4 contadores de 4 bits, un par de 74F00 y un 74F74) Solo es cuestion de evaluar el codigo del PLD y reemplazarlo por logica fisica. Quiza no se llegue a 80mhz pero a 40mhz seguro. Y si consiguen serie F, es probable que puedan llegar a 80mhz.

PD2: Tengo por ahi unos ADC de 100mhz para ponerlo aun mas interesante, pero trabajan a 3.3v y me preocupa que no lleguen a nivel logico "1" a tales velocidades haciendo interfaz directa con logica 5v.

PD3: El generador de reloj, yo estoy usando un modulo oscilador de 80mhz pero se puede rescatar un chip PLL de motherboard que andan con un cristal de 14mhz y generan esos 80mhz.
 

Adjuntos

  • osciloscopio_captura_digital_v1_0.pdf
    41.9 KB · Visitas: 87
  • Osciloscopio2014PLD.zip
    291.4 KB · Visitas: 64
Última edición:
Para los que no tienen OCR, este tema les puede venir muy bien.

Ademas, estoy estudiando agregarle al menos 1 disparo retardado de trigger para hacer Equivalent time sampling pero no estoy seguro de querer complicar mas una PCB de por si complicada.

Esto es interesante que lo implementes y se supone que en hard no deberías agregar nada.

Para el resto, el "Equivalent time sampling" es muestrear en distintos periodos la señal, esto te ayuda a muestrear señales muy rápidas donde el ADC solo puede capturar pocas muestrar en un periodo y rellena el muestreo a partir de los datos que vienen del próximo periodo. En esta imagen se puede ver la idea:

ETS_Pulsetrain.JPG


En este caso, es muy importante tener un buen control sobre el [LATEX]\Delta D[/LATEX], ya sea con un timer o con una rutina en assembler que fije bien esa diferencia de tiempo entre el inicio del periodo y el lugar a muestrear.

seaarg, después si podés subí el video que ya subiste en el hilo del generador DDS para que vean como funciona tu OCR actual.
 
Hola Cosme!

El video del que habla cosme es este

Alli se puede ver al principio el osciloscopio digital que arme hace un tiempo y que, sus defectos y virtudes me llevan a diseñar este que esta en proyecto juntando todo lo aprendido. (en realidad este es mi 3r osci casero que hago pero los anteriores fueron bastante fracaso jeje) En cada version lo voy mejorando.

Sobre equivalent time sampling si, tendria que poner algo de hardware porque el trigger no lo maneja el micro. Si lo manejase el micro seria demasiado lento para reaccionar en el instante que hay un evento de trigger.

Asherar estaba desarrollando algo al respecto de esto en su post de osciloscopio con TTL. No lo implemento aqui porque no termino de entender su solucion, pero basicamente:

Mi PLD de trigger pone un 1 logico cuando la señal > nivel (despues el controlador verifica flanco y opcion ascendente/descendente).

Yo podria agregar algo que me haga distintos retrasos controlados, supongamos, de 1ns desde que hay un "1" logico en la salida del trigger, entonces podria hacerlo. La cuestion es como generar dichos retrasos y que sean exactos porque sino el sistema se hace "sucio" cuando reconstruis la señal.

El problema de generar retrasos, por ej, con compuertas es que el tiempo de propagacion no es exacto sino solamente tipico.

Desde el lado del micro no puedo hacer nada, es una tortuga :(

Tal vez podria estudiar mas a fondo una de las ideas de asherar de tener un PLL oscilando a un multiplo de la frecuencia base, pero se pone problematico con los componentes a 80mhz

Entonces, si no se puede hacer esto dentro de terminos razonables, siempre se puede apelar a la matematica para expandir los limites. Haciendo interpolacion e intercalando muestras calculadas (asi lo hice en el osci del video). No sera "real" pero es muy bueno y doy fe que osciloscopios como los Hantek lo hacen.

Otra posibilidad que se me ocurre es que, como yo tengo un dato en la ram que es el momento exacto del trigger, trabajar con los datos de la ram en muestras sucesivas e ir intercalando. Hasta ahora al ETS yo lo entiendo como que si yo tengo muestras cada 20ns (por decir), en una pagina tengo que tener la muestra 20ns, en la proxima, la muestra 21ns, y asi sucesivamente. Quiza no sea tan asi y pueda hacerlo con esas mismas muestras de 20ns descartando de a 1 desde el inicio de trigger para cada pagina. Lo voy a estudiar.
 
Última edición:
Hola foso, esa captura de pantalla es del programa en visual basic net. Lo que esta pasando ahi es que uso el COMPIM de proteus para enviar el resultado de la simulacion a mi programa como si fuera un puerto serie (es virtual). El osci aun esta en etapa de diseño asi que para real le falta un poco.

Si alguien quiere experimentar con esto pero no consigue los PLD, una idea que estaba manejando es sacar la memoria flash que viene en los discos duros de desguace. Con una flash de 64k pueden programarla para usar las 16 lineas de direccion como los 8 bits de nivel + 8 bits del ADC y programan los 2^256 resultados posibles en uno de los bits de datos. Lamentablemente las flash mas rapidas que vi son de 50ns y eso bajaria la velocidad del osci, pero al menos con eso se puede obtener un trigger digital bastante bueno! (el PLD de pobre le dicen)

Como ven, la idea es armar algo con lo que se tenga. Entre mis desguaces encontre una SRAM de 64k x 16 bits de un disco duro, ideal para reemplazar las 4 SRAM que estoy usando, pero es de 20ns de tiempo de acceso (12ns pulso de grabado) y al tener solo una, no puedo hacer el doble buffering que estoy haciendo en el esquematico que puse, entonces estaria limitandome a unos 50 msps con un par de arreglos especiales.

A proposito: ¿Alguien sabe como simular en proteus una senoidal con ruido? (picos, glitches, cosas asi) Quiero darle un poco mas de pruebas al trigger digital. Como funciona a traves del integrado de control como una maquina de estados (menor que -> mayor que -> disparo y viceversa) estoy 99% seguro de que va a funcionar bien en la realidad, pero estaria bueno probar mas variantes por si hay que corregir.

PD: Otra idea que estaba pensando es en dejar libres los pines RS232 del PIC para ponerle un modulito bluetooth. Usando un smartphone puedo hacer una aplicacion para aprovechar la pantalla del telefono y tener un osciloscopio totalmente portatil e independiente de la PC. Como la alimentacion de este bicho vendra desde el USB, bien puede venir de una bateria tambien. Idea feliz :)
 
Última edición:
Agrego un link (en ingles) con informacion sobre los osciloscopios hantek. Lo considero relevante porque tiene unos diagramas de bloques de funcionamiento que son muy similares a la arquitectura que estoy realizando.

http://fabiobaltieri.com/2013/07/10/inside-a-hantek-dso-2090-usb-oscilloscope/

Tambien les comento que proximamente subo otro esquematico. Estoy empezando a hacer el diseño del PCB y mientras rebuscaba entre mis cosas encontre una memoria cache de compu vieja con 10 chips sram de 15ns. Esto significa que voy a ampliar la memoria de los 64kb originales a 96kb. Podria llevarlo a 128kb (mientras mas memoria, mejor y ademas se plantea menos exigencia a la velocidad de los contadores) pero poner 8 chips de ram en el PCB se hace muy grande, por eso me quedo con 6.

Anoche pensaba y si pusiera los 128kb, la velocidad a la cual cambia de direccion la memoria seria de solo 20mhz, un valor aceptable para reemplazar los PLD de contador con integrados TTL o un simple 74HC4040 (que, a mayores velocidades, como es ripple counter no sirve). Creo que finalmente usare el PLD porque es rapido y sincronico, pero lo menciono aca porque el que no consiga PLD, pone 4 contadores de 4 bits TTL y agrega RAM y con eso puede mantener la velocidad de 80 o incluso 100msps
 
Queria postear unos avances.

Estoy haciendo la PCB de la parte de captura digital (todo SMD y doble faz), mi primer intento:

pcb-apretado.png

Sin embargo, son lineas de 0.3mm con muy poca separacion entre ellas. Si bien he hecho varias placas con esos parametros y es factible hacerlas, en este caso son demasiadas lineas y muy propenso a error al planchar la placa (basicamente, renegar demasiado para hacerla).

Entonces, cambie el enfoque y decidi redistribuir los integrados y las capas de la placa para hacerlo con lineas de 0.5mm con mas separacion, pads mas grandes, etc, ademas, evitando pasar entre pines de integrados smd.

Este es el resultado hasta ahora (falta adicionar los 4 PLD)

pcb-actual.png

Logre el mismo tamaño fisico de placa, solamente que tengo mas vias entre las 2 faz de la misma. Y la placa es muchisimo mas "planchable"

Queria saber, mientras la voy haciendo, si alguien tiene sugerencias u observaciones del tipo "eso no conviene hacerlo a altas frecuencias" etc. Las vias no son demasiado largas y todo lo que es bus de direccion en realidad corre a 40mhz. Lo que va a 80mhz es el bus de datos.

Me preocupa no tener lugar para ubicar resistores de terminacion en las lineas de direccion para evitar reflexiones. No se si esto sera critico para mejorar las señales o no. No me queda claro en los datasheet de los 74F245 si estos poseen diodos de proteccion en las entradas. Si hay un parametro que dice "input clamp diode voltage". Si tuviesen diodos, probablemente no necesito terminadores ya que los diodos hacen el recorte.

Tampoco estoy seguro si las entradas de direccion de las memorias poseen dichos diodos. :unsure:

A quien pueda dar sugerencias, le agradezco

PD: Ah! termine haciendo 2 canales de 64kb cada uno nomas (4 memorias) porque cada una consume 90 mA y pretendo alimentar esto con el USB o baterias... 8 memorias era demasiado consumo.
 
Última edición:
En altas frecuencias ya comienzan a ser un problema las dimensiones fisicas de las pistas, asi que buscaria hacerlas lo mas cortas posibles y sobretodo añadir planos tierra por todos lados, tambien poner pistas horizontales de un lado y pistas verticales del otro.. aunque se incrementen el numero de vias de conexion entre pistas

Y sobretodo leer mucha literatura de apoyo de los expertos:

http://www.ti.com/lit/an/scaa082/scaa082.pdf
http://www.ti.com/lit/ml/sloa089/sloa089.pdf
http://www.ti.com/lit/ml/slyp173/slyp173.pdf

http://es.slideshare.net/AnalogDevicesInc/pcb-layout-fundementals
 

Adjuntos

  • noise_reduction_techniques_original.ppt.zip
    1.8 MB · Visitas: 29
Estoy en un 90% casi a punto de terminar la parte de captura digital.

pcb-90.jpg

Siempre me pasa lo mismo, una vez que ruteo casi todo me queda muy poco espacio para la alimentacion de los integrados :(

Sin embargo, voy a volver un poco atras porque estaba observando que me han quedado varias pistas paralelas en ambas caras, formando un capacitor entre ellas. No corren a 80mhz sino a 40mhz (son lineas de direccion no de datos) pero igualmente, para evitar problemas las voy a trabajar un poco mas.

A la izquierda de la se encuentran los 2 ADC, luego los buffer y el PLD de control. En el medio las memorias y hacia la derecha otros 2 buffer, los PLD de direccion, el PLD de trigger y el micro.

Hacia abajo de esta placa estara ubicada la entrada USB, la fuente, etc. Hacia la izquierda de los ADC quedara la etapa analogica y el trigger externo.

El layout general es muy parecido a como tiene distribuidos los componentes el osciloscopio comercial Hantek, salvando las distancias claro.

Las dimensiones fisicas de esta etapa son de 11 x 6 cm

Cabe aclarar que en esta imagen faltan los rellenos de masa de ambas caras. Sin embargo al medio esta tan apretado que casi no hay plano de masa. Eso no me gusta. Voy a trabajar para mejorarlo.
 
Despues de un tiempo diseñando la PCB, en la parte de la captura digital, esta esta casi casi lista.

Es tiempo de diseñar la etapa analogica. :unsure:

Tengo 2 opciones de amplificador operacional.

1- El OPA4354
rail-to-rail I/O CMOS de 100-250mhz de ancho de banda, 150 V/uS

2- El LM318 que es mas humilde
15mhz ancho de banda, 50 V/uS y puede llegar a 150 V/uS con sobrecompensacion (tambien aumenta el ancho de banda)

La opcion por defecto seria el OPA4354 pero tiene la desventaja de que lo puedo alimentar con 5.5vpp (+-2.75v) como maximo. El ADC (ADS831) necesita un level shift que se sale de rango de alimentacion del opamp a 2vpp de rango de señal. Puedo llevarlo a 1vpp de rango de señal y quiza ahi pueda hacer entrar la señal en el rango de alimentacion del opamp.

Mas alla de este "detallito", la etapa de entrada va a necesitar si o si un divisor de tension porque si quiero que este osciloscopio tenga un rango de entrada aceptable, de al menos +-20v (mis aspiraciones son bastante mas) no hay forma de que pueda tener ese rango con este operacional sin divisor.

Entonces, mirando trabajos de mucha gente (Con foco en el MK3 de jones http://alternatezone.com/electronics/dsoamk3.htm) vi que puedo hacer un divisor en la entrada similar al x10 de la punta del osciloscopio.

Se me ocurrio que, dado que tengo una resistencia en serie con una capacitancia (parasita del PCB + entradas del mux) de 6pF aprox, estoy teniendo un filtro pasabajos importante.

Adjunto el esquematico de lo que estoy probando (entrada_primera_prueba.pdf) Descripcion breve:

1- La señal entra en directa hacia OX1 con diodos + resistencia limitadores y de ahi a el primer mux
2- Tambien tengo una division OX10 (/10) hacia el mux
3- Una tercera division OX20 (/20) hacia el mux.
4- Este mux (U3) selecciona:
a- Sin atenuacion
b- Sin atenuacion, multiplicado x 2
c- Atenuacion /10
d- Atenuacion /20

5- Este mux (U3) maneja la realimentacion del primer operacional buffer.

Aclaro que el operacional CMOS tiene diodos clamp adentro, por eso no estan en el esquematico (excepto para directa, a fin de proteger el mux)

6- Luego voy a una etapa de amplificacion, donde con el segundo MUX tengo x1, x2, x5, x10

7- El soft del osciloscopio tiene su rango vertical dividido en 10 cuadrados, 5 para arriba, 5 para abajo de GND.

8- Esto me da: (en V/Div)

Código:
10mv	01 11	/1  x2 x10
20mv	01 10 	/1  x2 x5
50mv	01 01	/1  x2 x2
100mv	01 00	/1  x2 x1

200mv	00 00	/1  x1 x1

500mv	10 10	/10 x1 x5
1v	10 01	/10 x1 x2
2v	10 00	/10 x1 x1
5v	11 00	/20 x1 x1

limite fisico: 110vpp

9- Los ultimos 2 operacionales aun no esta determinada su conexion pero son el level shifter y buffer de ADC. Aun estoy pensando si poner o no un DAC en el level shifter para tener control de offset. Me pregunto si sirve ya que electricamente tengo muchas opciones de V/Div y el cambio de posicion "visual" lo puedo hacer desde el soft. Tendria mas sentido si tuviera menos opciones de V/Div para ajustar la señal dentro del rango de los opamp.

OK, eso fue la descripcion, ahora la consulta:

Pongo lo siguiente en proteus para analizar la respuesta en frecuencia del atenuador

divisor.png

Y obtengo el siguiente grafico:

respuesta_frecuencia.png

Se puede ver el grafico mas grande en los links de abajo.

Mas alla del corte en el trazo azul (que es directa) no tan importante porque es bastante alta la FC (no olvidemos que esto samplea a 80mhz por lo que el ancho de banda analogico util estara alrededor de los 10mhz para tener 8 puntos minimos por onda completa)

Queria saber: El grafico me muestra el trazo verde (/10) por los -20 db y el rojo (/20) por los -26 db. ¿Es esto normal y causado por el divisor de tension o es que tengo algo filtrando demasiado?

Mas preguntas: Para ustedes, ¿es recomendable atenuar la señal cruda 10 o 20 veces para luego amplificar (manteniendose dentro de los 2vpp o 1vpp del ADC) o me conviene mas usar un operacional en todo su rango de alimentacion (supongamos +-20 volts) y no atenuar la entrada?

Tambien tengo que tener presente que el MUX 74HC4052 se puede alimentar hasta 10vpp (-5+5) limitando todo, aunque en mi otro OCR lo estoy alimentando con +9-9 y no habia leido esto en el datasheet (doh! no se quema!)

Otra: ¿Vale la pena renegar con el limitado rango de alimentacion del OPA4354 considerando sus prestaciones superiores, o irse a un opamp mas humilde como el LM318?

Por ultimo: ¿Se puede configurar un op-amp como "reductor"? Puesto que tambien tengo disponibles unos hermosos ths3001 que son op-amp de 420mhz current feedback con mas rango de alimentacion, pero solo dispongo de 3 :( Si se pudiera hacer que el op-amp sea un divisor x10 entonces podria poner 1 en cada entrada antes del op-amp CMOS

Aclaro que tambien tengo unos JFET J309 para imitar la entrada del bitscope y usarlos de buffer con alimentacion grande pero estoy en la misma, despues de ellos tengo que reducir si o si.

Sin mas, muchisimas gracias por leer todo esto. Cualquier idea u observacion del diseño es mas que bienvenida.

Edito: Viendo mas en profundidad la pagina que puse mas arriba con el analisis de los hantek, veo que los diseñadores utilizan solo 1 op-amp (candidato el que tengo de 420mhz) y mediante los reles conectan un divisor /10 en serie con otro /10 totalizando division x100 desde la señal cruda y luego eso al amplificador x1, x5, etc. Ademas, alimentan todo con +5-5v. Quiza imitando esto puedo obtener gran rango de entrada con 1 solo op-amp. ¿Que opinan? Cuestion de conseguir unos relecitos que consuman poco. Ademas, chusmeando las fotos de esta pagina rusa http://www.artem.ru/cgi-bin/photo?c=l&cid=115 vi una forma de rutear las memorias bastante interesante que puede hacer mi PCB menos propensa a efectos de alta frecuencia.

Adjunto imagen del analisis del hantek:

hantek-frontend.png
 

Adjuntos

  • entrada_primera_prueba.pdf
    31 KB · Visitas: 34
  • opa4354.pdf
    1.2 MB · Visitas: 25
  • LM318.pdf
    512.2 KB · Visitas: 15
Última edición:
He vuelto,

Luche mucho diseñando la entrada analogica de este bicho. Queria aprovechar los samples que dispongo, que son:

3x OPA4354 - Quad CMOS op-amp rail-to-rail I/O 250mhz (5.5vpp alimentacion max)
3x THS3001 - Single CBF op-amp 450mhz

Hubiera hecho todo con el ths3001 pero dispongo de solo 3 y necesitaria al menos 4.

Descripcion del esquematico (1 canal, hay que duplicarlo).

- Se empieza con un selector AC/DC (candidato a reemplazar por llave electronica)

- De ahi, la señal va a un divisor compensado /1, /10, /20. La resistencia de 10K en paralelo con un capacitor de 22nF protegen la entrada del mux en directa, limitando 100vpp a 10ma, suficientes para ser recortados por los diodos de entrada internos del mux.

- Luego, la señal va a un mux 74HC4052 alimentado con 10vpp que selecciona una de las 3 divisiones previas o una amplificacion x2 de la entrada directa.

- El mux va a un op-amp no inversor puesto como buffer de ganancia unitaria

- El buffer va al segundo mux de divisores /1, /2, /5 y amplificador x5 (que sumado al previo x2 logran una amplificacion x10). En el divisor /5 hay un capacitor de compensacion de HF a determinar aun.

- La salida del mux, va a un ultimo buffer de ganancia unitaria.

- Este ultimo buffer se asocia con el THS3001 que hace de buffer ADC + Level shifter. Si le aplico 1.25V a su entrada no inversora establezco un CMV de 2.5v

- La señal resultante al ADC es de 1vpp

Con este esquema, tengo la siguiente tabla de escalas, para los distintos rangos de entrada:

Código:
100vpp > 1vpp = /20 5vpp > /5 1vpp	|	10V/div
50vpp > 1vpp = /10 5vpp > /5 1vpp	|	5V/div
20vpp > 1vpp = /10 2vpp > /2 1vpp	|	2V/div
10vpp > 1vpp = /10 1vpp > /1 1vpp	|	1V/div
5vpp > 1vpp = /1 5vpp > /5 1vpp		|	0.5V/div
2vpp > 1vpp = /1 2vpp > /2 1vpp		|	0.2V/div
1vpp > 1vpp = /1 1vpp > /1 1vpp		|	0.1V/div
0.5vpp > 1vpp = /1 0.5vpp > x2 1vpp	|	0.05V/div
0.2vpp > 1vpp = /1 0.2vpp > x5 1vpp	|	0.02V/div
0.1vpp > 1vpp = /1 0.1vpp > X10 1vpp	|	0.01V/div

Esto no incluye el divisor /10 de la punta del osciloscopio. Con eso se llegaria a 1000vpp (miedo!)

Cada pequeña etapa la fui pasando por el analisis de frecuencia de proteus, agregando capacitores y resistencias segun los parametros de datasheet de cada componente (impedancias de entrada, capacitancia de entrada, etc) cuidando mucho de no fabricar algun pasabajos en la señal. Segun proteus, esta etapa soporta una respuesta plana en frecuencia hasta los 50mhz. A partir de ahi empieza a caer un poquito. Por los 100mhz creo que caia un par de dBs.

Lo que me genera duda es la resistencia de 1K sugerida en datasheet en la entrada del ultimo operacional. Ahi no estoy seguro de no estar formando un pasabajos con la capacitancia de entrada.

Por ultimo, quiero aclarar que esto tene 2 fuentes de alimentacion:

- una fuente para los mux y ultimo op-amp de +5 -5 v y otra para los op-amp cmos de +2.75 y -2.75v.

La primera fuente (+-5v) planeo hacerla a partir de los 5v del usb por medio de 2 MC34063 (uno como regulador 5v y el otro como generador -5v)

La segunda fuente, Estoy pensando en realizarla con zeners a partir de la primera, pero no estoy seguro de lograr una buena regulacion para tener un voltaje exacto en los op-amp. Tambien se me ocurrio poner un par de transistores en modo emisor-seguidor cosa de regularlos con un preset en la base como divisor de tension. ¿Que opinan? cada uno va a disipar 2.25v x algunos milamperes que consuman los operacionales.

Por ultimo: hay alguna forma con un par de JFETs de reemplazar la llave mecanica AC/DC? Se tendrian que bancar 100vpp supongo. No se si es practico.

Cualquier sugerencia o problema que vean en este esquematico, antes que me ponga a hacer el PCB, se agradece un monton.
 

Adjuntos

  • entrada-100vpp.pdf
    34.7 KB · Visitas: 33
Lamentablemente no. De todos modos, conseguir esos componentes aqui (cordoba, argentina) debe ser imposible y por otro lado, si bien es lineal la frecuencia maxima no debe ser mucha.

La situacion ideal seria usar un transformador de aislacion en las entradas (el adc que uso tiene entrada diferencial). Pero lograr que eso sea lineal y de al menos 40mhz de ancho de banda supera mis conocimientos.

Habra que lidiar con que no este aislado, como la mayoria de los dso usb. Igualmente este bicho esta pensado para funcionar tambien con bateria y sin PC (bluetooth al telefono) asi que la aislacion deja de importar demasiado en ese caso... (creo no estoy seguro)
 
Compartiendo avances:

placaosci.jpg

Esta foto es el component side de la placa de captura digital. Como se puede observar esta al limite de lo realizable con plancha. Los tracks mas finos son de 0.4mm y pasan entre los pines de las memorias. Tuve que plancharla unas cinco veces hasta que salio.

Casi la descarto y hago una version "modular" donde las memorias estarian en otra placa para poder hacer tracks mas gruesos, pero luego de comprobarla con el tester no salio demasiado mal. Voy a probarla.

Hay que hacele un par de arreglitos en unos lados donde se me salto el toner. Ahora voy a hacer el solder side pero este es mas facil (cruzando dedos).

Si la placa funciona OK, subire por aqui el PCB hecho en circuit wizard.
 
Solamente queria comentarles que la placa la descarte, porque si bien parece estar todo OK, resulto ser insoldable en la parte de las memorias. Se me hacian corto en los pines hasta que termine cortando algunas pistas y no queria ponerme a reparar algo nuevo. Si tuviera solder mask seria otra cosa :)

La cuestion es que estoy haciendo una version de la PCB en forma modular. Es decir: 1 plaquita doble faz para las memorias y los PLD de direccion y esta se conecta a traves de un "peine" a la placa principal.

Esto me permite no tener que pasar entre pines de la memoria y poner tracks mas gruesos. Lo unico que espero es que la conexion a traves de un peine soldado no perjudique el rendimiento en frecuencia del PCB. Estoy intentando tener cuidado con eso y como distribuyo las cosas pero a esta altura es prueba-error.

Saludos!
 
Excelente post seaarg, actualmente estoy a la espera de que me lleguen unos ADC de 100Msps para empezar a diseñar mi propio osciloscopio digital, tengo pensado usar memorias FIFO AL422B, en un principio hacerlo funcionar a 50MHz y si todo va bien pasar a 100MHz.

Me preocupa el diseño del PCB, va a ser la primera vez que haga algo a una frecuencia tan alta.
Tienes algunas recomendaciones que aun no hallas puesto en el post?
Como quedo finalmente tu osciloscopio?


ADC:http://datasheets.maximintegrated.com/en/ds/MAX1198.pdf

AL422B:http://pdf.datasheetcatalog.com/datasheet/Averlogic/mXruvvz.pdf


Por cierto Maxim hace envío de muestras gratis, tienen varios integrados interesantes.
 
Hola Sebastian bienvenido al post

Te envidio que puedas conseguir esa memoria, es ideal para este proyecto y de alta capacidad por lo que vas a poder tener muchas muestras y te va a simplificar muchisimo el diseño.

Si la memoria es de 20ns la velocidad maxima de sampling teorica de tu proyecto va a ser de 50mhz, lo cual es muy bueno igualmente. Si queres llevarlo a 100mhz vas a tener que hacer un esquema de double buffering como estoy haciendo yo, utilizando 2 de ellas x canal.

La version anterior de mi osci lleva una memoria FIFO tambien pero lamentablemente solo de 1000 muestras. Con estas memorias eliminas lo mas complicado de "cablear" que son los contadores de direccion.

Sobre tus preguntas, el diseño del PCB empieza a ser menos critico ya que tenes muchisimas menos pistas pero aun asi, aplican los conceptos de PCB de alta velocidad. Si te fijas en todo este post los compañeros han puesto unos articulos donde se explica todo lo que hay que saber, pero para resumirte:

- PCB de fibra de vidrio, doble cara aunque uses una cara entera como plano de masa. La mayor area posible de planos de masa.
- Muchos puntos de interconexion entre planos de masa de las dos caras (si haces doble faz)
- Evitar ground loops, lineas de masa que se cierren sobre si mismas.
- Tener plano de masa digital (repito, GRANDE) y plano de masa analogico separados y unidos en 1 solo punto
- Capacitores de desacople y si es posible, electroliticos asociados tambien en todos los integrados, lo mas cerca posible de ellos. Vas a leer en la bibliografia sobre los ruidos enormes que mete en la linea de masa un integrado digital al hacer switching. No queres que los ruidos generados por uno vayan a los otros y ahi es donde una linea de gnd grande y capacitores ayudan.
- Si podes pone un inductor asociado a los capacitores de alimentacion de cada integrado, formando un pasabajos. Quiza haya que calcularlo segun la fundamental del ruido
- Pistas cortas y directas, especialmente en clock
- Si tenes pistas largas entre integrados digitales, considera resistores de terminacion en las lineas a menos que el integrado "destino" tenga diodos clamp en sus entradas.

Parte analogica:

- Todo lo anterior, con el agregado muy importante de que calcules y simules el comportamiento en frecuencia de la entrada. Es decir, hay que agregar conjuntos de resistencias + capacitores que van logrando una respuesta lineal hasta la frecuencia maxima. Por no calcular esto me paso de tener amplificadores operacionales de 100mhz que atenuaban la señal a partir de 1mhz :(

Pensa mucho acerca de como vas a diseñar los siguientes puntos:

- Trigger, control de trigger, detencion de captura
- Reloj simple fijo o variable.

Dada la capacidad de tu memoria, yo haria reloj fijo a 50mhz, donde, si estas en la escala menor, graficas las muestras seguidas, una atras de otra. En la siguiente escala graficas cada 2 muestras y asi. Es como ir "reduciendo el zoom" en la señal graficada. Con esto te evitas el terrible despelote que seria tener un generador de clock multiple para los distintos dominios de tiempo. Basicamente, tu osci puede capturar a todo lo que de para luego determinar QUE mostras en pantalla segun tu escala horizontal.

Tambien tene en cuenta los rangos de voltaje de señal que quieras soportar. Mientras mas reducido (y escalado) mejor porque tendrias mejor respuesta en frecuencia en los operacionales, dado que necesitas menos V/us para lograr tus objetivos. Vale decir, si queres soportar, suponte, 100vpp, seria bueno hacer una escala que reduzca /100 de forma tal que al operacional le entre 1vpp. Si haces un /10 tendrias 10vpp en el operacional y tiene que ser capaz de subir 10 voltios en 20 ns, digamos (numeros pensados asi nomas, sin mucho criterio)

Pensa como manejar, en la parte analogica, el offset de la señal. En mi caso lo estoy haciendo con un DAC que inyecta un nivel de continua.

Trigger: Tiene que ser RAPIDO y automatico (no a traves del micro) y, segun mi criterio, me gustan mas los triggers digitales pero no se como lo tenes pensado vos.

Detencion de captura: Tambien tiene que ser rapida y podrias implementarla con un contador habilitado con trigger

Sobre tu memoria: Es DRAM, fijate bien en el datasheet si tenes un limite de tiempo antes de que los datos almacenados se borren (asi era la FIFO mia) aunque segun vi, tiene el controlador dram interno, probablemente se comporte como una SRAM.

Con que micro vas a controlar todo? Vas a transferir a la PC a traves de USB? Y el soft? Si por casualidad sabes programar Android, aqui va una idea: En mi caso, voy a tener una conexion usb a la pc, pero tambien me reserve el puerto serial del micro para hacer transferencia bluetooth al telefono, usandolo de pantalla e interfaz de entrada. Esto, sumado a que le estuve haciendo una fuente capaz de funcionar con baterias, me permite hacer un osciloscopio portatil, que ademas tiene la ventaja de estar aislado de masa con respecto al aparato a medir.

En fin, he sufrido bastante por lo que podria seguir tirando tips pero preferiria responderte preguntas concretas que puedas tener, o si tenes un diseño, que lo pongas aqui para analizarlo.

Sobre el mio, esta en pausa. Desde la ultima vez que postee se agrego un nuevo integrante a la familia :) asi que no me pude buscar el tiempo para terminarlo. Tengo un PCB diseñado de la parte de captura digital. Le falta agregarle la parte analogica (que tengo diseñada ya por suerte) y plancharlo!

Muchos exitos en tu diseño! y partis de una muy buena base que es esa memoria. Si te parece bien, postea tus avances aqui para que podamos verlos.
 
Gracias por los tips, la verdad es que gran parte de lo que dijiste ya lo había considerado pero siempre es bueno tener una segunda opinión.

En un principio tengo pensado usar un solo canal con una sola memoria para ver como se comporta de forma análoga mi circuito y encontrar problemas en general, luego tengo pensado implementar el sistema double buffering por lo que usare 4 memorias en total ya que tengo 2 canales.

Los operacionales que voy a usar serán el MAX4104, tiene un ancho de banda de 625MHz y 400V/us de slew rate (bastante seguro que es una exageración, pero son gratis por lo que no me quejo).

El micro que usare es un propeller, este micro tiene 8 núcleos de 32bits corriendo a 100MHz, con los contadores de este micro puedo generar fácilmente una señal cuadrada variable entre 1Hz y 120Mhz con una resolución de 1Hz y una exactitud tan buena como el cristal que use para el propeller, ademas estoy casi seguro que podría escribir un programa para controlar la cantidad de pulsos generados por lo que si todo va bien podría tener pleno control de la frecuencia y la cantidad de pulsos generados.

La transmisión de datos la haría por serial al computador, usando lógicamente un IC para pasar de USB a serie, probablemente un clásico FT232R a 3M baud, ademas tengo pensado agregarle un puerto ethernet con un ENC28j60, este se usaría para poder transmitir los datos por red y tener la opción de agregar mas de estos osciloscopios para tener varios mas canales a disposición dentro del mismo software.

Ademas de ser un osciloscopio tengo pensado usarlo como analizador lógico, tendría dos canales análogos o 8 entradas digitales y uno análogo o 16 entradas digitales.

Sinceramente aun no me pongo a diseñar la parte análoga, por ahora me estoy preocupando mas de la parte digital, sin embargo tengo ciertas inquietudes en la etapa de ganancia, en un principio pensé en usar al igual que tu un 74hc4052 para seleccionar las distintas ganancias pero luego leí en un foro gringo que a altas frecuencias (no especifican que tan altas) no funcionan muy bien debido a que los switch tienen una capacitancia algo elevada cuando están abiertos por lo que parte de la señal se "filtra" por todos los switch, has observado algo de esto en tus pruebas?. En cuanto al offset aun no he pensado en nada, podrías explayarte un poco en como usaste el DAC?.

El software probablemente lo haga en C# o C++, buscare algunas librerías gráficas y dependiendo de donde vea los mejores resultados veré con cual me quede.

Cuando me lleguen los componentes y tenga algunos avances los iré posteando.
 
Última edición:
Teniendo semejante micro, ¿aun te es necesario hacer tanto hard? Desconozco ese micro pero, es microcontrolador o microprocesador? Por ahi, si tiene ram interna, debe tener bastante y quiza podrias almacenar directamente en el las muestras si le da la velocidad. (conexion ADC-micro directa)

Por mi parte, leyendo la hoja de datos de la FIFO que vas a usar, me convenci y mande a pedir algunas a china. Seguramente tarden al menos 2 meses pero, con solo 2 de esas tendria los 2 canales que necesito y a 50mhz. Me ahorro muchisimo consumo y circuiteria.

Ya estuve pensando como puedo implementar el trigger con ellas, manteniendo un requerimiento mio que es disponer de una visualizacion pre-trigger.

Entonces, mi diseño hara lo siguiente:

CLK compartido para escritura y lectura, de esta forma, el puntero de direccion de la ram es igual en escritura y en lectura.

Pongo a grabar a la ram a maxima velocidad (a la vez esta habilitado el clock de lectura), siendo esta circular.

Cuando llega un trigger, detengo el clock de lectura y dejo que el clock de escritura continue durante capacidad ram / 2 muestras.

En este punto paro los clocks y el puntero de lectura esta posicionado exactamente en el momento del trigger. Entonces leo la cantidad de muestras que almacena la ram completa donde:

Primera mitad: Muestras post-trigger, Segunda mitad: Muestras pre-trigger.

Algo similar hacia en mi diseño previo pero con esta FIFO (no sabia que venian de esta capacidad y velocidad!) me saco de encima 2 PLD y reemplazo 4 chips de sram por 2 de fifo, amen de simplificar enormemente el diseño del PCB.

Te cuento que mi primer osci que funciono (el del video de mas arriba) estaba hecho con una fifo pero de tan solo 1K, y no tenia pre-trigger, es decir, funcionaba como los osciloscopios analogicos. Ahora teniendo +300K de ram, puedo simplificar el reloj tambien. (reloj unico para todo el sistema)

En la practica, osciloscopios comerciales que he usado, que tienen 512K de ram, etc.etc utilizan no mas de 10K

Muy buena data! conseguis esas memorias en Chile o las importas?

La parte analoga mia aun no la experimente, es solo diseño y simulacion. Le tengo fe, de todas maneras.
 
Atrás
Arriba