A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Aula 04: Aprendendo sobre o PWM do arduíno e Ponte H

Apresentações semelhantes


Apresentação em tema: "Aula 04: Aprendendo sobre o PWM do arduíno e Ponte H"— Transcrição da apresentação:

1 Aula 04: Aprendendo sobre o PWM do arduíno e Ponte H

2 Aula 04: Aprendendo sobre o PWM do arduíno e Ponte H
O que vamos aprender? Utilização do controle PWM do Arduino Aplicação do controle PWM do Arduino: Lâmpada pulsante. Funcionamento e aplicações da Ponte H

3 1 – Entendendo PWM no arduino
A Modulação por Largura de Pulso (Pulse Width Modulation) é uma técnica que consiste em fornecer um sinal analógico através de meios digitais. A forma de onda do sinal digital consiste em uma onda quadrada que alterna seu estado em nível lógico alto e um nível lógico baixo (pode ser representado por ligado/desligado ou pelo sistema binário 1 e 0). A razão entre o período de pico e o período total da onda é chamado de Duty Cycle. Podemos, então, entender que para termos uma onda quadrada real (que possui picos e vales iguais) é necessário que o Duty Cycle seja  de 50%, ou seja, 50%   de pico e 50% de vale.

4

5 No arduino UNO, as portas digitais que permitem PWM são as portas 3, 5, 6, 9, 10 e 11. Essas portas são facilmente identificadas pelo símbolo “ ~ “, abaixo de cada porta. Sabemos que a tensão de saída de uma porta digital no arduino é de 5V. Essa mesma tensão conseguiríamos obter da porta digital ao enviá-la uma saída analógica de valor 255 (Duty Cycle de 100%).

