Logic Analyzer muestra el cambio de voltaje en analógico pero no digital

2

Mientras utilizo un analizador lógico con voltaje analógico para probar los voltajes de los pines de salida digital en un Arduino UNO, veo la salida digital y la salida analógica esperadas (ALTAS y BAJAS para digital y de 5V a aproximadamente 0V para analógica).

Estoy usando una lógica 4 de Saleae para probar la salida digital de un Arduino y un Arduino compatible (Ruggeduino) para una salida digital simple. El Arduino parece ejecutar mi boceto muy bien y el Saleae puede leer mi pin de salida como digital y analógico. Sin embargo, en el momento en que suelto el "Ruggeduino" con el mismo boceto, mi salida digital parece no funcionar, y cuando tomo otra muestra con el Saleae, mi voltaje "analógico" muestra los altos y bajos voltajes en los que estoy Esperando, pero la salida "Digital" está sospechosamente en blanco.

¿Por qué mi analizador lógico muestra la salida digital y analógica esperada al probar el Arduino Uno, pero muestra un "Alto" constante para la salida digital pero tanto el voltaje alto como el bajo en la salida analógica cuando se prueba el Ruggeduino?

Información adicional: Dispositivos utilizados:

Editar: No estoy satisfecho con solo sentarme y esperar a que alguien responda, hice más excavaciones. Esto es lo que descubrí:

  • La lógica aparece "Alta" a pesar del cambio en el voltaje, ya que parece que está atascada Alta
  • El voltaje analógico de "Bajo" para los pines de salida parece ser 1.586V, que cae fuera del rango de TTL "BAJO" (y probablemente la causa del nivel lógico "atascado")
  • Esto solo sucede cuando los pines están conectados a los pines de entrada descendentes que solo deben escuchar la salida digital. Una vez que retire los pines de la ecuación, el voltaje "BAJO" vuelve a caer justo por encima de 0V.

Actualmente no tengo una captura de pantalla útil para cargar, pero puedo subir mi boceto para mostrar lo que estoy intentando hacer:

void writeWiegand(String);
int outZeroPin = 6;
int outOnePin = 7;
int led = 13;


void setup() {
  pinMode(outZeroPin, OUTPUT);
  digitalWrite(outZeroPin, HIGH);
  pinMode(outOnePin, OUTPUT);
  digitalWrite(outOnePin, HIGH);
  Serial.begin(9600);
  delay(1000);

}


void loop() {
  String code = "0001001001100101100000001011010010";
  writeWiegand(code);
  delay(500);


}

void writeWiegand(String code) {
  for (int i = 0; i <= (code.length() - 1); i++) {

    if (code.charAt(i) == '0') {
      digitalWrite(outZeroPin, LOW);
      //delayMicroseconds(100);
      delay(100);
      digitalWrite(outZeroPin, HIGH);
      Serial.print(code.charAt(i));
    } else {
      digitalWrite(outOnePin, LOW);
      //delayMicroseconds(100);
      delay(100);
      digitalWrite(outOnePin, HIGH);
      Serial.print(code.charAt(i));
    }
    //delayMicroseconds(100);
    delay(100);
  }
  digitalWrite(led, LOW);
  Serial.println(" Output to Wiegand");
}

Edición 2: El dispositivo descendente es un Panel de control de acceso patentado, y los pines de entrada son los pines que se utilizan para la comunicación Wiegand con un lector de tarjetas. Dado que es de propiedad exclusiva, no estoy seguro de lo que legalmente puedo compartir. Según el fabricante, los dos pines de entrada emiten 5 V, que el lector debe tirar a tierra para enviar información a través del cable "Cero" o "Uno". El UNO R3 funciona bien para esta tarea con el mismo código anterior. Cuando acabo de bajar con el Ruggeduino, aún quedan 1.586 V, lo que me parece confuso.

    

1 respuesta

4
  

Dado que es de propiedad exclusiva, no estoy seguro de lo que legalmente puedo compartir. Según el fabricante, los dos pines de entrada emiten 5 V, que el lector debe tirar a tierra para enviar información a través del cable "Cero" o "Uno".

I sospecho que tienen una resistencia de pull-up fuerte (es decir, de bajo valor) a +5 V en estos pines de "entrada", y eso es suficiente para causar una caída de voltaje significativa en los 220 Ω Resistencia de protección de entrada PTC en el Ruggeduino-SE, cuando la MCU intenta extraer ese pin de E / S bajo.

Componentes de protección de pin de E / S Ruggeduino:

Fuente: enlace

Un cálculo rápido es que un pull-up de 470 + a +5 V en el dispositivo, junto con la resistencia PTC de protección de entrada de 220 on en el Ruggeduino-SE, daría como resultado aprox. 1.5 V en el "terminal conector" Ruggeduino-SE real en el diagrama anterior, cuando la MCU (es decir, "Pin del microcontrolador" en el diagrama anterior) intenta bajar ese pin a 0 V.

Para probar esta hipótesis, cortocircuite temporalmente (es decir, puentea) la resistencia de 220 para uno de los pines de salida que está utilizando en el Ruggeduino. Eso conectará directamente el pin MCU, al terminal de conexión de salida. Vea si el voltaje medido en la conexión de salida luego cae a aprox. 0 V para salida lógica 0, cuando está conectado a esta entrada patentada del Panel de control de acceso.

Según esta página de Ruggeduino-SE :

"Si tiene una aplicación donde no se desea esta resistencia de 220 ohmios incorporada, puede cambiarla fácilmente. Cada pin de E / S tiene pasadores de orificio pasante que rodean su fusible PTC que se puede puentear con un cable para resistencia de 0 o con una resistencia estándar. Aquí hay una imagen que muestra cómo evitar el PTC de 220 ohmios para el pin D7 ".

[Seactualizóparareferirsealaresistenciade220resistcomounaresistenciadePTCde220,comosedescribeenelRuggeduino-SEsegúnlapáginaenlazadaenlapreguntaoriginal.]

Despuésdeunpocodeinvestigación,parecequelosdispositivosqueutilizanlainterfazWiegandsuelentenersalidasdecolectorabierto;tenerunaresistenciadepull-upaalgúnvoltaje,normalmenteeneldispositivodeentrada(queseajustaalahipótesisanterior);elvoltajeparalasresistenciasdepull-upesaveces+5V,peroavecesmásalto.

Soluciónpotencial

Senecesitaríamásinvestigación(aunquefueradelalcancedeestarespuestaespecífica),peroenbasealoqueheleído,simplementeagregaríacontroladoresdecolectorabierto(BJTNPNoMOSFETCanalN)alasdossalidasdeRuggeduino(esdecir,lospines"Terminal de conector") utilizados para las salidas de la interfaz Wiegand.

De esa manera, las resistencias PTC de 220 en el Ruggeduino no están en la ruta de corriente externa, y por lo tanto ya no formarían un divisor potencial con la resistencia de pull-up en el dispositivo externo. El uso de controladores de colector abierto de esta manera permitiría que las salidas alcanzaran (cerca de) 0 V, y así resolvería el problema declarado originalmente.

Nota: Agregar controladores de colector abierto tendría el efecto secundario de invertir la polaridad de la salida de la MCU, es decir,

  • MCU pin alto = controlador de colector abierto "on" = salida de colector abierto bajo
    (la salida del colector abierto se desplaza activamente hacia 0 V)
  • Pin de MCU bajo = controlador de colector abierto "off" = salida de colector abierto efectivamente alto
    (la salida no está activa y la resistencia externa la levanta)

Este comportamiento debería considerarse en el firmware de MCU.

    
respondido por el SamGibson

Lea otras preguntas en las etiquetas