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:
¿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?
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í:
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:
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 )
Para las cifras citadas tendríamos:
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.
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!
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
Adán cabeza
chris stratton
parker hoyes
chico funky
chris stratton