6 Um exemplo rápido void setup(){  pinMode(3, OUTPUT); //define a porta digital 3 como saída  pinMode(5, OUTPUT); //define a porta digital 5 como saída pinMode(6, OUTPUT); //define a porta digital 6 como saída pinMode(9, OUTPUT); //define a porta digital 9 como saída pinMode(10, OUTPUT); //define a porta digital 10 como saída } void loop(){  analogWrite(3, 0); //a tensão na porta digital 3 será se 0V analogWrite(5, 64); //a tensão na porta digital 5 será se 1,25V analogWrite(6, 127); //a tensão na porta digital 6 será se 2,5V

7 analogWrite(9, 191); //a tensão na porta digital 9 será se 3,75V  analogWrite(10, 255); //a tensão na porta digital 10 será se 5V }

8 2 – Prática 7: Lâmpada Pulsante
Você agora tentará um método mais avançado de controle de seus LEDs. Até aqui você simplesmente os acendeu e apagou. Não seria interessante ajustar o brilho de um LED? Será que isso pode ser feito com o Arduino? Certamente. Usaremos: 1 LED’s de 2 V 1 resistor de 100Ω

9

10 Verifique seu circuito e digite o código:
// Projeto 7 – Lâmpada pulsante int ledPin = 11; float sinVal; int ledVal; void setup() { pinMode(ledPin, OUTPUT); } void loop() { for (int x=0; x<180; x++) { // converte graus para radianos e, então, obtém o valor do seno sinVal = (sin(x*(3.1416/180))); ledVal = int(sinVal*255); analogWrite(ledPin, ledVal); delay(25); } }

11 Verifique e faça o upload de seu código
Verifique e faça o upload de seu código. Você verá seu LED pulsar, acendendo e apagando continuamente. Entretanto, em vez de um simples estado de ligado/desligado, você está ajustando o brilho. Análise do código: O código para este projeto é muito simples, mas exige explicação. Primeiramente, você define as variáveis para o pino do LED, um float (tipo de dado de ponto flutuante) para o valor da onda senoidal, e ledVal, que armazena o valor inteiro a ser enviado para o pino digital PWM 11. Neste projeto, você está criando uma onda senoidal e fazendo com que o brilho do LED acompanhe essa onda. É isso que faz com que a luz pulse, em vez de simples-mente acender com brilho máximo e apagar novamente.

12 Você utiliza a função sin(), uma função matemática, para calcular o seno de um ângulo.
Você tem de dar à função o grau em radianos. Assim, temos um loop for que vai de 0 a 179; não devemos passar desse limite, pois isso resultaria em valores negativos, e o valor do brilho pode estar apenas entre 0 e 255. A função sin() requer que o ângulo esteja em radianos, e não em graus. Assim, a equação x*(3.1416/180) converterá o grau do ângulo para radianos. Depois, você transfere o resultado para ledVal, multiplicando-o por 255 para obter seu valor. O resultado da função sin() será um número entre -1 e 1, que poderá ser multiplicado por 255 para obter o brilho máximo.

13 Você converte (cast) o valor de tipo ponto flutuante de sinVal para um inteiro, utilizando int() na instrução a seguir: ledVal = int(sinVal*255); Então, você envia esse valor para o pino digital PWM 11, utilizando a instrução: analogWrite(ledPin, ledVal); Na conversão, ou casting, você converte o valor de ponto flutuante para um inteiro (efetivamente eliminando o que havia após o ponto decimal). Mas como você pode enviar um valor analógico para um pino digital? Dê uma olhada em seu Arduino. Se analisar os pinos digitais, você verá que seis deles (3, 5, 6, 9, 10 e 11) têm PWM escrito ao lado. Esses pinos são diferentes dos pinos digitais, pois são capazes de enviar um sinal PWM.

14 PWM significa Pulse Width Modulation, ou Modulação por Largura de Pulso (MLP), e representa uma técnica para obter resultados analógicos por meios digitais. Nesses pinos, o Arduino envia uma onda quadrada, ligando e desligando o pino muito rapidamente. O padrão de ligado/desligado pode simular uma voltagem variando entre 0 V e 5 V. Isso é feito alterando a quantidade de tempo em que a saída permanece alta (ligada) e baixa (desligada). A duração do tempo em que ela permanece ligada é conhecida como a largura do pulso. Por exemplo, se você quisesse enviar o valor 0 para o pino digital PWM 11 utilizando analogWrite(), o período ON (ligado) seria zero, ou teria o que chamamos de um ciclo de trabalho (duty cycle1) de 0%. Se você quisesse enviar um valor de 63 (25% dos 255 máximos), o pino estaria ON em 25% do tempo e OFF em 75% do tempo. O valor de 191 teria um ciclo de trabalho de 75%; enquanto um valor de 255 teria um ciclo de trabalho de 100%.

15 Os pulsos ocorrem a uma velocidade de aproximadamente 500 Hz, ou 2 milissegundos, cada.
Assim, em seu sketch, o LED está acendendo e apagando muito rapidamente. Se o ciclo de trabalho fosse de 50% (um valor de 127), o LED pulsaria, acendendo e apagando, a 500 Hz, e exibiria metade de seu brilho máximo. Isso é basicamente uma ilusão que você pode utilizar em seu proveito, permitindo que os pinos digitais emitam um valor analógico simulado para seus LEDs. Note que mesmo que apenas seis dos pinos tenham a função PWM, você pode facilmente escrever um software para conseguir uma saída PWM de todos os pinos digitais, se assim preferir. 

16 3- Ponte H A Ponte H é um circuito de Eletrônica, capaz de determinar o sentido da corrente, a polaridade da tensão, e a tensão em um dado sistema ou componente. Em nossa aplicação, usaremos a ponte H para transmitir aos motores, os comandos que o arduino enviar. OBS.: não conectamos os motores diretamente ao arduino, pois o arduino não consegue emitir potência suficiente para fazer o motor funcionar. Então usamos a ponte H conectada a uma fonte externa, suficiente para alimentar o motor

17 Figura 1: Esquema de uma Ponte H

18 Figura 2: Ponte H

19 Entradas: (Motor A) e (Motor B): se referem aos conectores para ligação de 2 motores DC ou 1 motor de passo (Ativa MA) e (Ativa MB):  são os pinos responsáveis pelo controle PWM dos motores A e B. Se estiver com jumper, não haverá controle de velocidade, pois os pinos estarão ligados aos 5v. Esses pinos podem ser utilizados em conjunto com os pinos PWM do Arduino (Entrada): Este barramento é composto por IN1, IN2, IN3 e IN4. Sendo estes pinos responsáveis pela rotação do Motor A (IN1 e IN2) e Motor B (IN3 e IN4).

20 (Ativa 5v) e (5v): Este Driver Ponte H L298N possui um regulador de tensão integrado. Quando o driver está operando entre 6-35V, este regulador disponibiliza uma saída regulada de +5v no pino (5v) para um uso externo (com jumper), podendo alimentar por exemplo outro componente eletrônico. Portanto não alimente este pino (5v) com +5v do Arduino se estiver controlando um motor de 6-35v e jumper conectado, isto danificará a placa. O pino (5v) somente se tornará uma entrada caso esteja controlando um motor de 4-5,5v (sem jumper), assim poderá usar a saída +5v do Arduino. (6-35v) e (GND): Aqui será conectado a fonte de alimentação externa quando o driver estiver controlando um motor que opere entre 6-35v. Por exemplo se estiver usando um motor DC 12v, basta conectar a fonte externa de 12v neste pino e (GND).

21 Tabela: A tabela abaixo mostra a ordem de ativação do Motor A através dos pinos IN1 e IN2. O mesmo esquema pode ser aplicado aos pinos IN3 e IN4, que controlam o Motor B.

22 4– Prática 9: Ponte H Usaremos: Ponte H 2 motores Jumpers Arduino
Faça as ligações!

23

24 Verifique o seu circuito e depois digite o código:
//Definições pinos Arduino ligados a entrada da Ponte H int IN1 = 4; int IN2 = 5; int IN3 = 6; int IN4 = 7;    void setup() {   //Define os pinos como saída  pinMode(IN1, OUTPUT);  pinMode(IN2, OUTPUT);  pinMode(IN3, OUTPUT);  pinMode(IN4, OUTPUT); }

25 void loop() {  //Gira o Motor A no sentido horário  digitalWrite(IN1, HIGH);  digitalWrite(IN2, LOW);  delay(2000);  //Para o motor A  digitalWrite(IN2, HIGH);  delay(500);  //Gira o Motor B no sentido horário  digitalWrite(IN3, HIGH);  digitalWrite(IN4, LOW);

26  //Para o motor B  digitalWrite(IN3, HIGH);  digitalWrite(IN4, HIGH);  delay(500);  //Gira o Motor A no sentido anti-horário  digitalWrite(IN1, LOW);  digitalWrite(IN2, HIGH);  delay(2000);  //Para o motor A  digitalWrite(IN1, HIGH);

27 //Gira o Motor B no sentido anti-horário
 digitalWrite(IN3, LOW);  digitalWrite(IN4, HIGH);  delay(2000);  //Para o motor B  digitalWrite(IN3, HIGH);  delay(500); }

28 Fontes bibliográficas:
McRoberts, Michael Arduino básico / Michael McRoberts ; [tradução Rafael Zanolli]. -- São Paulo : Novatec Editora, 2011. 


Carregar ppt "Aula 04: Aprendendo sobre o PWM do arduíno e Ponte H"

Apresentações semelhantes


Anúncios Google