3.15. Controlo de motores DC¶
Um motor DC com escovas é uma bobina de fio num veio dentro de um campo magnético. Ao fazer circular corrente pela bobina, o campo exerce uma força sobre ela; essa força converte-se em binário no veio. As escovas no interior do motor invertem a direção da corrente na bobina à medida que o veio roda, de modo que o binário empurra sempre o veio na mesma direção. Aplique uma tensão DC nos dois terminais do motor e o veio gira; inverta a polaridade e gira no sentido contrário.
Os motores necessitam tipicamente de centenas de miliamperes a vários amperes, com tensões de alimentação acima do nível lógico de 3,3 V da câmara. Um pino GPIO consegue fornecer da ordem dos 25 mA e não pode inverter a polaridade – só pode conduzir para os seus dois níveis. O estágio de acionamento entre a câmara e o motor tem de suportar a corrente do motor, encaminhar uma alimentação de motor separada de tensão mais elevada e permitir que a câmara inverta a polaridade por comando. A ponte H de quatro transístores é a resposta padrão.
3.15.1. A ponte H¶
Uma ponte H é composta por quatro interruptores dispostos em H em torno do motor:
A ponte H: quatro interruptores (S1 – S4) ligam o motor M entre Vmotor e a massa.¶
O fecho de diferentes pares de interruptores seleciona o que o motor vê nos seus terminais:
S1 + S4 fechados, S2 + S3 abertos. A corrente flui de Vmotor através de
S1, paraA, atravessa o motor atéB, e passa porS4para a massa. O motor roda num sentido.S2 + S3 fechados, S1 + S4 abertos. A corrente flui no sentido contrário através do motor. O motor roda no sentido oposto.
Todos os quatro abertos. Ambos os terminais do motor ficam em flutuação; o motor entra em modo livre.
S3 + S4 fechados (ou S1 + S2 fechados). Ambos os terminais do motor estão ligados ao mesmo nível; a própria energia cinética do motor faz circular uma corrente que o par fechado curto-circuita em calor. O motor trava.
A combinação proibida é fechar ambos os interruptores na mesma coluna – S1 + S3 ou S2 + S4 – o que cria um curto-circuito de Vmotor direto para a massa. Isto chama-se shoot-through, e o código da câmara não o deve permitir.
Na prática, os quatro interruptores são MOSFETs (introduzidos na página Conversão de nível lógico) dentro de um CI driver integrado. O chip expõe dois ou três pinos de entrada de nível lógico que mapeiam internamente para os quatro interruptores e inclui lógica de bloqueio que impede o shoot-through, pelo que o código da câmara não tem de o gerir diretamente.
3.15.2. PWM e a indutância do motor¶
Definir a velocidade do motor requer mais do que ligar e desligar completamente. O truque é o mesmo que é usado para LEDs em Regulação de luminosidade de LEDs com PWM: pulsar o acionamento a uma frequência elevada e deixar a carga calcular a média do resultado. Para um LED, o integrador era o olho; para um motor é a própria bobina.
A bobina de um motor tem uma indutância considerável. A corrente num indutor não pode mudar instantaneamente; muda a uma taxa proporcional à tensão sobre ele. Pulsar a ponte ligando e desligando a 20 kHz aumenta gradualmente a corrente na bobina durante cada fase ativa, e durante a fase inativa a corrente tem de continuar a fluir – a bobina inverte a tensão sobre si mesma para a manter.
Sem um caminho para onde ir, essa corrente faria disparar a tensão sobre o interruptor recém-aberto e poderia danificar o transístor. Os díodos de roda-livre em paralelo com cada interruptor – muitas vezes apenas os próprios díodos de corpo dos MOSFETs dentro do chip driver – fornecem o caminho de que a corrente necessita. Ela flui através de um díodo e volta pelo circuito através de um dos interruptores ainda fechados, completando um circuito de roda-livre no qual a corrente decai gradualmente através das pequenas resistências da ponte e do próprio motor. O díodo também fixa a tensão sobre o interruptor aberto dentro de uma queda de díodo em relação a qualquer nível para onde o circuito retorna, bem dentro da área de operação segura do MOSFET.
A média da corrente ao longo de cada período PWM é o que produz binário, e essa média acompanha linearmente o ciclo de trabalho – duplicar o ciclo de trabalho duplica aproximadamente o binário e, a carga constante, duplica aproximadamente a velocidade. Ao contrário da regulação de luminosidade de LEDs, onde a resposta não linear do olho exige uma curva, uma varredura linear de duty_u16 já corresponde a uma varredura linear do esforço do motor.
A frequência PWM só tem de ultrapassar dois limiares:
Acima de ~20 kHz, a portadora está fora da banda audível humana. Abaixo disso, a força magnética na bobina aumenta e diminui com cada pulso PWM e os enrolamentos e as laminações vibram fisicamente à frequência portadora – o motor torna-se efetivamente um pequeno altifalante emitindo um tom à frequência PWM.
Muito acima de ~50 kHz, os MOSFETs e os seus drivers de gate começam a perder eficiência para as perdas de comutação. Durante cada transição on-off, o MOSFET transporta brevemente tanto tensão significativa como corrente significativa, dissipando uma pequena quantidade de energia sob a forma de calor; a capacitância de gate dos MOSFETs também tem de ser carregada e descarregada em cada ciclo, o que é pago pelo chip driver. Ambos os custos escalam com a frequência PWM, pelo que a altas frequências o calor da comutação pode rivalizar com o calor da condução da corrente do motor.
20 kHz é o valor padrão confortável para motores de uso amador.
3.15.3. Acionar uma ponte H¶
Um chip driver de ponte H com duas entradas mapeia IN1 e IN2 para os quatro interruptores aproximadamente assim:
IN1 = 0, IN2 = 0– livre (todos os quatro interruptores abertos).IN1 = 1, IN2 = 0– acionar numa direção.IN1 = 0, IN2 = 1– acionar na outra direção.IN1 = 1, IN2 = 1– travar.
Acionar as duas entradas como saídas PWM permite à câmara definir a direção escolhendo qual dos dois pinos transporta o ciclo de trabalho, e a velocidade pelo próprio valor do ciclo de trabalho:
import time
from machine import PWM, Pin
in1 = PWM(Pin("P7"), freq=20_000, duty_u16=0)
in2 = PWM(Pin("P8"), freq=20_000, duty_u16=0)
def drive_a(speed): # speed: 0..65535
in1.duty_u16(speed)
in2.duty_u16(0)
def drive_b(speed):
in1.duty_u16(0)
in2.duty_u16(speed)
def coast():
in1.duty_u16(0)
in2.duty_u16(0)
def brake():
in1.duty_u16(65535)
in2.duty_u16(65535)
drive_a(32768) # half speed in direction A
time.sleep(2)
drive_b(16384) # quarter speed in direction B
time.sleep(2)
coast()
Uma rampa de desligado para máximo e de volta proporciona uma partida e uma paragem suaves:
for d in range(0, 65535, 256):
in1.duty_u16(d)
time.sleep_ms(10)
for d in range(65535, 0, -256):
in1.duty_u16(d)
time.sleep_ms(10)
3.15.4. Drivers de direção e velocidade¶
Uma segunda família de chips de ponte H expõe uma interface mais conveniente: uma entrada digital de direção (frequentemente rotulada DIR ou PH para «phase») mais uma entrada de velocidade (frequentemente PWM ou EN para «enable»). O pino de direção escolhe qual o sentido em que a ponte aciona; o ciclo de trabalho no pino de velocidade define a corrente média.
Isto é mais fácil de controlar por software do que o esquema de duas entradas PWM. Os dois sinais correspondem à forma como o problema é normalmente enunciado – «girar neste sentido, a esta velocidade» – pelo que o código pode usar set_direction(forward); set_speed(50) em vez de ramificar entre in1 e in2. Apenas um canal PWM é necessário, o que liberta o outro canal no mesmo temporizador para uma tarefa não relacionada. E o pino de direção pode ficar estacionado entre mudanças sem rearmar a ponte, de modo que mudar a velocidade a uma direção fixa toca apenas num registo.
import time
from machine import PWM, Pin
dir_pin = Pin("P8", Pin.OUT)
speed = PWM(Pin("P7"), freq=20_000, duty_u16=0)
def drive(direction, speed_u16):
dir_pin.value(direction) # 0 or 1
speed.duty_u16(speed_u16) # 0..65535
drive(0, 32768) # direction A at half speed
time.sleep(2)
drive(1, 16384) # direction B at quarter speed
time.sleep(2)
speed.duty_u16(0) # stop
O que o «stop» faz efetivamente neste tipo de driver – livre ou travar – depende do chip. Com um driver de duas entradas, o código da câmara escolhe (ambas as entradas baixas para livre, ambas as entradas altas para travar); com um driver de direção e velocidade, o chip decide, pelo que vale a pena dar uma vista de olhos à folha de dados antes de confiar em qualquer um dos comportamentos.