0% acharam este documento útil (0 voto)
133 visualizações22 páginas

Arduino Motor HD

O documento descreve um programa Arduino para controlar a velocidade de rotação de um motor brushless retirado de um disco rígido usando transistores, resistores e diodos. Ele explica como configurar o Arduino e os componentes elétricos, e fornece exemplos de código para atingir diferentes velocidades de rotação do motor variando os parâmetros de delay.

Enviado por

EU MESMO
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
133 visualizações22 páginas

Arduino Motor HD

O documento descreve um programa Arduino para controlar a velocidade de rotação de um motor brushless retirado de um disco rígido usando transistores, resistores e diodos. Ele explica como configurar o Arduino e os componentes elétricos, e fornece exemplos de código para atingir diferentes velocidades de rotação do motor variando os parâmetros de delay.

Enviado por

EU MESMO
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Por Fernando Koyanagi

Objetivo
Nosso objetivo será criar um programa para controlar a
velocidade de rotação do motor que retiramos de um disco rígido.

Utilizaremos: 1 arduino UNO, 1 motor brushless de HD, 3


Transistores Tip122, 3 resistores 1200Ω, 3 diodos 1N4007 e uma
fonte de alimentação 12v / 5v.
Arduino UNO

3
TIP122

4
1N4007

5
Resistor 1k2 Ω

6
Em [Link]
Download arquivo PDF dos diagramas
Download arquivo INO do código fonte

7
Esquema Elétrico
Montagem
Exemplo 1

Vamos fazer um programa para chegar ao máximo


da rotação de nosso motor, ou seja, 5400 rpm.

Obs: utilizando alimentação de 5v


Vamos ao código
Começaremos definindo as constantes que utilizaremos durante nosso código.

//definição dos pinos que cada bobina representa no arduino


#define A 6
#define B 9
#define C 11

//intervalo de delay inicial que irá decair para aumentarmos a aceleração


int intervalo = 6000;

//variável responsável por armazenar o valor que decrementaremos de nosso delay


int decremento = 15;

//variáveis que armazenam os tempo em microssegundos para o delay.


const int DELAY_MINIMO = 450;
const int DELAY_ACEL_MAXIMA = 1200;
const int DELAY_MARCO_UM = 4500;
const int DELAY_MARCO_DOIS = 3200;
const int DELAY_MARCO_TRES = 2200;
Setup
Na função setup(), vamos apenas configurar como OUTPUT os pinos que
utilizaremos para controlar as bobinas e o LED de indicação.

void setup()
{
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);

pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);//apaga o LED L
}
Loop
Na função loop(), vamos fazer as chamadas para controle das bobinas e em seguida
configurar a aceleração para ir aumentando a velocidade de giro do motor.
void loop()
{
//chamada da ativação das bobinas
pulso(1);
pulso(2);
pulso(3);
pulso(4);
pulso(5);
pulso(6);
//enquanto o intervalo for maior que DELAY MÁXIMO o decremento é maior que 1 unidade.
if(intervalo > DELAY_ACEL_MAXIMA)
{
//outras faixas de intervalo para ir controlando a aceleração
if(intervalo < DELAY_MARCO_UM)
decremento = 10;
else if(intervalo < DELAY_MARCO_DOIS)
decremento = 5;
else if(intervalo < DELAY_MARCO_TRES)
decremento = 2;
}
else decremento = 1;
//...
Loop (continuação)

//...
//tempo mínimo de delay permitido (quanto menor mais rápido o giro)
if(intervalo > DELAY_MINIMO){
//subtrai de intervalo o valor atual de decremento
intervalo -= decremento;
}
else {
//acende o led L do arduino ao chegar na velocidade máxima permitida
digitalWrite(LED_BUILTIN, HIGH);
}
}
PULSO
void pulso(int bobina)
{

switch(bobina)
{
case 1: //liga a bobina A
digitalWrite(A,HIGH);
break;
case 2://liga a bobina A e B
digitalWrite(A,HIGH);
digitalWrite(B,HIGH);
break;
case 3://liga a bobina B
digitalWrite(B,HIGH);
break;
case 4://liga a bobina B e C
digitalWrite(B,HIGH);
digitalWrite(C,HIGH);
break;
case 5://liga a bobina C
digitalWrite(C,HIGH);
break;
case 6://liga a bobina C e A
digitalWrite(C,HIGH);
digitalWrite(A,HIGH);
break;
}
PULSO (continuação)

//tempo que a(s) bobina(s) ficam ligadas


delayMicroseconds(intervalo);

//desliga todas as bobinas


digitalWrite(A,LOW);
digitalWrite(B,LOW);
digitalWrite(C,LOW);
delayMicroseconds(intervalo);
}
Exemplo 2

Agora vamos fazer algumas modificações em nosso


programa para que nosso motor gire em sua potência
Mínima.
Modificações para 100 rpm

Primeiramente mude o valor da variável “intervalo”


para 45000.
//intervalo de delay inicial que irá decair conforme aceleração
int intervalo = 45000;
Modificações

A seguir na função LOOP, deixa apenas as chamadas para


a função PULSO.

void loop()
{
//chamada da ativação das bobinas
pulso(1);
pulso(2);
pulso(3);
pulso(4);
pulso(5);
pulso(6);
}
Agora é só compilar e executar. O motor ficará girando
em sua potência mínima.
Veja abaixo uma tabela com a configuração para os
valores máximos e mínimos do motor.

Intervalo DELAY_MINIMO Rpm Voltagem


6000 220 5400 12v
41500 Não usa 141 12v
6000 450 5400 5v
45000 Não usa 101 5v
Em [Link]
Download arquivo PDF dos diagramas
Download arquivo INO do código fonte

22

Você também pode gostar