Aula 05 - Acionamento de Motores (CC, Servo, Passo), Relés e Projeto Integrado

Navegação Rápida

Metadados da Aula


📌 Sumário da Aula

  1. 🧭 1. Contextualização e Objetivos de Aprendizagem
  2. 📋 2. Sumário Executivo dos Tópicos
  3. ⚡ 3. Fundamentação Teórica e Modelagem Matemática
  4. 🖼️ 4. Diagrama Esquemático Integrado
  5. 💻 5. Implementação Prática e Firmware Integrado
  6. 📝 6. Banco de Questões de Fixação e Concursos Auditados
  7. 📚 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.h e 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

  1. Sentido Direto (Avanço): e conduzindo; e bloqueados. A corrente flui da esquerda para a direita na armadura ().
  2. Sentido Reverso: e conduzindo; e bloqueados. A corrente flui da direita para a esquerda ().
  3. 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:
  4. 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 biblioteca Servo.h reconfigura o Timer 1 para modo normal com interrupções periódicas. Como consequência direta dessa alteração no registrador TCCR1A, 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:

  1. Controle de atuador térmico por relé óptico (Active-Low) com histerese;
  2. Posicionamento de válvula de dosagem por servomotor angular;
  3. Resfriamento forçado proporcional com motor CC e modulação PWM no pino 6;
  4. 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 biblioteca Servo.h continua gerenciando os pulsos dos servomotores no Timer 1 de forma transparente, enquanto a função analogWrite(5, 128) mantém a modulação PWM a intacta e perfeitamente operacional.

📚 7. Referências Bibliográficas e Normas Técnicas

  1. ATMEL / MICROCHIP. ATmega328P 8-bit AVR Microcontroller with 32K Bytes In-System Programmable Flash Datasheet. Document DS40002061B, 2018.
  2. STMICROELECTRONICS. L298 Dual Full-Bridge Driver Datasheet. DocID 1773 Rev 8, 2000.
  3. ALLEGRO MICROSENSORS. A4988: DMOS Microstepping Driver with Translator and Overcurrent Protection Datasheet. Document A4988-DS Rev. 5, 2017.
  4. 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.
  5. CHAPMAN, Stephen J. Fundamentos de Máquinas Elétricas. 5. ed. Porto Alegre: AMGH, 2013.
  6. OGATA, Katsuhiko. Engenharia de Controle Moderno. 5. ed. São Paulo: Pearson Prentice Hall, 2010.
  7. MONK, Simon. Programação com Arduino: Começando com Sketches. 2. ed. Porto Alegre: Bookman, 2017.