51 Guia de configuração do servo da unidade do microcontrolador_Custom Drive_Industry Insights_Kpower
Lar > Informações do setor >Unidade personalizada
SUPORTE TÉCNICO

Suporte ao produto

51 Guia de configuração do servo da unidade do microcontrolador

Publicado 2026-04-29

01O microcontrolador 51 pode acionar a caixa de direção? Como configurar isso?

Somente quando as condições de hardware forem atendidas o acionamento poderá ser realizado. O microcontrolador 51 emite um PWM padrão, que é um sinal de modulação por largura de pulso, e pode controlar o ângulo de direção. A etapa principal de configuração é gerar um sinal PWM com um período de 20 ms e um tempo de alto nível na faixa de 0,5 ms a 2,5 ms. O ciclo de trabalho corresponde a uma rotação de 0° a 180°. Este artigo fornece o esquema completo de conexão do circuito e configuração de código.

02Princípio de funcionamento do leme e requisitos do microcontrolador

A rotação da caixa de direção é determinada pela largura de pulso do sinal de controle. Servos padrão, como SG90 e MG995R, possuem os seguintes requisitos:

período de sinal:20ms(50Hz)

A relação entre tempo e ângulo de alto nível

0,5 ms → 0°

1,0 ms → 45°

1,5 ms → 90°

2,0 ms → 135°

2,5 ms → 180°

Em relação aos requisitos de saída do microcontrolador 51, um é que qualquer porta de E/S pode gerar um sinal PWM, e o outro é que este processo de geração deve controlar com precisão a duração do seu nível.. Em relação à frequência do oscilador de cristal, a sugestão é que seja 11,0592MHz ou 12MHz. O objetivo disso é facilitar o cronômetro para cronometrar com precisão.

03Esquema de conexão de hardware (deve incluir fonte de alimentação independente)

Quando o servo está funcionando, sua corrente é relativamente grande. Quando está sem carga, a corrente está na faixa de 100mA a 200mA. Quando ocorre um bloqueio, a corrente pode atingir mais de 500mA. É absolutamente proibido obter energia diretamente da porta de E/S do microcontrolador 51, nem obter energia do pino 5V da placa de ensino. Caso contrário, ocorrerá uma reinicialização ou o chip será queimado.

Método de conexão padrão

1. linha de sinal: Conecte-se a qualquer porta de E/S do microcontrolador (como P1.0)

2. O terminal positivo, que é VCC, deve ser conectado a uma fonte de alimentação externa de 5 V, como o módulo estabilizador de tensão LM2596, e uma bateria de 4,8 V - 6 V.

单片机可以直接驱动舵机吗_单片机怎么驱动舵机_51单片机可以驱动舵机吗怎么设置

3. O eletrodo negativo, ou seja, GND, deve estar no mesmo estado fundamental do GND do microcontrolador, ou seja, o eletrodo negativo da fonte de alimentação deve estar conectado ao GND da placa de desenvolvimento.

O caso de referência sobre o YPMFG é que um entusiasta da eletrônica usou o STC89C52RC para acionar o servo MG995R. A princípio, ele obtinha energia diretamente da placa de desenvolvimento, fazendo a tela tremer. Posteriormente, foi alterado para duas baterias 18650 conectadas em série e depois reduzidas para 5,5V para alimentação. Depois disso, o servo funcionou suavemente e sem interferências.

04Métodos de configuração de software (duas soluções convencionais)

Solução 1: Simulação de temporizador PWM (recomendado, adequado para qualquer microcontrolador 51)

A lógica principal é usar um temporizador para gerar uma interrupção de 100 μs e controlar o tempo de alto nível acumulando o número de interrupções.

etapas de código(Tome um oscilador de cristal de 12 MHz como exemplo):

#incluirsalivaservo=P1^0; // Contagem de caracteres não assinados do pino de sinal = 0; // Contagem de interrupções unsigned char high_time = 15; // 1,5ms corresponde a 90° (15×100μs) void Timer0_Init() { TMOD = 0x01; // Modo 1, temporizador de 16 bits TH0 = 0xFE; // Valor inicial de 100μs (12MHz: 65536-100=65436→0xFF9C) TL0 = 0x0C; EA = 1; //Ativa a interrupção total ET0 = 1; // Habilita o temporizador 0 interrupção TR0 = 1; // Inicia o cronômetro } void Timer0_ISR() interrupção 1 { TH0 = 0xFE; // Recarrega o valor inicial TL0 = 0x0C; contar++; if(count++; servo = 1; // O nível alto dura high_time×100μs } else if(count servo = 0; } else { count = 0; // Fim do ciclo, reinicia a contagem } } void main() { Timer0_Init(); high_time = 10; // Definir ângulo: 10→45°, 15→90°, 20→135° while(1); }

Opção 2: simulação da função de atraso (apenas para teste, não recomendado para projetos reais)

Os pulsos são gerados usando _nop_() ou loops de atraso, mas o uso da CPU é alto e o ângulo não é preciso. Exemplo:

servo = 1; atraso_us(1500); // Servo de alto nível de 1,5ms = 0; atraso_ms(18,5); // Tempo restante do ciclo

Desvantagens: Incapaz de realizar outras tarefas ao mesmo tempo, o erro do oscilador de cristal tem um grande impacto.

05Perguntas frequentes e soluções (formato Q/A)

Q1: O que devo fazer se o microcontrolador 51 estiver conectado diretamente ao servo e não houver resposta?

