Módulo bluetooth serial de baja potencia con Arduino

Planeo usar el módulo bluetooth serie HC-06 con un Arduino Leonardo. Que yo sepa, los pines seriales de Arduino tienen una salida de 5V con 40mA de corriente. La hoja de datos del HC-06 dice que aceptará entradas de 3V - 4.2V con 20mA - 40mA de corriente. Soy más programador que ingeniero eléctrico, pero esto me dice que necesitaré una resistencia entre el pin TX del Arduino y el pin RX del HC-06. De mis cálculos necesitaré una resistencia con 82.5 Ohms de resistencia:

r = V I = 3.3 V 0.04 A = 82.5 Ω

¿Es esta la forma correcta de resolver el problema? En línea, he visto a personas resolver exactamente el mismo problema usando un divisor de voltaje con una resistencia de 10 kOhm que va desde el pin TX de Arduino al pin RX del HC-06 y una resistencia de 20 kOhm que va desde el pin RX del HC-06 a tierra. Entonces, ¿cuál es la forma correcta de resolver este problema? Si un divisor de tensión es la solución, ¿por qué y cómo funciona? ¿O por qué no funciona simplemente poner una resistencia de 82,5 ohmios?

EDITAR: En aras de la simplicidad, permítanme reiterar mi pregunta desde una perspectiva más general. El módulo HC-06 requiere un voltaje de fuente de alimentación de 3,3 V (que puede provenir del pin de 3,3 V de Arduino) y también solo aceptará entradas lógicas a 3,3 V. Entonces, ¿cuál es una manera fácil de lograr esta reducción de voltaje para el cable serial?

Con sus 82,5 ohmios en serie, eso se basa en la suposición de que siempre y solo habrá un flujo de 40 mA. Si el módulo Bluetooth, por alguna razón, consume menos corriente, entonces el voltaje caído a través de esa resistencia cambiará (disminuirá). Esto hará que aumente el voltaje visto por el módulo Bluetooth, lo que podría violar sus límites de entrada.
Las hojas de datos de calidad de ingeniería para este módulo parecen difíciles de encontrar, pero parece que "20-40 ma" es la corriente de la fuente de alimentación . Es probable que las entradas de datos sean CMOS, una fuente afirma "CMOS con un menú desplegable débil"
@Cornelius He editado la publicación para ser más específico a la situación y más claro en cuanto a lo que estoy tratando de lograr
Entendemos lo que está tratando de hacer, no es su culpa. Alguien acaba de vengarse de cualquier respuesta a esta pregunta.
No, solo contra la publicación de respuestas incorrectas . Pero ahora tenemos uno correcto que muestra una comprensión real de los problemas involucrados.

Respuestas (3)

Hay dos conjuntos principales de características citadas para pines, clasificaciones máximas absolutas y clasificaciones típicas.

La hoja de datos del HC-06 dice que aceptará entrada a 3V - 4.2V con 20mA - 40mA

Esas son calificaciones absolutas. El pin está clasificado para manejar 3V a 4.2V y 20mA - 40mA de corriente. En un circuito normal, los pines de entrada digital consumirán muy poca corriente, ya que son puertas lógicas CMOS. Puede haber una resistencia pull-up, que conecta el pin internamente a Vcc, o una resistencia pull-down, que conecta el pin internamente a GND, lo que aumentará el consumo de corriente.

Sin la resistencia pull-up o pull-down habilitada, el pin tiene una impedancia de entrada muy alta. Su circuito de resistencia propuesto se ve así:

esquemático

simular este circuito : esquema creado con CircuitLab

Efectivamente, tiene un divisor de voltaje y la otra resistencia es la impedancia de entrada del pin de entrada HC-06.

Entonces, el voltaje en el pin RX con 5V en el pin Arduino TX sería:

V R X = 5 V R r mi a yo yo y r mi a yo yo y b i gramo R yo i norte mi + R r mi a yo yo y r mi a yo yo y b i gramo 5 V

Esto está fuera de la clasificación de voltaje máximo.

Solución

