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(
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.