Módulo de Bluetooth serie de baja potencia con Arduino

3

Planeo usar el módulo de Bluetooth serie HC-06 con un Arduino Leonardo. Que yo sepa, los pines serie de Arduino tienen una salida de 5 V con 40 mA de corriente. La hoja de datos del HC-06 dice que aceptará la entrada a 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 = \ frac {V} {I} = \ frac {3.3V} {0.04A} = 82.5 \ Omega $$

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

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

    
pregunta Parker Hoyes

3 respuestas

2

Hay dos conjuntos principales de características citadas para los pines: calificaciones máximas absolutas y calificaciones típicas.

  

La hoja de datos del HC-06 dice que aceptará entradas 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 de pull-up, que conecta el pin internamente a Vcc, o una resistencia de pull-down, que conecta el pin internamente a GND, lo que aumentará el consumo actual.

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

simular este circuito : esquema creado usando CircuitLab

Usted tiene efectivamente un divisor de voltaje con la otra resistencia que es la impedancia de entrada del pin de entrada HC-06.

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

$$ V_ {RX} = 5V \ frac {R_ {really \, really \, big}} {R_ {line} + R_ {really \, really \, big}} \ approx 5V $$

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

Solución

La solución es usar algún tipo de cambio de nivel. Las resistencias en el divisor deben ser lo suficientemente altas 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 "manche" la señal demasiado (velocidad de giro). Puede pensar que la capacitancia resiste el cambio de voltaje, por lo que las entradas nítidas comienzan a redondearse: (imagen tomada de enlace )

Paralascifrascitadastendríamos:

$$V_{RX}=5V\frac{\left(\frac{1}{20K}+\frac{1}{R_{really\,really\,big}}\right)^{-1}}{10K+\left(\frac{1}{20K}+\frac{1}{R_{really\,really\,big}}\right)^{-1}}\approx5V\frac{20K}{10K+20K}\approx3.3V$$

EnlatierradeArduino,lagenteloharíaconuntablerodecambiodenivellógicoparaestepropósito.Unocomúntieneundivisordevoltajepara5VTXa3.3VRX,yuntransistorpara3.3VTXa5VRX.Otrostienentransistoresenambossentidos,porloquelosvoltajespuedenserdiferentesde5Vy3.3V,yaquealusarundivisordevoltaje,larelaciónesfija,yparatenerefectivamenteunaimpedanciadesalidamuybajaenlospinesTXyasíevitarproblemasdetasadecambio.p>

    
respondido por el geometrikal
1

Si bien un divisor de resistencia empujará el voltaje hacia abajo a los niveles adecuados, es ineficiente para las comunicaciones en serie o cualquier señal que cambie rápidamente. Los resistores no solo cambian la relación entre el voltaje y la corriente, sino que también agregan una mayor velocidad de giro a la señal cambiante, lo que significa que en realidad tomará más tiempo para que la señal alcance 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 se hace para manejar los protocolos de comunicación. Le dará a este dispositivo un 3.3V y un 5V, así como las señales indicadas en la documentación. El Leonardo tiene un pin de 3.3V, creo que deberías estar bien.

¡Buena suerte!

    
respondido por el Funkyguy
0

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

La mejor solución sería un cambio de nivel. Puede crear desplazadores de nivel de transistor como enlace . O más sencillo, utilice el 74LVC245

  

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

Debería leer Divisor de voltaje vs. Resistor en serie

    
respondido por el Cornelius

Lea otras preguntas en las etiquetas