La solución es usar algún tipo de palanca de cambios de nivel. Las resistencias en el divisor deben ser lo suficientemente altas como para no violar la salida de corriente máxima de Arduino y mucho menos que la impedancia de entrada del pin de entrada. También deben ser lo suficientemente bajos como para que la capacitancia de entrada del pin no "difumine" demasiado la señal (velocidad de respuesta). Puede pensar que la capacitancia resiste el cambio de voltaje, por lo que las entradas bruscas comienzan a redondearse: (imagen tomada de http://www.johnloomis.org )

ingrese la descripción de la imagen aquí

Para las cifras citadas tendríamos:

V R X = 5 V ( 1 20 k + 1 R r mi a yo yo y r mi a yo yo y b i gramo ) 1 10 k + ( 1 20 k + 1 R r mi a yo yo y r mi a yo yo y b i gramo ) 1 5 V 20 k 10 k + 20 k 3.3 V

En la tierra de Arduino, la gente usaría una placa de cambio de nivel lógico para este propósito. Uno común tiene un divisor de voltaje para 5V TX a 3.3V RX y un transistor para 3.3V TX a 5V RX. Otros tienen transistores en ambos sentidos, por lo que los voltajes pueden ser diferentes de 5V y 3.3V, ya que al usar un divisor de voltaje, la relación es fija, y para tener una impedancia de salida muy baja en los pines TX y así evitar problemas de velocidad de respuesta.

ingrese la descripción de la imagen aquí

Si bien un divisor de resistencia reducirá el voltaje a los niveles adecuados, es ineficiente para las comunicaciones en serie o cualquier señal que cambie rápidamente. Las resistencias no solo cambian la relación entre el voltaje y la corriente, sino que también agregan una velocidad de respuesta más larga a la señal cambiante, lo que significa que la señal tardará más en llegar a su nivel lógico ALTO. Esto planteará un problema con UART.

Una mejor solución es usar un convertidor de nivel lógico, particularmente uno que esté hecho para manejar protocolos de comunicación. Le dará a este dispositivo 3.3V y 5V, así como las señales que indica la documentación. El Leonardo tiene un pin de 3.3V, creo, así que deberías estar bien.

¡Buena suerte!

NO Esto es erróneo ya que solo perpetúa el malentendido del autor original de la diferencia entre una calificación actual y el flujo real actual en el uso típico. No se usa una sola resistencia, sino un divisor resistivo. Para las impedancias de entrada del mundo real, el cableado corto y las tasas de baudios en serie que tendría sentido usar cuando se realiza un proxy a través de bluetooth, tiende a funcionar bastante bien.
@ChrisStratton La pregunta no se trata de calificaciones máximas absolutas y características operativas. Se trata de hacer que la cosa funcione de manera correcta. Agregué una aclaración para la primera declaración de que necesitaría un divisor de resistencia, aunque aparte de eso, no veo cómo nada de lo que dijo refuta la respuesta que le di a la pregunta.
"Mientras que un divisor de resistencia bajará el voltaje a los niveles adecuados a 40 mA, esto podría ser un problema si el HC-06 tira algo menos de 40 mA" GRASAMENTE EQUIVOCADO . Realmente necesitas dejar de publicar respuestas rápidas e incorrectas.
@ChrisStratton Muy bien arreglado. auge, a la derecha
Que se sepa que la respuesta real a la pregunta siempre ha sido correcta. Chris solo está corrigiendo los errores en el material relacionado que había escrito con respecto a las resistencias.
No, la respuesta es, y sigue estando equivocada en sus conclusiones re resistivas a los divisores. Los divisores resistivos se usan comúnmente para la conversión de nivel en entornos como este. Es posible que sea necesario aplicarlos con cuidado, pero se hace con frecuencia y de manera adecuada.
@ChrisStratton Estoy empezando a pensar que eres incapaz de publicar algo que no use texto en negrita. De cualquier manera, los divisores de resistencia introducen una velocidad de giro que puede ser problemática a medida que aumentan las velocidades. Independientemente de que he terminado con esto. Si quiere asegurarse de que la respuesta sea correcta criticándose todo, responda usted mismo en lugar de molestar a otra respuesta que presente una solución buena y adecuada.

La solución más sencilla es un divisor resistivo para bajar el voltaje de 5V a 3,3 V, pero no puedes subir 3,3 V a 5V sin un transistor. Probablemente, no habrá ningún problema, porque Arduino detectará la entrada de 3,3 V como entrada ALTA, y puede obtener un circuito que funcione solo con un divisor resistivo en la línea Arduino TX - HC-06 RX.

La mejor solución sería un cambiador de nivel. Puede construir cambiadores de nivel de transistor como https://electronics.stackexchange.com/a/107388/40609 . O más simple, use el 74LVC245 IC.

Si un divisor de tensión es la solución, ¿por qué y cómo funciona? ¿O por qué no funciona simplemente poner una resistencia de 82,5 ohmios?

Deberías leer Divisor de voltaje vs. Resistencia en serie