¿Cómo puedo saber si estoy a salvo de quemar mi robot con más voltaje?

Tengo un robot animatrónico Wowwee con el que he estado jugando, con el objetivo de conectar mi arduino para poder controlarlo desde mi computadora.

El problema es que, usando un multímetro, probé que el voltaje en las líneas/pines de control del robot es de 3.3v; pero el arduino genera 5v a través de sus pines.

¿Conectar el arduino y usar sus pines de 5v dañará el robot? Y, al darme cuenta de que esto es probablemente subjetivo a la electrónica específica del robot, ¿hay alguna manera de que pueda probar/ver/analizar si estaría bien usar una señal digital de 5v en sus líneas?

De lo contrario, he estado investigando la viabilidad de simplemente colocar una resistencia en cada uno de los pines de salida del arduino para reducir el voltaje a alrededor de 3.3v (aunque no estoy seguro de si podría necesitar una solución más profunda, ya que eso "corrompería" la señal digital?).

Respuestas (3)

Salidas Arduino

Algunos controladores tienen entradas "tolerantes a 5 V", por lo que puede proporcionar 5 V desde su Arduino y el robot registrará una lógica alta y no se verá afectado negativamente por la señal de sobretensión. No estoy seguro si el robot tiene esta función; probablemente tendrá que consultar la hoja de datos del microcontrolador en el robot. Si no tiene esta característica, sí, puede salirse con la suya con un convertidor de 5V -> 3.3V usando un divisor de voltaje.

Necesita dos resistencias en cada pin de salida, en esta configuración:

ingrese la descripción de la imagen aquí

V i norte es su señal de 5V del Arduino, V o tu t debe ser de 3,3 V o menos. Estos voltajes están relacionados por la ecuación:

V o tu t = V i norte R 2 R 1 + R 2

Sugiero que podrías usar R 2 = 33   k Ω y R 1 = 22   k Ω para una salida segura de 3V. Otras combinaciones, o resistencias de mayor tolerancia, podrían acercarlo a 3,3 V o reducir la energía que consumen estas resistencias, pero eso probablemente no sea necesario.

Entradas Arduino

No estoy seguro de cuál es la interfaz en ese robot (ya que no proporcionó una hoja de datos o un esquema), pero supongo que habrá algunas señales emitidas por el robot y utilizadas como entradas para el Arduino .

Las salidas del robot serán de 3,3 V o menos, mientras que el Arduino (de acuerdo con la tabla de "Características de CC" en la hoja de datos de ATmega) espera que la siguiente desigualdad se mantenga para el alto voltaje de entrada V I H :

V C C + 0.5 >= V I H >= 0.6 V C C

Prácticamente, esta desigualdad significa que su Arduino requiere entradas mínimas de 3V antes de registrar una señal lógica alta. El controlador del robot puede cumplir estos requisitos o no. (Tenga en cuenta que el bus I2C requiere 0.7 V C C , o 3,5 V, lo que no sucederá).

Por ejemplo, un Arduino de 3,3 V solo puede proporcionar ~2,4 V como lógica alta. No puede conectar un Arduino de 3,3 V a un Arduino de 5 V. El Arduino de 5 V ignoraría 2,4 V en un pin de entrada.

Qué hacer

En primer lugar, busque y lea las hojas de datos de los controladores de su robot y Arduino. La hoja de datos del ATmega32 de Arduino está aquí .

Si el controlador del robot tolera entradas de 5 V y proporciona salidas de 3 V o más, entonces está listo para comenzar.

De lo contrario, necesita un circuito de cambio de nivel o traducción de nivel. Esto se puede crear a partir de elementos discretos como resistencias y transistores (especialmente fácil en la dirección 5V -> 3.3V), de traductores de nivel genérico como el 74ALVC , o de traductores específicos de protocolo como el PCA9306 para I2C.

Como alternativa, utilice un microcontrolador que funcione a 3,3 V. Sparkfun vende una placa "Arduino Pro" de 3,3 V, o PJRC ofrece una Teensy de 3,3 V. Si está dispuesto a alejarse del mundo Arduino, hay muchos procesadores que funcionan a 3,3 V.

Información fantástica y detallada; muy apreciado.

Lo mejor sería buscar en la hoja de datos del robot. Debe decir cuáles son los niveles de entrada altos lógicos mínimos y máximos. Por ejemplo, algunos sistemas de 3,3 V tienen entradas "tolerantes a 5 V". Sin embargo, sin ningún dato definitivo, debe asumir que no puede manejar más de los 3.3V que está emitiendo.

