AULA 6 - Microcontroladores - Técnico: mudanças entre as edições
imported>Fargoud |
imported>Fargoud |
||
| (10 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 52: | 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 63: | 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). | * 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]] | ||
| Linha 79: | Linha 84: | ||
As pinagens destes transistores são: | As pinagens destes transistores são: | ||
[[imagem: pinagemtransist.png|center]] | [[imagem: pinagemtransist.png|center]] | ||
[[imagem: montagemfinalpwm.png|center]] | |||
link para o vídeo: [https://www.youtube.com/watch?v=1iKTvWCd2dM Acionando motor 5V com Arduino] | link para o vídeo: [https://www.youtube.com/watch?v=1iKTvWCd2dM Acionando motor 5V com Arduino] | ||
| Linha 84: | Linha 91: | ||
'''Código:''' | '''Código:''' | ||
int potPin = 0; | int potPin = 0; // Pino analógico 0 conectado no potênciometro | ||
int transistorPin = 9; | int transistorPin = 9; // Base do transistor conectada ao arduino pelo pino digital 9 | ||
int potValue = 0; | int potValue = 0; // Valor lido no potênciometro | ||
/*** FUNÇÃO setup() ***/ | /*** FUNÇÃO setup() ***/ | ||
void setup() { | void setup() { // Seta o transistor (pino 9) como saída | ||
pinMode(transistorPin, OUTPUT); | pinMode(transistorPin, OUTPUT); | ||
} | } | ||
/*** FUNÇÃO loop() ***/ | /*** FUNÇÃO loop() ***/ | ||
void loop() { | void loop() { | ||
potValue = analogRead(potPin) / 4; | 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 | ||
} | |||
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() ***/ | |||
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); | |||
} | |||
} | } | ||
--------------- | --------------- | ||
| Linha 159: | 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
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
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
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
!!!!! - 1 diodo 1N4148

- 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).
O potênciometro envia a informação da velocidade para o pino analógico 0. Na indisponibilidade dos transistores Darlington da Texas, fizemos:
As pinagens destes transistores são:
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:
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
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);
}
}
| Leitura e escrita nas portas analógicas | AULA 6 - PWM e acionamento motores | Programação C >> |
|---|









