Controlando Servo Motor com microcontrolador Stm32f103 usando configurador de código stm32cubemx da STMicroelectronics e keil uvision 5 ide para microcontroladores da série cortex m1

Este tutorial faz parte de uma série de tutoriais sobre geração de sinal pwm (modulação por largura de pulso) com o microcontrolador stm32f103. Anteriormente, vimos como gerar sinal pwm com microcontrolador stm32 usando keil uvision 5 ide e configurador de código stm32cubemx. Avançamos na geração de sinal pwm variável usando temporizadores internos do microcontrolador stm32f103. Estudamos sobre geração de pwm, agora é hora de colocar na prática e controlar um periférico com sinal pwm. Decidi controlar um servo motor de brinquedo simples com microcontrolador stm32f103. Usei dois servo motores no projeto para testar o código. Primeiro usei o servo motor tower pro SG-90. Este motor funciona bem, mas não moveu o braço na posição correta, sempre há alguns graus de tolerância nos resultados reais. Você pode comprar um por um preço justo de US $ 3. Outro motor que acabei de testar é o HS-785HB, ele gira corretamente, mas requer mais potência (corrente). Para este tutorial eu recomendo usar o servo motor tower pro sg90 devido ao menor consumo de energia e simplicidade.

Princípio de funcionamento do servo motor

Os servomotores são motores pequenos, diferentemente do tamanho, possuem maior torque e podem movimentar cargas pesadas. Seu pequeno tamanho e alto torque os tornaram populares entre os fabricantes de brinquedos. Muitos brinquedos que estão ao nosso redor contêm servomotores junto com motores CC. Normalmente, os servomotores em estado ideal consomem pouca energia, mas durante a movimentação da carga a energia dispara e os servos começam a consumir maior quantidade de corrente.
Os servomotores funcionam com sinais pwm (modulados por largura de pulso). Eles têm um braço/armadura que gira quando tensão, corrente e sinal pwm suficientes são aplicados ao motor. Quando o braço gira, ele move tudo que aparece em seu caminho.
Nem todo servo motor pode mover cargas pesadas. Depende de suas especificações e detalhes. Normalmente, os servomotores de brinquedo podem movimentar cargas de 1 kg a 12 kg. Existem dois tipos de servo motores DC e AC. Os servomotores CA podem mover cargas ainda mais pesadas, pois são usados ​​em aplicações industriais. Os servomotores DC são melhores para projetos pequenos. Neste projeto também estou utilizando um servo motor DC com microcontrolador stm32.
Como você aprendeu, os servomotores funcionam com sinal pwm. A maioria dos servomotores CC requer frequência de 50 Hz para operação com ciclo de trabalho variável. Abaixo estão os formulários de onda de requisitos padrão. Nosso motor também exige o mesmo padrão.
No período de 20 milissegundos e ciclo de trabalho de 2 milissegundos, o braço do servo motor se move para 180 graus. No ciclo de trabalho de 1,5 milissegundos, o braço se move para 90 graus e no ciclo de trabalho de 1 milissegundo, o braço gira para 0 graus.

Servo com microcontrolador stm32

Vou fazer a interface do servo com o microcontrolador stm32f103c8t6. Comprei uma placa pré-montada e barata que monta o microcontrolador nela. Para girar o braço do servo motor, três pinos do microcontrolador são usados ​​como entrada. Para emitir o sinal pwm, um pino é usado. Os pinos 0,1 e 2 da porta A são usados ​​como entradas e o pino 6 da porta B é usado para emitir o sinal pwm.
O microcontrolador Stm32f103 funciona em 3,3 volts enquanto o servo motor tower pro sg90 funciona em 5 volts. Portanto, tanto o motor do módulo quanto o microcontrolador devem ser alimentados com fontes de energia diferentes. Não podemos acionar o servo diretamente com o sinal pwm de saída stm32 porque está em forma de onda de 3,3 V e o motor requer 5 V. Inseri um circuito entre os dois módulos para converter 3,3v em 5v. O primeiro transistor está convertendo o sinal de entrada em saída de 5 V, mas o sinal é invertido. Outro transistor inverte o sinal invertido e o traz de volta à lógica original. Portanto, agora 3,3 V nas lagoas cruzadas de entrada para 5 V na saída do servo motor.

Servo motor controlado com microcontrolador Stm32f103

Servo motor controlado com microcontrolador Stm32f103
No circuito acima, certifique-se de conectar os aterramentos da fonte de alimentação do motor e do microcontrolador. Você também pode usar o IC ULN2003 aqui em vez dos dois transistores. ULN2003 contém o mesmo circuito com diodos volantes.
Em stm32cubemx inicialize 3 pinos Porta-A pinos 1,2 e 3 como entrada. Se você não sabe como fazer isso, tenho um tutorial simples para você.

Introdução ao microcontrolador Stm32f103

Vou emitir o sinal pwm no PB6. Para isso você tem que fazer algumas configurações no ide stm32cubemx. Como selecionar o canal e configurar algumas outras coisas. Antes de prosseguir, gostaria que você fizesse um tutorial simples sobre seleção de pinos pwm e fórmula de cálculo do ciclo de trabalho.

Configurações Pwm e condução de fórmula

O tutorial acima é muito importante para entender o fluxo de código e as configurações abaixo. Oscilador interno do microcontrolador stm32 é usado no projeto. Embora a placa tenha um oscilador externo de 8 MHz, eu preferi usar o interno. O clock final do temporizador 4 é de 1 MHz.
Em seguida, calculei os valores do registro do contador e outros valores necessários para entrada na configuração do timer-4. Você pode ver a fórmula e outros cálculos de valores no tutorial acima.
Meu período de contador é 1000. Isso significa que em 1000 o ciclo de trabalho pwm será 100% com período de 20 milissegundos ou frequência de 50 Hz. A 500 pwm, o ciclo de trabalho será de 50%, o que se traduz em 10 milissegundos. Em 5% será 1 milissegundo e em 10% será 2 milissegundos e em 7,5% será 1,5 milissegundos.
Este valor do contador é usado no código para mover o braço do servo motor. Abaixo está o código. Quando o botão 3 é pressionado, o motor se move 180 graus. Quando o botão 2 é pressionado, o botão gira 90 graus e quando o botão 1 é pressionado, ele volta a 0 graus.
Resistores pull up internos dos pinos Porta-A Pinos nº 1,2 e 3 são ativados. Conseqüentemente, apenas os botões são conectados diretamente ao terra.
Baixe o código do projeto. O código está escrito em keil uvision 5 ide. Stm32cubemx é usado para configuração do microcontrolador. A pasta Code contém todos os arquivos keil e stm32cubemx. O código é de código aberto, você pode modificá-lo e usá-lo de acordo com suas necessidades. Por favor, forneça-nos seu feedback sobre o projeto.
Código/Arquivos

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.