AULA 6 - Microcontroladores - Técnico: mudanças entre as edições

De IFSC
Ir para navegação Ir para pesquisar
imported>Fargoud
imported>Fargoud
 
(15 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
[[MCO1870321| << Página do curso ]]
=Sinal PWM – Pulse Width Modulation=
=Sinal PWM – Pulse Width Modulation=
(Modulação por Largura de Pulso)
(Modulação por Largura de Pulso)
Linha 28: Linha 30:


[[imagem: dutycicle2.png|center]]
[[imagem: dutycicle2.png|center]]
[[imagem: dutycicle3.png|center]]


[[imagem: dutycicle32.png|center]]
[[imagem: dutycicle32.png|center]]
Linha 54: Linha 54:


[[imagem: dutycicle4.png]]
[[imagem: dutycicle4.png]]
Veja também: [https://www.electronicshub.org/rgb-led-with-arduino/ LED RGB com arduino]


---------------
---------------
==Controle de velocidade de motor CC de 5V, sem fonte externa:==
==Controle de velocidade de motor CC de 5V, sem fonte externa:==


Linha 65: Linha 68:
* protoboard e fios
* protoboard e fios
* 1 resistência de 2,2 K  
* 1 resistência de 2,2 K  
* 1 transistor TIP120 [[imagem: pintransistor.png]]
* 1 transistor TIP120 [[imagem: pintransistor.png]] !!!!!
* 1 diodo 1N4148 [[imagem: pindiodo.png]]
* 1 diodo 1N4148 [[imagem: pindiodo.png]]
* 1 potenciômetro de 10 K  
* 1 potenciômetro de 10 K  
* 1 motor de 5V
* 1 motor de 5V
* Na verdade, foram utilizados um BC548 e BD137, ligados pelo emissor do primeiro na base do segundo, e pelos coletores (Darlington).


[[imagem: esqmontagemmotor1.png|center]]
[[imagem: esqmontagemmotor1.png|center]]
[[imagem: montagemmotor2.png|center]]


O potênciometro envia a informação da velocidade para o pino analógico 0.
O potênciometro envia a informação da velocidade para o pino analógico 0.
Linha 79: Linha 82:
[[imagem: esqmontagemmotor2.png|center]]
[[imagem: esqmontagemmotor2.png|center]]


[[imagem: montagemmotor3.png|center]]
As pinagens destes transistores são:
[[imagem: pinagemtransist.png|center]]


[[imagem: montagemfinalpwm.png|center]]


link para o vídeo: [https://www.youtube.com/watch?v=m1V5eU_oNE4 Acionando motor 5V com Arduino]
link para o vídeo: [https://www.youtube.com/watch?v=1iKTvWCd2dM Acionando motor 5V com Arduino]


'''Código:'''
'''Código:'''
   
   
  int potPin = 0;                           // Pino analógico 0 conectado no potênciometro  
  int potPin = 0;             // Pino analógico 0 conectado no potênciometro  
  int transistorPin = 9;                 // Base do transistor conectada ao arduino pelo pino digital 9  
  int transistorPin = 9;     // Base do transistor conectada ao arduino pelo pino digital 9  
  int potValue = 0;                       // Valor lido no potênciometro
  int potValue = 0;           // Valor lido no potênciometro
/*** FUNÇÃO setup() ***/
void setup() {                  // Seta o transistor (pino 9) como saída
  pinMode(transistorPin, OUTPUT);
}
/*** FUNÇÃO loop() ***/
void loop() {                       
  potValue = analogRead(potPin) / 4;  // lê o potênciometro, converte a leitura para valor entre 0 e 255
                                      //para usar na saída PWM
  analogWrite(transistorPin, potValue); //potValue altera a alimentação do motor através do transistor
}
 
Para indicar a faixa de velocidade do motor, com algumas modificações no circuito e no código, pode-se acionar também um bargraph:
 
[[imagem: esqmontagemmotor3.png|center]]
 
 
'''Código 2:'''
int potPin = 0;            // Pino analógico 0 conectado no potênciometro
int transistorPin = 11;      // Base do transistor conectada ao arduino pelo pino digital 9
int potValue = 0;          // Valor lido no potênciometro
int LED1 = 3, LED2 = 5, LED3 = 6, LED4 = 9;
  /*** FUNÇÃO setup() ***/
  /*** FUNÇÃO setup() ***/
  void setup() {                         // Seta o transistor (pino 9) como saída
  void setup() {                   // Seta o transistor (pino 9) como saída
   pinMode(transistorPin, OUTPUT);
   pinMode(transistorPin, OUTPUT);
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
  }
  }
  /*** FUNÇÃO loop() ***/
  /*** FUNÇÃO loop() ***/
  void loop() {                         
  void loop() {                         
   potValue = analogRead(potPin) / 4;   // lê o potênciometro, converte a leitura para valor entre 0 e 255 para usar na saída PWM
   potValue = analogRead(potPin) / 4;   // lê o potênciometro, converte a leitura para valor entre 0 e 255  
                                      //para usar na saída PWM
   analogWrite(transistorPin, potValue); //potValue altera a alimentação do motor através do transistor
   analogWrite(transistorPin, potValue); //potValue altera a alimentação do motor através do transistor
if(potValue<254){ //acende só o primeiro led do bargraph
    analogWrite(LED1,254);
    analogWrite(LED2,0);
    analogWrite(LED3,0);
    analogWrite(LED4,0);
  }
  if(potValue>254 and potValue<511){ //acende dois leds do bargraph
  analogWrite(LED2,254);
  analogWrite(LED3,0);
  analogWrite(LED4,0);
}
if(potValue>511 and potValue<765){ //acende três leds do bargraph
  analogWrite(LED3,254);
  analogWrite(LED4,0);
}
if(potValue>765){ //acende todos os leds do bargraph
  analogWrite(LED4,254);
}
  }
  }
---------------
---------------
==Controle de velocidade de motor CC de 12V, com bargraph:==
 
==Controle de velocidade de motor CC de 12V, com ''bargraph'':==
Regulador de velocidade simples para motores CC de 12V:
Regulador de velocidade simples para motores CC de 12V:


Linha 116: Linha 167:
* 1 fonte de 12v  
* 1 fonte de 12v  


[[imagem: montagemmotor.png|center]]
[[imagem: montagemmotor4.png|center]]


link para o vídeo: [https://www.youtube.com/watch?v=TWsv4W8rlIM Acionando motores de 12V com arduino]
link para o vídeo: [https://www.youtube.com/watch?v=TWsv4W8rlIM Acionando motores de 12V com arduino]
Linha 160: Linha 211:
   }  
   }  
  }
  }
----
[[MCO1870321| << Página do curso ]]
{| border="1" cellpadding="5" cellspacing="0"
! style="background: #cdc5bf;" | [[AULA 5 - Microcontroladores - Técnico| Leitura e escrita nas portas analógicas ]]
! style="background: #cdc5bf;" | AULA 6 -  PWM e acionamento motores
! style="background: #cdc5bf;" | [[AULA 7 - Microcontroladores - Técnico| Programação C >> ]]
|}

Edição atual tal como às 09h57min de 25 de julho de 2018

<< Página do curso

Sinal PWM – Pulse Width Modulation

(Modulação por Largura de Pulso)

PWM (Pulse Width Modulation – Modulação por Largura de Pulso) é uma técnica para obter resultados analógicos por meios digitais.

Essa técnica consiste na geração de uma onda quadrada em uma frequência muito alta em que pode ser controlada a porcentagem do tempo em que a onda permanece em nível lógico alto.

Esse tempo é chamado de Duty Cycle (Ciclo de trabalho) e sua alteração provoca mudança no valor médio da onda, indo desde 0V (0% de Duty Cycle) a 5V (100% de Duty Cycle) no caso do Arduino.

O Arduino UNO possui 6 (seis) portas PWM, 3, 5, 6, 9, 10 e 11.

O sinal PWM pode variar de 0 a 255 e para ativá-lo basta usar a seguinte instrução em uma das portas PWM:

  analogWrite(pin, sinal_pwm);

Note que as portas PWM são todas digitais, porém o sinal é modulado “como se fosse” um sinal analógico.

Ciclo de Trabalho – Duty-Cicle

O sinal PWM possui um ciclo de trabalho que determina com que frequência o sinal muda do nível lógico HIGH para o nível lógico LOW e vice versa.

No Arduino a frequência do PWM pode ser definida entre 32Hz até 62kHz.

Duty cicle = (100% * largura do pulso) / período
Dutycicle.png
Dutycicle2.png
Dutycicle32.png

O valor do Duty Cycle usado pelo Arduino é um inteiro armazenado em 8 bits, de forma que seu valor vai de 0 (0%) a 255 (100%).

Usos do PWM

Geração de tensão analógica de 0 a 5V:

Para um sinal PWM de valor 200 temos:

Se 255 é 100%, 200 é aproximadamente 78,4%.
Como a tensão máx de saída do Arduino é 5V a tensão média do sinal PWM será:
Vmédio = Vmax*Duty Cycle(%)
Vmédio=5*78,4%
Vmédio=3,92V

Acionamento analógico de atuadores:

Neste exemplo, a intensidade de um led de alto brilho, que depende da tensão sobre o LED, será alterada com sinal PWM

Dutycicle4.png

Veja também: LED RGB com arduino


Controle de velocidade de motor CC de 5V, sem fonte externa:

Regulador de velocidade simples para motores CC de 5V:

Componentes:

  • Arduino
  • protoboard e fios
  • 1 resistência de 2,2 K
  • 1 transistor TIP120 Pintransistor.png !!!!!
  • 1 diodo 1N4148 Pindiodo.png
  • 1 potenciômetro de 10 K
  • 1 motor de 5V
* Na verdade, foram utilizados um BC548 e BD137, ligados pelo emissor do primeiro na base do segundo, e pelos coletores (Darlington).
Esqmontagemmotor1.png

O potênciometro envia a informação da velocidade para o pino analógico 0. Na indisponibilidade dos transistores Darlington da Texas, fizemos:

Esqmontagemmotor2.png

As pinagens destes transistores são:

Pinagemtransist.png
Montagemfinalpwm.png

link para o vídeo: Acionando motor 5V com Arduino

Código:

int potPin = 0;             // Pino analógico 0 conectado no potênciometro 
int transistorPin = 9;      // Base do transistor conectada ao arduino pelo pino digital 9 
int potValue = 0;           // Valor lido no potênciometro
/*** FUNÇÃO setup() ***/
void setup() {                   // Seta o transistor (pino 9) como saída
  pinMode(transistorPin, OUTPUT);
}
/*** FUNÇÃO loop() ***/
void loop() {                         
 potValue = analogRead(potPin) / 4;   // lê o potênciometro, converte a leitura para valor entre 0 e 255 
                                      //para usar na saída PWM
 analogWrite(transistorPin, potValue); //potValue altera a alimentação do motor através do transistor
}

Para indicar a faixa de velocidade do motor, com algumas modificações no circuito e no código, pode-se acionar também um bargraph:

Esqmontagemmotor3.png


Código 2:

int potPin = 0;             // Pino analógico 0 conectado no potênciometro 
int transistorPin = 11;      // Base do transistor conectada ao arduino pelo pino digital 9 
int potValue = 0;           // Valor lido no potênciometro
int LED1 = 3, LED2 = 5, LED3 = 6, LED4 = 9;
/*** FUNÇÃO setup() ***/
void setup() {                   // Seta o transistor (pino 9) como saída
  pinMode(transistorPin, OUTPUT);
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
}
/*** FUNÇÃO loop() ***/
void loop() {                         
 potValue = analogRead(potPin) / 4;   // lê o potênciometro, converte a leitura para valor entre 0 e 255 
                                      //para usar na saída PWM
 analogWrite(transistorPin, potValue); //potValue altera a alimentação do motor através do transistor
if(potValue<254){ //acende só o primeiro led do bargraph
   analogWrite(LED1,254); 
   analogWrite(LED2,0); 
   analogWrite(LED3,0); 
   analogWrite(LED4,0); 
 } 
 if(potValue>254 and potValue<511){ //acende dois leds do bargraph
  analogWrite(LED2,254); 
  analogWrite(LED3,0); 
  analogWrite(LED4,0); 
} 
if(potValue>511 and potValue<765){ //acende três leds do bargraph
  analogWrite(LED3,254); 
  analogWrite(LED4,0); 
} 
if(potValue>765){ //acende todos os leds do bargraph
  analogWrite(LED4,254); 
} 
}

Controle de velocidade de motor CC de 12V, com bargraph:

Regulador de velocidade simples para motores CC de 12V:

Componentes:

  • Arduino
  • protoboard e fios
  • 4 leds
  • 4 resistências de 220ohm
  • 1 resistência de 1 K
  • 1 transistor TIP122
  • 1 diodo 1N4001
  • 1 capacitor de 1 microF
  • 1 potenciômetro de 10 K
  • 1 motor de 12v
  • 1 fonte de 12v
Montagemmotor4.png

link para o vídeo: Acionando motores de 12V com arduino

Código:

/*variáveis globais */
int led1=6; 
int led2=9; 
int led3=10; 
int led4=11; 
int trimpot=5; 
int motor=3; 
/* Função setup() de inicialização */
void setup(){ 
 pinMode(led1,OUTPUT); 
 pinMode(led2,OUTPUT); 
 pinMode(led3,OUTPUT); 
 pinMode(led4,OUTPUT); 
 pinMode(trimpot,INPUT); 
} 
/* Função loop() */
void loop(){ 
  int value = analogRead(trimpot); //lê valor de velocidade no potenciômetro
  analogWrite(motor,value/4); //envia sinal PWM para motor pelo pino 3
  if(value<254){ //acende só o primeiro led do bargraph
    analogWrite(led1,value); 
    analogWrite(led2,0); 
    analogWrite(led3,0); 
    analogWrite(led4,0); 
  } 
  if(value>254 and value<511){ //acende dois leds do bargraph
   analogWrite(led2,254); 
   analogWrite(led3,0); 
   analogWrite(led4,0); 
 } 
 if(value>511 and value<765){ //acende três leds do bargraph
   analogWrite(led3,254); 
   analogWrite(led4,0); 
 } 
 if(value>765){ //acende todos os leds do bargraph
   analogWrite(led4,254); 
 } 
}

<< Página do curso

Leitura e escrita nas portas analógicas AULA 6 - PWM e acionamento motores Programação C >>