No, una sola resistencia no es suficiente ya que aparentemente no tiene una especificación de consumo de corriente mínima garantizada para una entrada digital en lógica alta. Por lo tanto, no puede saber cuánto voltaje caerá una resistencia de una sola serie. Lo que necesita son dos resistencias en una configuración de divisor de voltaje. 3,3 V está cerca de 2/3 de 5 V, por lo que 1 kΩ en serie seguido de 2 kΩ a tierra debería ser suficiente. El divisor de resistencia extraerá 5V / 3 kΩ = 1,7 mA de la salida de arduino. Espero que esté dentro de sus capacidades, pero eso es para que usted lo compruebe.

Ahh, genial saberlo; esto ayuda a comprender mejor la respuesta a continuación que he estado tratando de razonar teóricamente. Excelente, gracias por las prontas respuestas! Comienzo mi viaje digital en busca de la hoja de datos ilusoria :)
PD: ¿algún motivo por el que mis líneas/párrafos no estén espaciados correctamente? Soy nuevo aquí, pero después de leer la información de Markdown, ¿no debería un doble espacio al final de una línea espaciar una nueva línea? ¿Tengo que habilitar el uso de Markdown en alguna parte?
@Coldblackice: los comentarios son para respuestas cortas; no admiten saltos de línea. El Markdown que está habilitado para los comentarios es solo un pequeño subconjunto de las capacidades completas: tiene [link](http://example.com), _italic_, **bold**, and `code`. Consulte el formato de comentario para obtener más información.

¿Qué robot Wowee tienes?
Hay un número significativo y su circuito interno puede variar.

Aquí hay un video y una página sobre la interfaz con el robot Woweee Elvis : parece útil.

También un video aquí

No hay certeza de que una señal de 5V se pueda usar en un sistema de 3V3 y puede causar daños. Puede convertir de 5V a 3V3 con un divisor de dos resistencias.
R1 de Arduino a pin Wowee.
R2 del pin de entrada Wowee a tierra.
Caídas R1 (5-3.3) = 1.7V.
R2 cae 3.3V, suponiendo que la resistencia de entrada de Arduino sea alta (que probablemente lo sea.
R1: R2 = 1.7: 3.3 ~= 1.65: 3.3 = 1: 2.

Entonces, si R1 es un poco más que R2/2, los 5V se dividirán en algo menos de 5V. p.ej

1k2 : 2k2. Vsalida = 5 x 2,2 / (1,2 + 2,2) = 3,24 V. Igual 12k:22K 1k5:2k7 = 3.21V igual 15k:27K. etc.

Si usa resistencias al 1%, probablemente estará lo suficientemente cerca de estos valores.

Resistencia única:

El uso de una sola resistencia de entrada probablemente no funcionará. Dos resistencias comparten una corriente común y, por lo tanto, comparten el voltaje total en proporción a sus resistencias de acuerdo con la ley de Ohm.

  • V = yo x R.

PERO si el Arduino ADC tiene una resistencia de entrada infinita (o muy alta), entonces la resistencia muy alta representará la mayor parte de la resistencia, así como la caída de la mayor parte del voltaje. Como no sabemos cuál es la resistencia de entrada del ADC de Aruino, se supone que es "alta", ya que ese es el objetivo normal de un ADC, y lo "inundamos" con un divisor de bajo voltaje. El voltaje DIVIDE el voltaje en la proporción de los voltajes. Una sola resistencia no es un DIVISOR, por lo que no sirve de nada.

Ejemplo de agua: si aplica 100 psi en un extremo de una tubería de agua de 100 metros y tapa el otro extremo, si no hay flujo, la presión en el otro extremo AÚN será de 100 psi, independientemente de si la tubería es de 0,5" o 3 " o 12 " de diámetro. PERO si permite el flujo de corriente, se producirá una caída de presión. El flujo de corriente de agua a través de la resistencia de la tubería provoca una caída de presión de agua. Aquí, el flujo de corriente provoca una caída de voltaje. Si el flujo es tal que, digamos, se produce una caída de 50 psi en entonces la mitad del camino a lo largo de la caída será de aproximadamente 25 psi y el 20% del camino a lo largo será de aproximadamente 5 psi

Página de Elvis : ¿enlaces aquí ?

Gracias por la info. Es el Elvis que tengo. ¿Por qué necesitarías dos resistencias, por curiosidad? ¿La primera resistencia de arduino -> Elvis no se encargaría de todo el trabajo, reduciendo el voltaje a 3.3v? ¿Para qué se necesitaría otra resistencia a tierra? Y aunque la matemática de su explicación fue fácil de seguir, mi oxidación electrónica se perdió en el "qué/por qué". ¿Cuál es el razonamiento de las proporciones entre las resistencias? Gracias por la ayuda. Por cierto, en cuanto a los dos artículos de Elvis vinculados anteriormente, ¿les falta información? ¿Estabas comentando que parecen haber sido truncados?
@Coldblackice: vea la adición al final de la respuesta.