Noisy Logic Level Converter para tarjeta SD

0

He diseñado un escudo Arduino que está diseñado para colocarse en el campo y registrar datos de un sensor que luego guarda en una tarjeta SD. Para registrar estos datos, debo convertir 5v SPI a 3v3, por supuesto, así que diseñé en un TXB0104 ( hoja de datos ) convertidor de nivel lógico de 4 bits.

Este convertidor de nivel lógico genera señales extremadamente ruidosas que solo llegan hasta ~ 2v, con una cantidad extrema de ruido entre 1v y 2v. Este ruido ocurre tanto cuando se inserta la tarjeta SD como cuando no lo está. Aquí hay una captura de osciloscopio de una de las líneas de datos:

Aquíhayunaimagendelaplaca(R1noesnecesario,porcierto):

Yunaimagendelesquema:
(Losiento,estátanlleno,tengolaedicióngratuitadeEagle.Nopuedohacervariashojas).

Elregulador3v3( hoja de datos ) no parece estar desapareciendo. Está clasificado para 800 mA.

Otra posible fuente de error que creo que está bien es el IC ( hoja de datos ) para cambiar la El regulador 3v3 está encendido (funciona con batería, por lo que se trata de conservar la vida útil de la batería mientras está apagado). El interruptor de alimentación está clasificado para 2A.

Un error que cometí al diseñar el tablero es que no hay tapas de desacoplamiento 3v3 extremadamente cerca del IC del traductor de nivel lógico. Sin embargo, C1 (0.1 uF) está en la línea 3v3 y muy cerca de la salida del regulador 3v3 hay un electrolítico de 100 uF, así que no creo que ese sea el problema principal.

El código que usé para probar la tarjeta SD es el siguiente:

#include <SPI.h>       // For SPI communication to the SD card
#include <SD.h>        // For interfacing with the SD card

//********************* PIN DEFINES *********************************

#define V_BATT        A0      /* Battery Voltage Detection */
#define CURRENT       A1      /* Motor current measurement pin */
#define LLS_EN        A2      /* Logic level shifter enable */
#define GREEN_LED     A3      /* successful startup */
#define RED_LED       A4      /* Error */

#define XBEE_TX       0  
#define XBEE_RX       1  
#define ENC_2         2  
#define ENC_1         3  
#define CARD_DETECT   4  
#define MOTOR_EN      5  
#define MOTOR_DIR     6  
#define MOTOR_PWM     7  
#define REG_3v3_EN    8  
#define REF_4096_EN   9  
#define SD_CS         10 
#define SD_MOSI       11 
#define SD_MISO       12 
#define SD_SCLK       13 

void setup() {
    Serial.begin(9600);

    pinMode(GREEN_LED, OUTPUT); // GREEN LED
    pinMode(RED_LED, OUTPUT);   // RED LED

    pinMode(CARD_DETECT, INPUT);
    pinMode(REG_3v3_EN, OUTPUT);
    pinMode(REF_4096_EN, OUTPUT);
    pinMode(LLS_EN, OUTPUT);
    pinMode(SD_CS, OUTPUT);
    pinMode(SD_MOSI, OUTPUT);
    pinMode(SD_MISO, INPUT);
    pinMode(SD_SCLK, OUTPUT);

    analogReference(EXTERNAL);
    delay(100);
    digitalWrite(REG_3v3_EN, HIGH);  // Turn on SD and misc 3v3 stuff
    digitalWrite(REF_4096_EN, HIGH); // Turn on 4.096v ref
    delay(250);
    digitalWrite(LLS_EN, HIGH);      // Turn on logic level shifter
    delay(500);                      // wait for everything to settle

    if(digitalRead(CARD_DETECT) == LOW) { 
        if(!SD.begin(SD_CS)) {
            // Error, could not initialize SD card. Flash Red LED
            Serial.println("ERROR: Couldn't initialize SD card.");
            while(1) {
              delay(125);
              digitalWrite(RED_LED, HIGH);
              delay(125);
              digitalWrite(RED_LED, LOW);
            }
        }
        else {
          Serial.println("Success");
        }
    }
    else {
      Serial.println("ERROR: No card inserted");
      while(1) {
        delay(500);
        digitalWrite(RED_LED, HIGH);
        delay(500);
        digitalWrite(RED_LED, LOW);
      }
    }
    while(1) {
        digitalWrite(GREEN_LED, HIGH);
        delay(1000);
        digitalWrite(GREEN_LED, LOW);
        delay(1000);
    }
}

¡Cualquier idea es apreciada! Volveré a publicar con actualizaciones si hago más progreso.

    
pregunta TylerH

2 respuestas

2

Aparece que la línea de habilitación del TXB0104 no está configurada adecuadamente. Por favor, verifique que tenga esta configuración, ya que se llama la hoja de datos.

    
respondido por el beeedy
1

Parece razonable.

Le sugiero que escriba un código de prueba para establecer específicamente los pines en la interfaz a nivel alto-bajo y tri-state para ver qué está sucediendo.

Es difícil diagnosticar cuando tienes una secuencia compleja en progreso, como inicializar la tarjeta SD.

    
respondido por el Kevin White

Lea otras preguntas en las etiquetas