Índice:
- Etapa 1: Descrição
- Etapa 2: Temporizadores AVR - Modo PWM
- Etapa 3: Medição da intensidade da luz - ADC e LDR
- Etapa 4: Motor DC do Controlador e Módulo Driver do Motor Dual H-Bridge-L298N
- Etapa 5: Escrevendo código para um programa em C. Carregando o arquivo HEX na memória Flash do microcontrolador
- Etapa 6: o circuito elétrico
Vídeo: Microcontrolador AVR. Modulação por largura de pulso. Controlador de motor DC e intensidade de luz LED: 6 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:37
Olá pessoal!
A modulação por largura de pulso (PWM) é uma técnica muito comum em telecomunicações e controle de energia. é comumente usado para controlar a energia fornecida a um dispositivo elétrico, seja um motor, um LED, alto-falantes, etc. É basicamente uma técnica de modulação, na qual a largura do pulso da portadora varia de acordo com o sinal de mensagem analógico.
Nós fazemos um circuito elétrico simples para controlar a velocidade de rotação do motor DC em função da intensidade da luz. Usaremos recursos de resistor dependente de luz e microcontrolador AVR, como conversão analógica para digital, para medir a intensidade da luz. Além disso, usaremos o Módulo de acionamento do motor Dual H-Bridge-L298N. É normalmente usado no controle de velocidade e direção de motores, mas pode ser usado para outros projetos, como direcionar o brilho de certos projetos de iluminação. Além disso, adicionamos um botão ao nosso circuito para alternar a direção de rotação do motor.
Etapa 1: Descrição
Cada corpo neste mundo tem alguma inércia. O motor gira sempre que é ligado. Assim que for desligado, ele tenderá a parar. Mas não para imediatamente, leva algum tempo. Mas antes que ele pare completamente, ele é ligado novamente! Assim, ele começa a se mover. Mas mesmo agora, leva algum tempo para atingir sua velocidade total. Mas antes que isso aconteça, ele é desligado e assim por diante. Assim, o efeito geral dessa ação é que o motor gira continuamente, mas a uma velocidade menor.
A modulação por largura de pulso (PWM) é uma técnica de comutação de energia comparativamente recente para fornecer quantidades intermediárias de energia elétrica entre níveis totalmente ligados e totalmente desligados. Normalmente, os pulsos digitais têm o mesmo período de tempo ligado e desligado, mas em algumas situações precisamos que o pulso digital tenha mais / menos tempo ligado / desligado. Na técnica PWM, criamos pulsos digitais com uma quantidade desigual de estado ligado e desligado para obter os valores de tensão intermediários necessários.
O ciclo de trabalho é definido pela porcentagem da duração da alta tensão em um pulso digital completo. Pode ser calculado por:
% do ciclo de trabalho = T on / T (período de tempo) x 100
Vamos fazer uma declaração do problema. Precisamos gerar um sinal PWM de 50 Hz com ciclo de trabalho de 45%.
Frequência = 50 Hz
Período de tempo, T = T (ligado) + T (desligado) = 1/50 = 0,02 s = 20 ms
Ciclo de trabalho = 45%
Assim, resolvendo de acordo com a equação dada acima, obtemos
T (ligado) = 9 ms
T (desligado) = 11 ms
Etapa 2: Temporizadores AVR - Modo PWM
Para fazer PWM, AVR contém hardware separado! Ao usar isso, a CPU instrui o hardware a produzir PWM de um ciclo de trabalho específico. O ATmega328 tem 6 saídas PWM, 2 estão localizadas no temporizador / contador 0 (8 bits), 2 estão localizadas no temporizador / contador 1 (16 bits) e 2 estão localizadas no temporizador / contador 2 (8 bits). Timer / Counter0 é o dispositivo PWM mais simples no ATmega328. Timer / Counter0 é capaz de funcionar em 3 modos:
- PWM rápido
- PWM com correção de fase e frequência
- PWM com correção de fase
cada um desses modos pode ser invertido ou não invertido.
Inicialize o Timer0 no modo PWM:
TCCR0A | = (1 << WGM00) | (1 << WGM01) - configurar WGM: Fast PWM
TCCR0A | = (1 << COM0A1) | (1 << COM0B1) - configurar o modo de saída de comparação A, B
TCCR0B | = (1 << CS02) - configurar temporizador com prescaler = 256
Etapa 3: Medição da intensidade da luz - ADC e LDR
O Resistor Dependente de Luz (LDR) é um transdutor que muda sua resistência quando a luz incide em sua superfície.
Os LDRs são feitos de materiais semicondutores para permitir que tenham suas propriedades sensíveis à luz. Esses LDRs ou RESISTORES DE FOTOGRAFIA funcionam com base no princípio de “Fotocondutividade”. Agora, o que este princípio diz é que sempre que a luz incide na superfície do LDR (neste caso), a condutância do elemento aumenta ou, em outras palavras, a resistência do LDR diminui quando a luz incide na superfície do LDR. Esta propriedade de diminuição da resistência para o LDR é alcançada porque é uma propriedade do material semicondutor usado na superfície. LDR são usados na maioria das vezes para detectar a presença de luz ou para medir a intensidade da luz.
Para transferir informações externas contínuas (informações analógicas) para um sistema digital / computacional, devemos convertê-las em valores inteiros (digitais). Este tipo de conversão é realizado por Conversor Analógico para Digital (ADC). O processo de conversão de um valor analógico em valor digital é conhecido como Conversão Analógica para Digital. Resumindo, os sinais analógicos são sinais do mundo real ao nosso redor, como som e luz.
Os sinais digitais são equivalentes analógicos em formato digital ou numérico que são bem compreendidos por sistemas digitais como microcontroladores. ADC é um hardware que mede sinais analógicos e produz um equivalente digital do mesmo sinal. Os microcontroladores AVR possuem um recurso ADC embutido para converter a tensão analógica em um número inteiro. AVR convertê-lo em um número de 10 bits no intervalo de 0 a 1023.
Usamos o conversor analógico para digital do nível de tensão do circuito divisor com LDR para medir a intensidade da luz.
Inicialize ADC:
TADCSRA | = (1 << ADEN) - Habilitar ADC
ADCSRA | = (1 << ADPS2) | (1 << ADPS1) | (1ADPS0) - configurar prescaler ADC = 128
ADMUX = (1 << REFS0) - configurar referência de tensão = AVCC; - configurar canal de entrada = ADC0
Assista ao vídeo com uma descrição detalhada do microcontrolador ADC AVR: Microcontrolador AVR. Medição da intensidade da luz. ADC e LDR
Etapa 4: Motor DC do Controlador e Módulo Driver do Motor Dual H-Bridge-L298N
Usamos drivers de motor DC porque os microcontroladores não são capazes de fornecer corrente não superior a 100 miliamperes em geral. Os microcontroladores são inteligentes, mas não fortes; este módulo adicionará alguns músculos aos microcontroladores para acionar motores CC de alta potência. Ele pode controlar 2 motores CC simultaneamente até 2 amperes cada ou um motor de passo. Podemos controlar a velocidade usando o PWM e também a direção de rotação dos motores. Além disso, é usado para direcionar o brilho da fita LED.
Descrição do pin:
Porta OUT1 e OUT2, que é para conectar o motor DC. OUT3 e OUT4 para conectar fita LED.
ENA e ENB são pinos de habilitação: conectando ENA em alto (+ 5V), habilita a porta OUT1 e OUT2.
Se você conectar o pino ENA a baixo (GND), ele desabilita OUT1 e OUT2. Da mesma forma, para ENB e OUT3 e OUT4.
IN1 a IN4 são os pinos de entrada que serão conectados ao AVR.
Se IN1-alto (+ 5V), IN2-baixo (GND), o OUT1 fica alto e OUT2 fica baixo, então podemos acionar o motor.
Se IN3-alto (+ 5V), IN4-baixo (GND), o OUT4 fica alto e OUT3 fica baixo, portanto a luz LED de fita acende.
Se você quiser inverter o sentido de rotação do motor, basta inverter a polaridade IN1 e IN2, da mesma forma para IN3 e IN4.
Ao aplicar o sinal PWM a ENA e ENB, você pode controlar a velocidade dos motores em duas portas de saída diferentes.
A placa pode aceitar de 7 V a 12 V nominalmente.
Jumpers: Existem três pinos de jumpers; Jumper 1: se o seu motor precisar de alimentação superior a 12 V, você deve desconectar o Jumper 1 e aplicar a tensão desejada (máx. 35 V) no terminal de 12 V. Traga outra fonte de 5 V e entrada no terminal de 5 V. Sim, você deve inserir 5 V se precisar aplicar mais de 12 V (quando o Jumper 1 for removido).
A entrada de 5 V é para o funcionamento adequado do IC, uma vez que a remoção do jumper irá desabilitar o regulador de 5 V embutido e proteger contra tensão de entrada mais alta do terminal de 12 V.
O terminal de 5 V atua como saída se sua alimentação estiver entre 7 V a 12 V e atua como entrada se você aplicar mais de 12 V e o jumper for removido.
Jumper 2 e Jumper 3: Se você remover esses dois jumpers, terá que inserir o sinal de ativação e desativação do microcontrolador, a maioria dos usuários prefere remover os dois jumpers e aplicar o sinal do microcontrolador.
Se você mantiver os dois jumpers, OUT1 a OUT4 estarão sempre habilitados. Lembre-se do jumper ENA para OUT1 e OUT2. Jumper ENB para OUT3 e OUT4.
Etapa 5: Escrevendo código para um programa em C. Carregando o arquivo HEX na memória Flash do microcontrolador
Escrita e construção da aplicação do microcontrolador AVR em Código C utilizando a Plataforma de Desenvolvimento Integrada - Atmel Studio.
#ifndef F_CPU # define F_CPU 16000000UL // informando a frequência do cristal do controlador (16 MHz AVR ATMega328P) #endif
#include // cabeçalho para habilitar o controle do fluxo de dados sobre os pinos. Define pinos, portas, etc. #include // cabeçalho para habilitar a função de atraso no programa
#define BUTTON1 2 // interruptor de botão conectado à porta B pino 2 #define DEBOUNCE_TIME 25 // tempo para esperar enquanto o botão "de-bouncing" #define LOCK_INPUT_TIME 300 // tempo de espera após um pressionamento de botão
// Timer0, inicialização PWM void timer0_init () {// configurar o temporizador OC0A, pino OC0B no modo de alternância e modo CTC TCCR0A | = (1 << COM0A1) | (1 << COM0B1) | (1 << WGM00) | (1 << WGM01); // configura o temporizador com prescaler = 256 TCCR0B | = (1 << CS02); // inicializa o contador TCNT0 = 0; // inicializa o valor de comparação OCR0A = 0; }
// Inicialização ADC void ADC_init () {// Habilitar ADC, amostragem freq = osc_freq / 128 definir prescaler para valor máximo, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
ADMUX = (1 << REFS0); // Selecione a referência de tensão (AVCC)
// Status da chave do botão unsigned char button_state () {
/ * o botão é pressionado quando o bit BUTTON1 é limpo * /
if (! (PINB & (1 <
{
_delay_ms (DEBOUNCE_TIME);
if (! (PINB & (1 <
}
return 0;
}
// Inicialização das portas void port_init () {DDRB = 0b00011011; // PB0-IN1, PB1-IN2, PB3-IN3, PB4-IN4, PB2 - BOTÃO COMUTADOR DIRETO PORTAB = 0b00010110;
DDRD = 0b01100000; // PD5-ENB (OC0B), PD6-ENA (OC0A) PORTD = 0b00000000;
DDRC = 0b00000000; // PC0-ADC PORTC = 0b00000000; // Defina todos os pinos de PORTC para baixo, o que o desliga. }
// Esta função lê o valor do conversor analógico para digital. uint16_t get_LightLevel () {_delay_ms (10); // Aguarde algum tempo até que o canal seja selecionado ADCSRA | = (1 << ADSC); // Inicie a conversão ADC definindo o bit ADSC. Escreva 1 para ADSC
enquanto (ADCSRA & (1 << ADSC)); // Aguarde a conclusão da conversão
// ADSC torna-se 0 novamente até então, execute o loop continuamente _delay_ms (10); retorno (ADC); // Retorna o resultado de 10 bits
}
// Esta função mapeia novamente um número de um intervalo (0-1023) para outro (0-100). mapa uint32_t (uint32_t x, uint32_t in_min, uint32_t in_max, uint32_t out_min, uint32_t out_max) {return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }
int main (vazio)
{uint16_t i1 = 0;
port_init ();
timer0_init (); ADC_init (); // inicialização ADC
enquanto (1)
{i1 = mapa (get_LightLevel (), 0, 1023, 0, 100);
OCR0A = i1; // Define o canal de registro de comparação de saída A OCR0B = 100-i1; // Define o registro de comparação de saída do canal B (invertido)
if (button_state ()) // Se o botão for pressionado, alterna o estado do LED e o retardo por 300ms (#define LOCK_INPUT_TIME) {PORTB ^ = (1 << 0); // alternando o estado atual do pino IN1. PORTB ^ = (1 << 1); // alternando o estado atual do pino IN2. Inverta a direção de rotação do motor
PORTB ^ = (1 << 3); // alternando o estado atual do pino IN3. PORTB ^ = (1 << 4); // alternando o estado atual do pino IN4. A fita LED está desligada / ligada. _delay_ms (LOCK_INPUT_TIME); }}; return (0); }
A programação está completa. Em seguida, construindo e compilando o código do projeto em um arquivo hexadecimal.
Carregando o arquivo HEX na memória flash do microcontrolador: digite na janela do prompt do DOS o comando:
avrdude –c [nome do programador] –p m328p –u –U flash: w: [nome do arquivo hexadecimal]
No meu caso é:
avrdude –c ISPProgv1 –p m328p –u –U flash: w: PWM.hex
Este comando grava o arquivo hexadecimal na memória do microcontrolador. Assista ao vídeo com uma descrição detalhada da gravação da memória flash do microcontrolador: Gravação da memória flash do microcontrolador…
OK! Agora, o microcontrolador funciona de acordo com as instruções do nosso programa. Vamos dar uma olhada!
Etapa 6: o circuito elétrico
Conecte os componentes de acordo com o diagrama esquemático.
Recomendado:
Visuino Como usar a modulação por largura de pulso (PWM) para alterar o brilho de um LED: 7 etapas
Visuino Como usar a modulação por largura de pulso (PWM) para alterar o brilho de um LED: Neste tutorial, usaremos um LED conectado ao Arduino UNO e Visuino para alterar seu brilho usando a modulação por largura de pulso (PWM). Assista a um vídeo de demonstração
Visuino RAMPS para modulação por largura de pulso (PWM) usando LED: 8 etapas
Visuino RAMPS para modulação por largura de pulso (PWM) usando LED: neste tutorial, usaremos um LED conectado ao Arduino UNO e Visuino para diminuir o brilho do LED usando o componente de modulação por largura de pulso (PWM) e rampas. Assista a um vídeo de demonstração
RACK DE CONTROLADOR DE MODULAÇÃO DE ÁUDIO PARA LUZ: 10 etapas
RACK DE CONTROLADOR DE JOGO DE MODULAÇÃO DE ÁUDIO PARA LUZ: Este Instrunctable é para mostrar a você como fazer um rack de controlador de jogo de modulação de áudio para luz. Este sistema de luz pode ser conectado a um XBOX 360 (como o meu) Playstation 3, Zune, Ipod … qualquer que seja. Peças: 1 12 polegadas por 24 polegadas de acrílico fluorescente 1
Modulação de largura de pulso simples (e suja) (PWM) com temporizador 555: 3 etapas
Modulação de largura de pulso simples (e suja) (PWM) com temporizador 555: Circuito simples para controle de velocidade do motor DC (controle de velocidade do ventilador, luz / dimerização de LED e etc) usando o temporizador 555. Também é um bom ponto de partida para iniciantes que desejam obter seus mãos sujas com o temporizador 555 IC. Alguns diriam que este não é o mais
Tocha LED modulada por largura de pulso: 8 etapas
Tocha de LED modulada por largura de pulso: A modulação por largura de pulso (PWM) pode ser usada para variar a potência, velocidade ou brilho de muitos dispositivos. Com LEDs, o PWM pode ser usado para escurecê-los ou torná-los mais brilhantes. Vou usá-los para fazer uma pequena tocha manual. Um LED pode ser escurecido ligando-o rapidamente e