R: Verifique se eles têm pontos em comum. O pólo negativo da fonte de alimentação do servo e o GND do microcontrolador devem estar conectados, caso contrário não haverá loop de sinal.

Q2: Como resolver o problema do servo tremendo e incapaz de corrigir o ângulo?

Melhore a precisão do temporizador, use um oscilador de cristal de 12MHz e reinstale o valor inicial a cada 100μs, para que a frequência de interrupção permaneça estável.

Q3: Uma porta de E/S pode ser usada para controlar vários servos ao mesmo tempo?

单片机可以直接驱动舵机吗_51单片机可以驱动舵机吗怎么设置_单片机怎么驱动舵机

A disse não. Cada servo precisa de uma linha de sinal separada. Vários servos podem compartilhar os fios positivo e terra, mas a fonte de alimentação deve ter energia suficiente.

Q4: Qual é a razão pela qual ele realmente gira para 30° quando está definido para 45°?

R: Há um erro na frequência do oscilador de cristal ou o tempo de alto nível não é preciso. Use um osciloscópio para medir a largura do pulso PWM e, em seguida, ajuste o valor high_time.

Q5: Dicas para escrever artigos: Como prolongar a vida útil da caixa de direção?

R: Para evitar travamento, adicione um capacitor. Conecte um capacitor eletrolítico de 100μF em paralelo entre os terminais positivo e negativo da fonte de alimentação do servo para filtrar as ondulações.

06Tabela de correspondência de pulso para diferentes modelos de caixa de direção (verificada)

Série de modelos Pulso de 0° Pulso de 90° Pulso de 180° Corrente máxima
SG90(9g) 0,5ms 1,5ms 2,4ms 250mA
MG995R 0,6ms 1,6ms 2,5ms 800ma
DS3218 0,5ms 1,5ms 2,5ms 1,2A
Servo analógico padrão 1,0ms 1,5ms 2,0ms 300mA

Fonte de dados: Manual oficial de dados de cada aparelho de direção (edição 2023-2025)

07Etapas de depuração e verificação

1. Obtenha a forma de onda medida e use um osciloscópio ou analisador lógico para verificar se o ciclo PWM está dentro da faixa de 20 ms mais ou menos 0,5 ms.

2. Ângulo de verificação: Escreva 1,5ms em nível alto, o servo deve estar ainda na posição de 90°

3. teste de carga: Gire suavemente o braço servo com a mão, a flutuação de tensão não deve exceder 0,3V

4. Mude de vários ângulos, atribua um valor de 1,0 ms, depois um valor de 1,5 ms e, em seguida, um valor de 2,0 ms em sequência e observe cuidadosamente sua rotação para ver se possui características suaves.

Tabela típica de solução de problemas

O servo não gira → Verifique o terra comum e a tensão da fonte de alimentação (4,8V-6V)

Tremores e tremores → Energia insuficiente ou conflitos de interrupção (desative interrupções irrelevantes)

Ele só pode girar 0° e 180°, o que faz com que o tempo de alto nível não mude linearmente. Neste caso, a variável count no código precisa ser verificada.

08Aplicação avançada: acione 8 servos ao mesmo tempo (solução de teste real YPMFG)

Usando um microcontrolador 51, com a ajuda de dois temporizadores e um array, pode acionar até 8 servos. Os principais métodos são:

O temporizador 0 aciona uma interrupção de 2,5 milissegundos e controla os momentos de inicialização de alto nível das 8 portas de E/S de maneira sequencial.

Cada servo é armazenado de forma independentehorário_altovariedade

Deve usar fonte de alimentação de comutação externa de 5V/10A ou superior para fonte de alimentação

estrutura de código

caractere não assinado servo_high[8] = {15,10,20,5,15,12,18,8}; //Valor do pulso de cada servo unsigned char current_servo = 0; //Na interrupção, o servo anterior é puxado para baixo e o servo atual é puxado para cima.

O uso da CPU desta solução é de cerca de 40% e ela ainda pode lidar com tarefas simples, como digitalização de chaves.

09Principais conclusões e recomendações de ação

Com um microcontrolador 51, é totalmente capaz de acionar o servo. Os principais fatores de sucesso são fonte de alimentação independente, tempo preciso, ou seja, interrupção de 100 μs e conexão de aterramento comum. Para iniciantes, você deve começar com um único servo, oscilador de cristal de 12 MHz e solução de interrupção de temporizador, e evitar usar a função de atraso diretamente.

Execute a lista de verificação agora

1. Prepare uma fonte de alimentação regulada de 5V/1A ou superior ou uma bateria de 4,8V

2. Escreva o código de inicialização do temporizador (interrupção de 100μs)

3. Use um multímetro para medir as tensões positivas e negativas do servo (sem carga não deve ser inferior a 4,5V)

4. Teste primeiro a posição de 90° (pulso de 1,5 ms) e depois expanda para outros ângulos

Dicas para escrever artigos: Se o microcontrolador for reiniciado durante a operação do servo, conecte imediatamente um capacitor de 470μF em paralelo à extremidade da fonte de alimentação do servo e encurte o comprimento do cabo de alimentação (menos de 20 cm). Siga este guia e você conseguirá obter um controle preciso do ângulo em 30 minutos.

Hora de atualização: 29/04/2026

Impulsionando o Futuro

Entre em contato com o especialista de produtos da Kpower para recomendar um motor ou caixa de engrenagens adequado para o seu produto.

Correio para Kpower
Enviar consulta
Mensagem do WhatsApp
+86 0769 8399 3238
 
kpowerMap