Controle de velocidade e direção do motor DC com microcontrolador stm32f103 e driver de motor l293d

Neste tutorial vou ensinar como controlar a velocidade do motor CC usando o microcontrolador stm32 e o IC de controle de ponte half h l293d. Os motores CC são motores comuns que você vê em suas casas (bombas d'água CC, ventiladores CC), brinquedos, etc. Os motores CC giram a uma velocidade constante, mas sua velocidade pode ser variada e controlada utilizando algumas técnicas. Uma dessas técnicas e a mais popular é fornecer-lhe uma tensão variável. Por tensão variável quero dizer fornecer menos quantidade de tensão (potência) do que a classificação máxima de um motor CC específico. Assim como nossos ventiladores de teto (funcionam em tensão CA), a velocidade de rotação é controlada variando o potenciômetro (resistor variável) conectado no soquete dos botões. O resistor varia a potência quando giramos seu botão em qualquer direção.
O resistor variável é uma boa escolha para controlar a velocidade do motor. Mas se quisermos inserir alguma lógica de controle (por exemplo, alterar a direção de rotação do motor) ou controlar com precisão as rpm dos motores (resoluções por minuto), então a técnica do resistor variável não poderá atender totalmente às nossas necessidades. Para alcançar a lógica superior, a técnica pwm (modulação por largura de pulso) é a mais adequada. Na modulação por largura de pulso, a tensão constante de entrada para o motor é dividida em subciclos para reduzir a quantidade de tensão de entrada.
Neste projeto nosso objetivo é controlar a velocidade do motor com microcontrolador stm32. A técnica Pwm é utilizada no projeto para controlar a velocidade e direção do motor. A placa pré-montada do micorcontrolador St32f103c8t6 é usada no projeto. Stm32cubemx é usado para microcontroladores stm32f103c8t6 gpio, configuração de temporizadores. Keil arm mdk 5 é usado para escrever e compilar o código do projeto. O código é escrito utilizando bibliotecas HAL stm32. Se você é novo e não conhece as bibliotecas stm32cubemx, keil arm mdk 5 e HAL, aconselho você a primeiro fazer o tutorial de introdução com stm32cubemx e keil arm e bibliotecas HAL. Basta clicar no botão abaixo para fazer o tutorial.

Primeiros passos stm32cubemx, keil arm e bibliotecas HAL

Vou controlar a velocidade de dois motores CC conectados à ponte l293d half h ic. O que é l293d? Os microcontroladores funcionam em lógica TTL de 3,3 a 5 volts. Onde os motores CC funcionam de 5 a +24 volts. Não é possível acionar motores diretamente dos pinos de saída do microcontrolador. Os pinos de saída do microcontrolador podem fornecer apenas 5 volts e 25 mA de corrente, o que não é adequado para motores CC iniciarem a rotação. Os microcontroladores Stm32 funcionam em lógica TTL de 3,3 volts. Para este projeto estou usando motores CC de 12 volts que requerem 200 mA de corrente para rotação constante. Portanto, precisamos de um circuito externo para acionar o motor usando o microcontrolador stm32.

Transistor ou Mosfet como circuito externo para acionar, controlar a velocidade e direção do motor DC

Um transistor externo ou mosfet é a melhor escolha para acionar um motor de 12 volts usando o microcontrolador stm32. A base do transistor, mosfet, é conectada ao pino de saída stm32 e o motor será inserido entre o coletor do transistor. Um sinal pwm variável para a base do transistor do pino de saída stm32 pode controlar facilmente a velocidade de rotação do motor CC. Mas também precisamos mudar a direção do motor, o que não é possível nesta configuração.

Circuito de meia ponte h para controle de direção do motor CC

No circuito de meia ponte h, dois transistores são usados ​​para controlar o sentido de rotação do motor CC. Fazer um circuito de meia ponte h com requisitos de potência do motor CC não é uma tarefa fácil. L293d é um CI pré-montado contendo duas configurações de ponte meio h. Podemos dirigir, controlar a direção e a velocidade de dois motores CC facilmente com o driver de motor l293d ic.

Circuito equivalente de canal de ponte única meia h L293d

Circuito equivalente de canal de ponte única meia h L293d
Para aprender sobre a pinagem e a finalidade de cada pino no l293d você precisa fazer outro tutorial. Expliquei profundamente o circuito l293d e seu funcionamento no tutorial. O tutorial irá ajudá-lo a entender o diagrama de circuito do projeto abaixo. Clique no botão abaixo para fazer o tutorial.

L293d pinado e funcionando

Projeto funcionando

Vou controlar o sentido de rotação dos motores CC e sua velocidade no projeto. Para isso decidi conectar quatro botões como entrada. Os botões controlarão a direção e a velocidade dos motores. Discutirei a finalidade de cada botão mais tarde. Para quatro botões como entrada, preciso de quatro gpio's do microcontrolador stm32 declarados como entrada. Declarei os pinos 6, 7, 8 e 9 da Porta B como entrada. Também ativei os resistores pull up associados a esses pinos.
Para controlar a direção de dois motores CC através de circuitos de meia ponte, preciso de quatro controles. Basicamente, quatro pinos pgio do microcontrolador são necessários para controlar a direção de rotação de dois motores CC. Declarei quatro pinos 0, 1, 2 e 3 da Porta A do microcontrolador stm32 como saída.

Finalmente, para controlar a velocidade do motor, preciso de dois sinais pwm. Vou usar os pinos 0 e 1 da Porta B como fontes pwm. Gerar pwm usando stm32 não é uma tarefa fácil. É preciso cuidar de muitas restrições. Tenho outro tutorial sobre como gerar pwm com microcontrolador stm32. Discuti todas as restrições de frequência, ciclo de trabalho e contador, etc. naquele tutorial. Por favor, siga esse tutorial antes de prosseguir. Se você não seguir o tutorial, não conseguirá entender o código abaixo.

Cálculos e restrições da fórmula de geração de pwm Stm32

Se você seguiu o tutorial acima, provavelmente agora sabe como gerar o pwm desejado com o microcontrolador stm32. Para controlar a velocidade do motor CC, tenho que variar o sinal pwm. Variar o sinal pwm não é uma tarefa difícil se você seguiu o tutorial acima. Inimigo variando o sinal pwm você precisa calcular mais algumas variáveis. Neste projeto estou gerando um sinal pwm de ciclo de trabalho variável na frequência de 50 Hz. Na verdade calculei esses valores para outro projeto (Servo motor com microcontrolador stm32) e usei esses valores neste projeto. Você pode ver as configurações do projeto, se desejar. Isso irá ajudá-lo nas configurações do stm32cubemx pwm.

Configurações Stm32cubemx para este projeto emprestadas de outro projeto

As configurações de gpio do Stm32cubemx e as configurações do temporizador pwm são fornecidas abaixo. Você deve seguir os tutoriais acima para entender cada restrição e como elas são calculadas e inseridas no stm32cubemx.

Stm32cubemx pwm timer 3 e configurações de gpio

Stm32cubemx pwm timer 3 e configurações de gpio
Estou usando o oscilador interno de 8 Mhz do microcontrolador stm32f103 para fonte de clock para pinos gpio e para geração de pwm. Essas configurações são necessárias para gerar o sinal pwm de frequência de 50 Hz conforme discutido acima.

Configurações do relógio pwm do microcontrolador stm32f103 em stm32cubemx

Configurações do relógio pwm do microcontrolador stm32f103 em stm32cubemx
Para pwm estou usando os pinos 0 e 1 da porta B do stm32. Com ambos os pinos do microcontrolador, o timer-3 está associado. Com o pino 0, o temporizador 3, o canal 3 está vinculado e com o pino 1, o temporizador 3, o canal 4 está vinculado. Temos que ativar esses canais antes de começar a trabalhar com eles. Como ativar canais? As configurações são fornecidas abaixo.

Configurações do canal pwm do temporizador Stm32 3 em stm32cubemx

Configurações do canal pwm do temporizador Stm32 3 em stm32cubemx

Circuito de projeto

Os pinos A0 e A1 da porta A são usados ​​para controlar a direção do motor-1. O pino A0 do microcontrolador está conectado à entrada 1 do l293d e o pino A1 está conectado à entrada 2 do l293d. O sinal Pwm é fornecido para habilitar o pino do motor 1 ou canal 1 do l293d. O pino 1 da porta B do Stm32 está conectado para habilitar 1 do l293d. Da mesma forma, os pinos A2 e A3 da Porta A do microcontrolador stm32 são usados ​​para controlar a velocidade do motor 2 ou canal 2 do l293d. O pino A2 do stm32 está conectado à entrada 4 do microcontrolador stm32 e o pino A3 do stm32 está conectado ao pino de entrada 3 do canal 2 do l293d. O pino de habilitação do canal 2 do l293d está conectado ao pino B0 do microcontrolador stm32.
Nossos motores de 12 volts são conectados aos pinos de saída do l293d. O motor 1 é conectado aos pinos de saída do canal 1 e o motor 2 é conectado aos pinos de saída do canal 2 do driver do motor l293d. Os pinos de aterramento estão aterrados.
Observação: O aterramento da alimentação do microcontrolador stm32 e da alimentação do motor l293d deve ser comumente aterrado para conclusão do circuito e funcionamento adequado.

Controle de velocidade e direção do motor DC com microcontrolador stm32 e driver de motor l293d

Controle de velocidade e direção do motor DC com microcontrolador stm32 e driver de motor l293d

Funções dos botões de entrada

  • B9 – Pressionar o botão B9 alternará o sentido de rotação do motor CC. Se estiver se movendo para frente, pressionar o botão B9 mudará a direção para trás.
  • B8 – Pressionar o botão B8 definirá o ciclo de trabalho pwm para 75% e diminuirá com a velocidade de rotação do motor.
  • B7 – Pressionar o botão B7 definirá o ciclo de trabalho pwm para 50%. O motor CC gira a metade da velocidade que a máxima.
  • B6 – Pressionar o botão B6 definirá o ciclo de trabalho pwm para 25% e diminuirá ainda mais a velocidade de rotação.

Chegando ao código. A lógica principal do código é antes e entre o loop while 1. Se você passou pelos tutoriais acima sobre Pwm e stm32cubemx como começar, você pode entender facilmente as instruções de código abaixo. As instruções são as mesmas dos tutoriais anteriores, apenas a sequência de instruções é alterada conforme desejado no projeto.

No código acima, as primeiras instruções antes de while 1 loop iniciar ambos os motores CC e o sinal pwm são emitidos com ciclo de trabalho de 100%. Durante 1 loop, cada pressionamento de botão é verificado continuamente. Se qualquer botão for pressionado, a função correspondente (direção invertida, velocidade alterada) será executada. Espero que o código acima seja fácil para você se você tiver passado por todos os tutoriais listados na postagem.
Trabalho futuro:

Com o mesmo código e lógica acima você pode não apenas acionar motores CC, mas também servomotores. No circuito você tem que alterar algumas configurações como tensão de entrada para l293d para acionamento do servo motor (5 a 12 v). Os servomotores funcionam na frequência de 50 Hz e têm ciclo de trabalho entre 1 milissegundo e 3 milissegundos. Geramos pwm na frequência de 50 Hz. Assim, você pode conectar um servo na saída e verificar se o código funciona (definitivamente funcionará). Você também pode atenuar um led conectando-o na saída l293d com o mesmo código, circuito acima. Pode ser necessário corrigir a direção e não alterá-la para LED. Já que a polaridade do led não pode ser alterada.

Baixe o código do projeto. A pasta contém arquivos de projeto stm32cubemx e keil arm ide. Todas as bibliotecas e dependências do projeto estão incluídas na pasta. 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.