Aula 05 - Acionamento de Motores (CC, Servo, Passo), Relés e Projeto Integrado
Navegação Rápida
📍 Disciplina: 06 Projetos e Códigos Arduino | 🏠 Hub Principal
Metadados da Aula
- Área: 05 Eletrônica, Automação e Controle
- Carga Horária Equivalente: 4 horas-aula teóricas e práticas
- Pré-requisitos: Máquinas Elétricas e Acionamentos, Eletrônica Analógica e Eletrônica Digital
- Palavras-chave: Ponte H L298N, Motor CC, Servomotores, Modulação PPM/PWM, Motores de Passo Bipolares, Driver A4988, Micropasso, Relé Óptico, Conflito de Timer 1
📌 Sumário da Aula
- 🧭 1. Contextualização e Objetivos de Aprendizagem
- 📋 2. Sumário Executivo dos Tópicos
- ⚡ 3. Fundamentação Teórica e Modelagem Matemática
- 🖼️ 4. Diagrama Esquemático Integrado
- 💻 5. Implementação Prática e Firmware Integrado
- 📝 6. Banco de Questões de Fixação e Concursos Auditados
- 📚 7. Referências Bibliográficas e Normas Técnicas
🧭 1. Contextualização e Objetivos de Aprendizagem
O fechamento do ciclo de engenharia em sistemas microcontrolados exige a conversão de decisões lógicas e algoritmos em ações mecânicas tangíveis no mundo real. Microcontroladores como o ATmega328P operam com níveis lógicos de sinal ( e limite máximo de corrente de saída de por pino), sendo estritamente incapazes de acionar diretamente atuadores eletromecânicos, cujas correntes operacionais variam de centenas de miliamperes a dezenas de amperes.
Esta aula final aborda a interface de potência, isolamento galvânico e controle cinemático dos principais atuadores elétricos utilizados na indústria e robótica: motores de corrente contínua (CC) controlados por pontes H transistorizadas, servomotores angulares com malha fechada interna, motores de passo bipolares acionados por controladores inteligentes com micropasso, e relés eletromecânicos acoplados por optoacopladores para manobra de redes de corrente alternada.
Ao término desta aula, o engenheiro será capaz de:
- Dimensionar drivers em ponte H integrados (como o L298N), calculando perdas de condução por saturação, limites térmicos do dissipador e supressão de picos indutivos por diodos ultra-rápidos (fast recovery).
- Compreender a dinâmica temporal de controle PPM de servomotores a e diagnosticar o conflito estrutural entre a biblioteca
Servo.he as saídas PWM do Timer 1 nos pinos digitais 9 e 10 do Arduino Uno. - Projetar acionamentos de precisão angular para motores de passo com drivers microstepping (A4988 / DRV8825), calculando a frequência de pulsos no pino
STEP, limites de aceleração e ajuste da tensão de referência do limitador de corrente. - Projetar módulos de relé isolados opticamente com transistores saturados e diodos flyback para acionamento seguro de cargas de alta potência na rede elétrica.
- Desenvolver um firmware integrado e robusto combinando sensoriamento, cálculo de malha fechada e atuação concorrente não-bloqueante.
📋 2. Sumário Executivo dos Tópicos
- Topologia de Ponte H: Quatro chaves semicondutoras em ponte para reversão de polaridade. Modos de avanço, reversão, frenagem ativa por curto-circuito de armadura (dynamic brake) e roda-livre (coast). Proteção contra condução cruzada catastrófica (shoot-through).
- Driver L298N: Circuito integrado com saída dupla em ponte de transistores bipolares Darlington. Queda de tensão de saturação típica entre e .
- Servomotores Angulares: Malha fechada de posição com potenciômetro de realimentação. Trem de pulsos a () com largura ativa de (), () e ().
- Motores de Passo Bipolares: Estator com duas fases independentes (A e B). O motor NEMA 17 padrão possui ângulo de passo nativo de ().
- Tecnologia Microstepping (Driver A4988): Divisão eletrônica de passo em até via controle senoidal de corrente em cada fase, eliminando ressonâncias mecânicas e aumentando a resolução angular para .
- Módulos de Relé e Acionamento Active-Low: Isolamento óptico via fototransistor (ex.: PC817) com barreira de , bobina de excitação com diodo antiparalelo de desmagnetização e contatos NA/NF.
⚡ 3. Fundamentação Teórica e Modelagem Matemática
3.1 Ponte H e Controle Bidirecional de Motores de Corrente Contínua
Um motor de corrente contínua com excitação independente ou ímãs permanentes é modelado pela sua armadura com resistência , indutância e força contraeletromotriz (FCEM) :
Onde a FCEM e o torque eletromagnético desenvolvido são dados por:
Para controlar o sentido de rotação ( ou ) e aplicar torque em ambos os quadrantes operacionais, emprega-se uma topologia em Ponte H formada por 4 chaves semicondutoras ():
3.1.1 Estados de Chaveamento da Ponte H
- Sentido Direto (Avanço): e conduzindo; e bloqueados. A corrente flui da esquerda para a direita na armadura ().
- Sentido Reverso: e conduzindo; e bloqueados. A corrente flui da direita para a esquerda ().
- Frenagem Eletrodinâmica Ativa (Brake): e conduzindo simultaneamente (ou e ). A armadura é colocada em curto-circuito através do terra (). A FCEM induz uma corrente reversa intensa que dissipa a energia cinética do rotor na própria resistência de armadura , gerando torque de frenagem instantâneo:
- Roda-Livre (Coast): Todas as 4 chaves em corte. A corrente de armadura decai através dos diodos de roda-livre a até anular-se, desacelerando o motor exclusivamente pelo atrito mecânico.
Perigo Crítico de Condução Cruzada (Shoot-Through)
Se as chaves do mesmo braço vertical ( e , ou e ) forem acionadas simultaneamente por erro lógico de software ou durante o tempo de transição de chaveamento, cria-se um curto-circuito direto entre e o terra (). A corrente atinge instantaneamente centenas de amperes, destruindo as chaves por sobrecarga térmica em frações de microssegundo. Drivers modernos integram circuitos lógicos de travamento com tempo morto (dead-time) de comutação.
3.1.2 Análise de Rendimento do Driver L298N
O driver L298N utiliza pares Darlington bipolares em sua saída. Devido às quedas de tensão coletor-emissor dos transistores superior () e inferior (), a tensão efetiva entregue aos terminais do motor sob duty cycle de modulação PWM é:
Onde a queda interna total é tipicamente expressiva:
A potência dissipada em forma de calor no próprio encapsulamento Multiwatt15 do L298N é:
Para uma corrente contínua de motor de sob :
Sem um dissipador de alumínio de dimensões adequadas com baixa resistência térmica de contato (), a temperatura de junção ultrapassa o limite máximo admissível (), provocando o desligamento da proteção térmica interna.
3.2 Servomotores de Posição Angular e Modulação PPM
Um servomotor de modelismo ou robótica (como o TowerPro SG90 ou MG995) é composto por um pequeno motor CC, trem de engrenagens de redução de alto torque, um potenciômetro solidário ao eixo de saída para leitura analógica da posição angular , e um circuito integrado de controle que implementa um laço fechado tipo Proporcional-Derivativo (PD).
3.2.1 Protocolo de Pulso PPM (Pulse-Position Modulation)
O servomotor não é acionado por duty cycle percentual convencional de PWM, mas sim pela largura temporal absoluta de um pulso de nível alto repetido a uma taxa fixa de (período total ):
- Pulso de : Comando de posicionamento no batente esquerdo ().
- Pulso de : Comando de posicionamento no centro exato ().
- Pulso de : Comando de posicionamento no batente direito ().
A relação analítica entre a largura do pulso ativo (em milissegundos) e o ângulo desejado (em graus) é estritamente linear:
3.2.2 Conflito Crítico de Hardware com o Timer 1 do ATmega328P
A biblioteca oficial Servo.h do Arduino utiliza interrupções de captura e comparação do Timer 1 (temporizador de 16 bits do microcontrolador) para gerar trens de pulso estáveis e imunes a jitter com resolução de microssegundos.
Inativação do PWM nos Pinos 9 e 10
Ao invocar a função
meuServo.attach(pino)em qualquer projeto que utilize placas baseadas no ATmega328P (como o Arduino Uno ou Nano), a bibliotecaServo.hreconfigura o Timer 1 para modo normal com interrupções periódicas. Como consequência direta dessa alteração no registradorTCCR1A, as saídas analógicas simuladas por modulação PWM (analogWrite()) nos pinos digitais 9 e 10 deixam de operar! Se o projetista tentar controlar a velocidade de motores CC via PWM nos pinos 9 ou 10 enquanto controla servomotores, as saídas produzirão apenas nível constante (0 ou 255). A solução de engenharia mandatória é redirecionar o PWM dos motores CC para os pinos 3, 5, 6 ou 11, os quais utilizam o Timer 0 ou Timer 2.
3.3 Motores de Passo Bipolares, Micropasso e Driver A4988
Os motores de passo são atuadores de posicionamento incremental em malha aberta. Um motor bipolar de 4 condutores possui dois enrolamentos de estator desfasados espacialmente (Fase A e Fase B).
O modelo de referência industrial mais difundido é o motor padrão NEMA 17, que possui rotor dentado com 50 pares de polos, conferindo um ângulo de passo completo nativo de:
O número de passos necessários para completar uma revolução completa de é:
3.3.1 Arquitetura e Controle do Driver A4988
O circuito integrado Allegro A4988 converte comandos lógicos simplificados de dois condutores em correntes moduladas por histerese em duas pontes H MOSFET integradas:
- Pino
DIR(Direction): O nível lógico alto/baixo seleciona o sentido de rotação horário ou anti-horário. - Pino
STEP: Cada borda de subida (transição ) no pino faz o motor avançar exatamente um incremento angular.
3.3.2 Modos de Micropasso (Microstepping)
Ao chavear as fases A e B com correntes discretizadas aproximadas por funções senoidais defasadas de ( e ), o vetor magnético resultante gira de forma suave entre as posições físicas dos polos. A resolução é selecionada pelos pinos MS1, MS2 e MS3:
No modo de de passo (), o incremento angular básico reduz-se a:
3.3.3 Cinemática e Relações de Frequência
A velocidade de rotação do rotor (em rotações por minuto, rpm) é diretamente proporcional à frequência de pulsos injetada no pino STEP:
A velocidade angular em radianos por segundo é:
Isolando a frequência de comutação necessária para se obter uma rotação desejada :
O período do trem de pulsos é . O sinal deve manter o nível alto ativo por no mínimo (conforme datasheet do A4988).
3.3.4 Dimensionamento da Corrente de Pico ()
O A4988 implementa corte de corrente por modulação PWM interno com ciclo regenerativo. A corrente máxima de fase é ajustada medindo-se a tensão analógica no trimpot da placa contra o terra:
Onde é a resistência dos resistores de detecção de corrente (current sense resistors) soldados na placa (habitualmente ou em placas comerciais):
Para um motor com corrente nominal de fase de e operando com margem de segurança de () em placa com :
3.4 Módulos de Relé Eletromecânico com Isolamento Óptico
Para comandar cargas de corrente alternada da rede elétrica () ou circuitos isolados com terras flutuantes, empregam-se módulos de relé eletromecânicos com barreira de isolamento galvânico.
3.4.1 Características de Operação Active-Low
A quase totalidade dos módulos comerciais para microcontroladores opera com acionamento em nível lógico baixo (Active-Low):
- Quando o pino de saída do Arduino é configurado em
HIGH(), a diferença de potencial sobre o LED interno do optoacoplador é de , mantendo o fototransistor bloqueado e o relé desenergizado. - Quando o pino vai para
LOW(), circula corrente direta pelo LED, excitando a base do fototransistor, que satura o transistor de potência NPN, aplicando sobre a bobina do relé.
3.4.2 Diodo de Roda-Livre (Flyback) Obrigatório
No instante em que a bobina do relé () é desenergizada, a taxa de variação brusca de corrente provoca uma sobretensão reversa induzida pela Lei de Faraday-Lenz:
Sem o diodo de proteção em antiparalelo (), a tensão no coletor do transistor chaveador pode facilmente superar , rompendo a junção semicondutora por avalanche. O diodo oferece caminho de circulação fechada para a corrente de desmagnetização, ceifando a sobretensão em .
🖼️ 4. Diagrama Esquemático Integrado
O diagrama técnico completo a seguir sintetiza as interfaces físicas entre o microcontrolador ATmega328P e os quatro tipos fundamentais de atuadores estudados: a ponte H L298N, o servomotor angular, o driver microstepping A4988 e o canal de relé optoacoplado:
💻 5. Implementação Prática e Firmware Integrado
5.1 Controle de Velocidade e Sentido com L298N
O código a seguir demonstra o controle nos quatro quadrantes de um motor CC: avanço progressivo com aceleração suave por PWM, frenagem ativa rápida e reversão, utilizando saídas sem conflito de timer:
#include <Arduino.h>
// Definicoes de pinagem do Driver L298N
// O pino ENA DEVE ser conectado a um pino PWM nativo (Pino 5 utiliza Timer 0)
const int PIN_ENA = 5;
const int PIN_IN1 = 7;
const int PIN_IN2 = 8;
void acionarMotor(int velocidadePWM, bool sentidoHorario) {
if (sentidoHorario) {
digitalWrite(PIN_IN1, HIGH);
digitalWrite(PIN_IN2, LOW);
} else {
digitalWrite(PIN_IN1, LOW);
digitalWrite(PIN_IN2, HIGH);
}
analogWrite(PIN_ENA, constrain(velocidadePWM, 0, 255));
}
void frearMotorAtivo() {
// Curto-circuita os dois terminais do motor no terra (Dynamic Braking)
digitalWrite(PIN_IN1, HIGH);
digitalWrite(PIN_IN2, HIGH);
analogWrite(PIN_ENA, 255);
}
void desligarMotorRodaLivre() {
// Corta a conducao das pontes (Coast)
digitalWrite(PIN_IN1, LOW);
digitalWrite(PIN_IN2, LOW);
analogWrite(PIN_ENA, 0);
}
void setup() {
pinMode(PIN_ENA, OUTPUT);
pinMode(PIN_IN1, OUTPUT);
pinMode(PIN_IN2, OUTPUT);
Serial.begin(115200);
Serial.println(F("Driver L298N Inicializado."));
}
void loop() {
Serial.println(F("Acelerando no Sentido Horario..."));
for (int pwm = 0; pwm <= 255; pwm += 5) {
acionarMotor(pwm, true);
delay(20);
}
delay(2000);
Serial.println(F("Aplicando Frenagem Eletrodinâmica Ativa..."));
frearMotorAtivo();
delay(1000);
Serial.println(F("Acelerando no Sentido Anti-Horario..."));
for (int pwm = 0; pwm <= 255; pwm += 5) {
acionarMotor(pwm, false);
delay(20);
}
delay(2000);
Serial.println(F("Desligando em Roda-Livre..."));
desligarMotorRodaLivre();
delay(3000);
}5.2 Geração de Pulsos Não-Bloqueante para Motor de Passo A4988
O firmware a seguir implementa a geração de trem de pulsos para o driver A4988 utilizando temporização assíncrona por micros(), permitindo que o microcontrolador execute tarefas paralelas sem paralisar o fluxo de código com delay():
#include <Arduino.h>
const int PIN_STEP = 3;
const int PIN_DIR = 4;
unsigned long ultimoPulsoMicros = 0;
bool estadoPinoStep = false;
long passosRestantes = 0;
// Configura o movimento angular desejado em passos e frequencia
void iniciarMovimentoPassos(long totalPassos, unsigned int freqHz, bool sentidoHorario) {
digitalWrite(PIN_DIR, sentidoHorario ? HIGH : LOW);
passosRestantes = totalPassos * 2; // Cada ciclo possui 2 alternancias (subida e descida)
// Intervalo de meio-periodo em microssegundos: T_half = 10^6 / (2 * freq)
unsigned long intervaloMeioPeriodo = 500000UL / freqHz;
ultimoPulsoMicros = micros();
}
void atualizarMotorPasso() {
if (passosRestantes > 0) {
unsigned long agora = micros();
// Exemplo fixado em frequencia de 1000 Hz (semi-periodo de 500 us)
if (agora - ultimoPulsoMicros >= 500) {
ultimoPulsoMicros = agora;
estadoPinoStep = !estadoPinoStep;
digitalWrite(PIN_STEP, estadoPinoStep ? HIGH : LOW);
passosRestantes--;
}
}
}
void setup() {
pinMode(PIN_STEP, OUTPUT);
pinMode(PIN_DIR, OUTPUT);
digitalWrite(PIN_STEP, LOW);
Serial.begin(115200);
Serial.println(F("Acionamento de Passo A4988 Nao-Bloqueante"));
// Dispara 3200 passos (1 volta completa em modo 1/16) a 1000 Hz
iniciarMovimentoPassos(3200, 1000, true);
}
void loop() {
atualizarMotorPasso();
// Demais tarefas do laço executam em paralelo a cada ciclo
}5.3 Sistema Mecatrônico Integrado de Automação com Arduino
A aplicação industrial integrada a seguir gerencia concorrentemente:
- Controle de atuador térmico por relé óptico (Active-Low) com histerese;
- Posicionamento de válvula de dosagem por servomotor angular;
- Resfriamento forçado proporcional com motor CC e modulação PWM no pino 6;
- Monitoramento contínuo via telemetria UART sem qualquer bloqueio temporal.
#include <Arduino.h>
#include <Servo.h>
// Definicao da pinagem eletrica
const int PIN_SENSOR_NTC = A0; // Transdutor de temperatura
const int PIN_MOTOR_PWM = 6; // PWM do ventilador CC (Timer 0)
const int PIN_MOTOR_DIR = 7; // Sentido do motor CC
const int PIN_SERVO_VALV = 11; // Servomotor de dosagem (Pino 11)
const int PIN_RELE_AQUEC = 12; // Modulo rele de aquecimento (Active-Low)
Servo valvulaServo;
// Parametros de controle do processo termico
const float SETPOINT_TEMP = 45.0; // Temperatura desejada em °C
const float HISTERESE = 1.5; // Faixa de histerese em °C
unsigned long ultimoCicloControle = 0;
const unsigned long PERIODO_CONTROLE_MS = 200; // Taxa de amostragem de 5 Hz
float lerTemperatura() {
int leituraADC = analogRead(PIN_SENSOR_NTC);
// Conversao linear simulada do sensor calibrado
float tensao = (leituraADC * 5.0) / 1023.0;
return tensao * 20.0; // Escala: 0 a 100 °C
}
void setup() {
Serial.begin(115200);
pinMode(PIN_MOTOR_PWM, OUTPUT);
pinMode(PIN_MOTOR_DIR, OUTPUT);
pinMode(PIN_RELE_AQUEC, OUTPUT);
// Inicia rele desligado (nivel HIGH em modulo Active-Low)
digitalWrite(PIN_RELE_AQUEC, HIGH);
// Sentido fixo do motor de ventilacao
digitalWrite(PIN_MOTOR_DIR, HIGH);
analogWrite(PIN_MOTOR_PWM, 0);
// O attach no pino 11 assume o Timer 1, mantendo os pinos 5 e 6 com PWM ativo
valvulaServo.attach(PIN_SERVO_VALV);
valvulaServo.write(0); // Valvula totalmente fechada
Serial.println(F("========================================"));
Serial.println(F("SISTEMA MECATRONICO INTEGRADO EM OPERACAO"));
Serial.println(F("========================================"));
}
void loop() {
unsigned long agora = millis();
if (agora - ultimoCicloControle >= PERIODO_CONTROLE_MS) {
ultimoCicloControle = agora;
float tempAtual = lerTemperatura();
// 1. Logica de Controle Termico On-Off com Histerese
if (tempAtual < (SETPOINT_TEMP - HISTERESE)) {
// Abaixo da faixa: Liga aquecedor (Active-Low)
digitalWrite(PIN_RELE_AQUEC, LOW);
} else if (tempAtual > (SETPOINT_TEMP + HISTERESE)) {
// Acima da faixa: Desliga aquecedor
digitalWrite(PIN_RELE_AQUEC, HIGH);
}
// 2. Controle Proporcional da Ventilacao de Arrefecimento
if (tempAtual > SETPOINT_TEMP) {
float erro = tempAtual - SETPOINT_TEMP;
int saidaPWM = (int)(erro * 25.5); // Ganho proporcional Kp
saidaPWM = constrain(saidaPWM, 60, 255); // Garante torque inicial
analogWrite(PIN_MOTOR_PWM, saidaPWM);
} else {
analogWrite(PIN_MOTOR_PWM, 0);
}
// 3. Posicionamento Dinamico da Valvula Servomotor
// Mapeia faixa de 20 a 60 °C para abertura de 0 a 90 graus
int anguloValvula = map((int)tempAtual, 20, 60, 0, 90);
anguloValvula = constrain(anguloValvula, 0, 90);
valvulaServo.write(anguloValvula);
// 4. Telemetria Formatada via UART
Serial.print(F("TEMP:"));
Serial.print(tempAtual, 1);
Serial.print(F("C;AQUEC:"));
Serial.print(digitalRead(PIN_RELE_AQUEC) == LOW ? F("ON") : F("OFF"));
Serial.print(F(";ANG:"));
Serial.println(anguloValvula);
}
}📝 6. Banco de Questões de Fixação e Concursos Auditados
Questão 01 — Cálculo Cinemático e Frequência de Trem de Pulsos em Motor NEMA 17
(Petrobras — Engenharia de Equipamentos / Elétrica)
Um sistema de posicionamento cartesiano industrial utiliza um motor de passo bipolar NEMA 17 com ângulo de passo nativo de , acionado por um driver A4988 configurado em modo de micropasso de de passo (). O fuso de esferas acoplado ao eixo possui passo de rosca de .
a) Calcule o número total de pulsos necessários para que o carro linear se desloque uma distância linear de exatos .
b) Determine a frequência do trem de pulsos () que o microcontrolador Arduino deve gerar no pino STEP para que o carro se desloque à velocidade linear constante de .
c) Calcule a velocidade de rotação do rotor em rotações por minuto ().
💡 Resolução Analítica Passo a Passo:
a) Número de pulsos para o deslocamento:
O número de rotações completas do fuso para percorrer é:
No modo de de passo com motor de ( em full-step):
O número total de pulsos necessários é:
b) Frequência do sinal no pino STEP:
A velocidade de rotação do fuso em rotações por segundo () para atender é:
A frequência de pulsos requerida é:
O período de cada pulso de passo deve ser:
c) Rotação do rotor em rpm:
Questão 02 — Balanço Térmico e Perdas de Condução na Ponte H L298N
(Marinha do Brasil — Corpo de Engenheiros / Eletrônica)
Um projetista emprega o circuito integrado em ponte H L298N para acionar um motor CC de . Em ensaio com carga nominal contínua de armadura de , o datasheet indica que as quedas de saturação dos transistores são e . O consumo da lógica interna é de sob .
A resistência térmica junção-cápsula do L298N (encapsulamento Multiwatt15) é , a resistência térmica de contato pasta-isolador é e a máxima temperatura de operação de junção é .
Para uma temperatura ambiente máxima de projeto de :
a) Calcule a potência total dissipada na forma de calor no CI.
b) Determine a máxima resistência térmica do dissipador de calor () para garantir a operação segura do componente.
💡 Resolução Analítica Passo a Passo:
a) Potência Total Dissipada ():
A queda de tensão total de condução na ponte é:
A potência dissipada no estágio de potência é:
A potência consumida pela seção lógica interna é:
A potência total dissipada é:
b) Cálculo da Resistência Térmica do Dissipador ():
O circuito térmico em regime permanente é modelado pela Lei de Ohm Térmica:
Isolando :
Substituindo os valores numéricos:
Portanto, o dissipador de alumínio deve possuir resistência térmica inferior a para evitar destruição térmica do chip.
Questão 03 — Análise de Conflito de Temporizador (Timer 1) no ATmega328P
(ENADE — Engenharia Elétrica / Automação)
Um protótipo mecatrônico de robô móvel integra dois motores de tração acionados via driver L298N e um braço articulado acionado por dois servomotores controlados pela biblioteca Servo.h. O projetista conectou as linhas de PWM de velocidade dos motores nos pinos digitais 9 e 10 do Arduino Uno, e os sinais de comando dos servos nos pinos 2 e 4.
Ao carregar o sketch com os comandos meuServo.attach(2) e executar analogWrite(9, 128), o motor conectado ao pino 9 gira com rotação descontrolada em velocidade máxima ou para completamente, não respondendo às variações do comando analogWrite.
a) Explique a causa arquitetural de hardware para essa anomalia de funcionamento.
b) Aponte a modificação definitiva de projeto de hardware que soluciona o problema sem alterar o número de componentes.
💡 Resolução Analítica Passo a Passo:
a) Causa Arquitetural do Conflito:
No microcontrolador ATmega328P, a função analogWrite(pino, valor) nos pinos digitais 9 e 10 depende diretamente dos canais de comparação OC1A e OC1B do temporizador de 16 bits Timer 1.
Ao instanciar a biblioteca Servo.h e invocar a função attach(), a biblioteca reconfigura os registradores de controle do Timer 1 (TCCR1A, TCCR1B e TIMSK1) para operar no modo normal de contagem com disparo periódico de interrupção a cada ciclo de geração de pulso PPM.
Essa reconfiguração desativa os módulos de hardware geradores de modulação por largura de pulso (PWM) acoplados aos pinos 9 e 10. O pino 9 passa a operar como I/O digital comum: valores de analogWrite entre 0 e 127 são truncados para nível baixo (0V), e valores entre 128 e 255 forçam nível alto contínuo (5V), cessando completamente o controle linear de velocidade do motor.
b) Solução de Engenharia Definitiva:
A solução mandatória consiste em remapear os condutores de controle PWM dos motores de tração para pinos atrelados aos outros temporizadores independentes do microcontrolador:
- Pinos 5 e 6 (atrelados ao Timer 0 de 8 bits); ou
- Pinos 3 e 11 (atrelados ao Timer 2 de 8 bits).
Ao transferir o sinal de controle de velocidade do pino 9 para o pino 5 (ou 6), a bibliotecaServo.hcontinua gerenciando os pulsos dos servomotores no Timer 1 de forma transparente, enquanto a funçãoanalogWrite(5, 128)mantém a modulação PWM a intacta e perfeitamente operacional.
📚 7. Referências Bibliográficas e Normas Técnicas
- ATMEL / MICROCHIP. ATmega328P 8-bit AVR Microcontroller with 32K Bytes In-System Programmable Flash Datasheet. Document DS40002061B, 2018.
- STMICROELECTRONICS. L298 Dual Full-Bridge Driver Datasheet. DocID 1773 Rev 8, 2000.
- ALLEGRO MICROSENSORS. A4988: DMOS Microstepping Driver with Translator and Overcurrent Protection Datasheet. Document A4988-DS Rev. 5, 2017.
- FITZGERALD, A. E.; KINGSLEY, Charles; UMANS, Stephen D. Máquinas Elétricas: com Introdução à Eletrônica de Potência. 7. ed. Porto Alegre: Bookman, 2014.
- CHAPMAN, Stephen J. Fundamentos de Máquinas Elétricas. 5. ed. Porto Alegre: AMGH, 2013.
- OGATA, Katsuhiko. Engenharia de Controle Moderno. 5. ed. São Paulo: Pearson Prentice Hall, 2010.
- MONK, Simon. Programação com Arduino: Começando com Sketches. 2. ed. Porto Alegre: Bookman, 2017.