¿Cómo controlar la velocidad de un motor de 12V DC con un Arduino?

Estoy tratando de averiguar cómo controlar la velocidad de un motor de CC de 12 V con un arduino y una batería de 12 V.

Quiero dividir las partes de "potencia" y "control" del circuito para que el Arduino y los sensores reciban solo 5V.

Hasta ahora, esto es lo que he probado:

ingrese la descripción de la imagen aquí

Puedo controlar la velocidad del motor cambiando el PWM del pin 3 en el Arduino. Esto abre el transistor NPN ( BUF654 ).

El problema es que la velocidad del motor no cambia lo suficiente.

De 0% a 50% PWM en el pin 3, el motor se detiene.

Por encima del 50%, el motor está casi alcanzando su velocidad máxima.

Me pregunto si sería capaz de tener una variación lineal:

0% - 10% : very slow
10% - 20% : slow
20% - 50% : normal speed
50% - 80% : fast
80% - 100% : RELEASE THE KRAKEN!

Estos son el voltaje y la corriente que consume el motor cuando usa solo una batería o el circuito anterior:

+----------------------------+---------+--------+
| Directly on 12V battery    | 12.7 V  | 61 mA  |
+----------------------------+---------+--------+
| Arduino circuit (100% PWM) | 12.47 V | 60 mA  |
+----------------------------+---------+--------+
| Directly on 9V battery     | 9 V     | 54 mA  |
+----------------------------+---------+--------+
| Arduino circuit (60% PWM)  | 9 V     | 52 mA  |
+----------------------------+---------+--------+

¿Qué he hecho mal? ¿El problema puede provenir de mi motor?

¿Ese diodo está conectado a través del transistor?
Sí, lo es. Evita dañar los componentes cuando el motor se detiene (la corriente se invierte).
¿Hay alguna ventaja específica en usar este transistor en lugar del clásico L293D?
Soy bastante nuevo en transistores y no conozco los «clásicos». ¿Alguna razón para usar el L293D?
Diodos de sujeción incorporados, capacidad de invertir la dirección. No sé si BUF654 es una buena o mala elección para esto. Pero la hoja de datos L293D muestra específicamente las bobinas de los motores impulsores como la aplicación principal, mientras que la hoja de datos BUF654 no lo hace.
Solo un recordatorio amistoso. Aunque su pregunta fue bien recibida aquí, hubiera sido aún mejor si hubiera publicado un diagrama esquemático adecuado de su circuito, en lugar de un diagrama de cableado de Fritzing. Aquí hay algunas reglas y pautas para dibujar buenos esquemas y buenas herramientas para dibujar esquemas .

Respuestas (3)

Su diodo está en la posición incorrecta: debe estar a través del motor (¡bloqueando!) No a través del transistor.

El propósito del diodo es permitir que la corriente que fluye en la bobina del motor continúe fluyendo en la misma dirección cuando el transistor se apaga. Cuando el transistor se apaga, el voltaje en el colector del transistor aumentará a medida que salía del motor. De V C mi ( S A T ) se elevará por encima del voltaje de la fuente de alimentación y se detendrá solo cuando el transistor se rompa (o cuando comience a sonar con capacitancia parásita). Al colocar un diodo del colector del transistor en el riel de +12 V, evita que el voltaje en el transistor exceda los 12 V y permite que la corriente del motor continúe fluyendo.

De la forma en que tiene el diodo en su imagen, solo conduciría si el voltaje fuera bajo tierra. Eso solo podría suceder si alguien hiciera girar mecánicamente el motor muy rápido en la dirección inversa (y su diodo haría que el voltaje en el riel de 12V aumentara como resultado).

No veo por qué debería estar al otro lado del motor, ya que se supone que debe girar en ambas direcciones (usando un interruptor DPDT DESPUÉS del transistor). Muchos tutoriales que he leído usan el diodo junto al transistor para evitar daños a los componentes. Si me perdí algo, ¿puedes explicarlo por favor?
Bien, debería estar al otro lado de donde está el motor AHORA. No tenemos forma de saber lo que podrías tener en mente. Si agrega un interruptor DPDT, sería a través de los terminales comunes del interruptor (o, más simplemente, desde el colector del transistor hasta el riel +12).
Entiendo tu punto, pero no entiendo por qué cambiaría algo. La única diferencia en este caso es que evita que la corriente fluya a través del transistor cuando se invierte. Si coloco el diodo a través del motor (o el interruptor DPDT en mi caso), ¿podría eso romper el transistor si fluye demasiada corriente hacia atrás?
Gracias por tu edición, es mucho más claro ahora :) Lo intentaré. Creo que no entendí bien el propósito de esta pequeña cosa.
No, protegerá el transistor. La corriente que debería fluir a través de su motor (creando par) se desperdicia principalmente calentando el transistor. Es por eso que no estás recibiendo mucho torque.

Aunque el diodo está en una posición inusual, el circuito funciona bien. Por lo general, el diodo se coloca a través de la carga inductiva, es decir, a través de los pines del motor, muy cerca del motor (si usa cables largos, esto es importante). Esto ayuda a suprimir los picos eléctricos generados por el motor cuando lo detiene, pero sigue girando y actúa como generador durante una fracción de tiempo muy breve.

Estos picos pueden matar su transistor. La otra solución, lo que ha hecho, es proteger el transistor en sí.

Notará que es imposible hacer que un motor de CC gire muy lentamente. Esto proviene de la estructura mecánica del motor. Si está utilizando un motor sin reducción de engranajes, verá que 30%-100% pwm hace alguna diferencia, mientras que 0..30% no hace nada. Con motorreductor (los engranajes son una carga adicional), es posible que necesite llegar al 50% solo para que arranque.

Puedes hacer algunas cosas:

  • use la función de mapa para mapear sus necesidades de energía del 0 al 100 % al 50 al 80 % de la salida PWM. Tenga en cuenta que la velocidad no siempre es lineal con respecto a la entrada de pwm, por lo que es posible que necesite una tabla de linealización para solucionarlo.
  • si su objetivo es tener un motor que pueda girar extremadamente lento, considere usar un motor paso a paso. Si necesita un rango extremadamente lento y medio, esto es bueno.
  • Si necesita de extremadamente lento a extremadamente rápido, será mejor que elija dos motores y una caja de cambios diferencial, si es bueno en mecánica.
  • Otra solución es utilizar un motor de CA trifásico y controlarlo con el microcontrolador. Esta solución no es un tema para principiantes, pero es la solución de facto para los vehículos eléctricos de hoy. El truco es que los devanados del motor siempre están energizados, por lo tanto, tiene un par constante. Mientras cambia la frecuencia de la forma de onda de conducción, tiene un control muy preciso sobre la velocidad.

¿Puede ser fricción estática? ¿Qué sucede si su boceto de arduino primero enciende el motor (PWM máximo) y luego disminuye lentamente durante varios segundos?

Mi experiencia es que es muy difícil hacer funcionar un motor de CC lentamente (a menos que tenga retroalimentación de posición, por supuesto, o engranajes).

Lo siento, mi primera pregunta no fue lo suficientemente clara. Estoy usando engranajes y la cámara muy lenta que quiero está fuera de la caja de cambios.