Publicado 2026-03-27
Você já se deparou com esta situação: você deseja controlar manualmente a direção da direção doservo, mas você não sabe como usar os botões mais simples para conseguir isso? Hoje falaremos sobre como o STM32 controla a rotação direta e reversa doservoatravés de botões, para que você possa atender facilmente a esse requisito.
A maior vantagem de usar botões para controlar o servo é que ele é intuitivo e conveniente. Imagine que você fez uma lata de lixo inteligente. A tampa abre quando você pressiona o botão e fecha quando você pressiona o botão novamente. Esta experiência interativa é natural? O controle de botão não requer um computador ou interface complicada. Ele responde quando pressionado. É especialmente adequado para protótipos de produtos ou equipamentos de pequenos lotes. Além disso, o GPIO do STM32 é muito simples de ler o status do botão. Isso pode ser alcançado com apenas algumas linhas de código e o limite de desenvolvimento é particularmente baixo.
Para aqueles que precisam de aplicativos de direção, o controle de botão é simplesmente "boas notícias para pessoas preguiçosas". Por exemplo, se quiser fazer um comedouro automático, pressione para entregar a comida e pressione para parar; ou faça um modelo de carro com controle remoto e use botões para controlar o ângulo de direção. Este método de controle não é apenas de baixo custo, mas também altamente confiável. Se o botão estiver quebrado, é barato substituí-lo. O segredo é que o custo de aprendizado do usuário é quase zero e qualquer pessoa pode apertar o botão.
Existem vários servos no mercado, como escolher o certo? Primeiro, observe seu cenário de uso. Se você apenas controla a direção e não precisa de muito esforço, um servo pequeno de 9g é suficiente, é barato e comum. Se você precisar dirigir algo mais pesado, como um braço robótico de metal, deverá usar este servo de alto torque. Preste atenção à tensão de trabalho do servo. 5V é comum, mas alguns são 7,4V. Deve corresponder à fonte de alimentação do STM32.
Existe também a compatibilidade dos sinais de controle. A maioria dos servos são controlados por sinais PWM com período de 20ms e tempo de alto nível de 0,5ms a 2,5ms correspondendo a 0 a 180 graus. Portanto, ao escolher um servo, certifique-se de confirmar se é um controle PWM padrão, caso contrário o código terá que ser alterado significativamente. Além disso, lembre-se de comprar um sobressalente extra no momento da compra. O servo é fácil de queimar quando está bloqueado, então ter um sobressalente faz você se sentir à vontade.
Os botões e servo estão conectados ao STM32. A fiação é o primeiro passo e o problema mais provável. O botão geralmente é conectado a uma porta GPIO e GND, e o resistor pull-up é ligado internamente, de modo que quando o botão é liberado, ele está em nível alto e, quando pressionado, está em nível baixo. Observe que é melhor conectar um capacitor de 0,1uF em ambas as extremidades do botão para eliminar a interferência de jitter. O servo está conectado à fonte de alimentação de 5V e GND, e a linha de sinal está conectada a outra porta GPIO. As fontes de alimentação devem ser separadas. A corrente inicial do servo é grande e compartilhar a fonte de alimentação com o STM32 pode facilmente causar um reset.
Aqui vai uma dica: alimente o servo separadamente, e a porta 5V do STM32 é usada apenas para botões e chips. Se a fonte de alimentação precisar ser compartilhada, a tensão será reduzida quando o servo for iniciado, fazendo com que o microcontrolador reinicie. Outra coisa é conectar todos os GNDs para garantir que o potencial de referência do sinal seja consistente. É melhor desenhar um diagrama simples antes de fazer a fiação e confirmar se está correto antes de ligar a energia para evitar queimar a placa.
![]()
A parte do código na verdade não é complicada. O núcleo é pesquisar o status do botão e alterar o ciclo de trabalho PWM do servo. Inicialize o temporizador para emitir PWM com período de 20ms. Primeiro, forneça um valor intermediário, como 1,5 ms de nível alto, para parar o servo em 90 graus. Então o loop principal detecta o botão. Se o botão avançar for pressionado, o ciclo de trabalho será aumentado para aumentar o ângulo do servo; se o botão reverso for pressionado, o ciclo de trabalho será reduzido. Lembre-se de adicionar um atraso para eliminar o jitter, caso contrário ele saltará vários quadros assim que você pressioná-lo.
Para evitar que o servo ultrapasse o ângulo limite, restrições devem ser feitas no código. Por exemplo, depois de girado 180 graus, não aumentará quando pressionado novamente; não diminuirá quando for revertido para 0 graus. Há outro pequeno detalhe: leva tempo para o servo girar. Pressioná-lo contínua e rapidamente pode facilmente fazer com que o servo não consiga acompanhar. Você pode atualizar o PWM no momento em que o botão é liberado ou atrasar 200 ms após cada pressionamento do botão para permitir a próxima ação. Isso vai se sentir muito melhor.
Você definitivamente encontrará problemas ao fazer isso pela primeira vez. O mais comum é que o servo não se mova. Não se preocupe, use um multímetro para verificar se a fonte de alimentação tem 5V e se há forma de onda na linha de sinal. Se você não possui um osciloscópio, pode escrever um programa simples para alterar os níveis alto e baixo do pino PWM e observá-lo com um LED. Se o LED piscar, significa que o temporizador está configurado corretamente. Olhe para o servo para ver se há um som de “chiado”. Se houver som, significa que ela está recebendo força, mas não se move, ou seja, a máquina está presa.
A instabilidade da tecla também é um problema comum, com um toque parecendo vários toques. A solução é adicionar software anti-bounce: após detectar que o botão está pressionado, atrasar 20ms e ler novamente. Se ainda estiver pressionado, execute a ação novamente. Além disso, se houver um grande número de chaves, você poderá usar o método de interrupção em vez de verificar o tempo todo no loop principal, o que economiza recursos e é sensível. Existem códigos prontos para esses problemas online, que podem ser usados com pequenas modificações.
Esta solução pode ser expandida para muitas coisas interessantes. Por exemplo, faça uma cortina inteligente controlada manualmente, pressione a direção para frente para abrir a cortina e inverta a direção para fechar; ou faça uma plataforma giratória, pressione o botão para girar 30 graus para tirar fotos. Existem também ferramentas simples que podem ser fabricadas na indústria, com botões para controle de fixação e afrouxamento, que são muito mais baratos que os pneumáticos. Para quem fabrica produtos, os servos controlados por botão são uma das soluções de interação homem-computador de menor custo.
Se você estiver trabalhando em uma casa inteligente ou em um projeto DIY, esse recurso certamente será útil. Pense nisso, usar o STM32 e adicionar alguns botões e servos pode atender a muitas necessidades de controle manual e é estável e confiável. A chave é que o código e o hardware são simples, os parâmetros podem ser alterados para se adaptarem a diferentes projetos e a capacidade de reutilização é particularmente forte. Muitos produtos pequenos usam esse método para verificar rapidamente suas funções e, em seguida, otimizá-los e atualizá-los.
Que novos truques você acha que pode usar com o servo e os botões em seu projeto? Bem-vindo a compartilhar suas ideias na área de comentários ou pesquisar diretamente em nosso site oficial para ver mais casos práticos do STM32. Curta e salve este artigo para não se perder na próxima vez que usá-lo!
Hora de atualização: 27/03/2026
Entre em contato com o especialista de produtos da Kpower para recomendar um motor ou caixa de engrenagens adequado para o seu produto.