Eletrônica Silveira
Olá, Seja Bem-Vindo ao Fórum Eletrônica Silveira!!!!
Para você poder ver os mais variados Projetos do nosso Fórum, você precisa fazer o cadastro!

Depois de se Cadastrar, não se esqueça de ler as regras do fórum!

http://eletronicasilveira.forumeiros.com/t3-regras-do-forum#3


Administrador do Fórum,
Rafael Silveira
HOMENAGEM

Na vida tudo passa tudo acontece mas alguém igual a você a gente jamais esquece




★ 22 de novembro de 1991

† 12 de março de 2016

Nosso eterno amigo, administrador e fundador deste fórum
Quem está conectado
35 usuários online :: 13 usuários cadastrados, Nenhum Invisível e 22 Visitantes :: 1 Motor de busca

alanjunior, djdanieldorneles, euripedes t matos, fabricio369, felipen1, garcias, guinho, Henriquedb, juliano goulart, louroimortaldotempo, Mauro Marques, talesbrasil, tavin

[ Ver toda a lista ]


O recorde de usuários online foi de 264 em Seg 18 Mar 2013 - 11:54
Últimos assuntos
» COMPRA DA PLACA AMPLIFICADOR CLASSE D
Ontem à(s) 23:30 por CMeletronica

» Fonte chaveada 1700watts 80+80volts
Ontem à(s) 20:35 por CMeletronica

» amplficador classe D 3500 2ohms
Ontem à(s) 20:15 por systemjol

» Fonte chaveada com SG3525 - Half Bridge Versão FINAL
Dom 24 Set 2017 - 15:08 por Wesleysantana025

» FONTE CHAVEADA 800W COM PROTEÇÃO CONTRA CURTO - IR2153
Dom 24 Set 2017 - 14:00 por renatoscp

» Amplificador digital mono de 3kw 2r
Dom 24 Set 2017 - 13:05 por djdanieldorneles

» reformar Receiver Esotech 3.0 AV
Sab 23 Set 2017 - 23:28 por Leuzinger Santos

» Layout pcb
Sab 23 Set 2017 - 16:32 por esc68

» Controle de corrente SG3525, Por trafo de corrente (TC)
Sab 23 Set 2017 - 10:48 por Wesleysantana025

» Projeto concluido
Sex 22 Set 2017 - 12:10 por Marcelino

» MINI STRONG (100w rms)
Qua 20 Set 2017 - 20:05 por Tubetronic

» Drive para Mosfet / Igbt
Qua 20 Set 2017 - 12:46 por Wesleysantana025

» Amplificador APEX AX11
Ter 19 Set 2017 - 21:20 por Kroika

» esquema studio r z7/ z8
Ter 19 Set 2017 - 21:13 por Ferreirajunior

» Ajuda com Amplificador
Seg 18 Set 2017 - 21:43 por wellersond

Eletrônica Perez
CM Eletrônica
Top dos mais postadores
Rafael Silveira (7816)
 
Caca Silva (5947)
 
renatoscp (3836)
 
CMeletronica (3148)
 
michel chagas (2791)
 
Railson (2118)
 
alexsandro rodrigues de a (1777)
 
naldo santos (1599)
 
ablacon64 (1220)
 
gilvantexas (1061)
 

Medidor de Velocidade

Publicidade

Estudos PWM em microcontroladores - Parte I

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Tutorial Estudos PWM em microcontroladores - Parte I

Mensagem por Anderson M em Seg 14 Abr 2014 - 0:45

Início do estudo sobre PWM (Pulse Width Modulation) com teoria é prática:

Assunto referente ao tópico anterior:

http://eletronicasilveira.forumeiros.com/t5322-sumario-dos-estudos-pwm-em-microcontroladores

Agora serão estudados os princípios do hardware e software do exercício nº 1.

Hardware:

Vamos começar pelo MCU:

O microcontrolador adotado para esta série de exercícios é o PIC 18F452 da Microchip, este modelo em questão é bem versátil nas aplicações, e será detalhado nas próximas linhas.

Algumas características do PIC 18F452:

Um microcontrolador com 40 pinos.
Conversor A/D de 10 bits.
Memória Flash de 32 KB.
Memória RAM de 1.536 KB.
Memória EEPROM 256 KB.

Memória Flash pode ser apagada e escrita por 100.000 vezes.
Memória EEPROM pode ser apagada e escrita por 1.000.000 vezes.  
Retenção das informações de dados na memória Flash e EEPROM por 40 anos.

Opera em 10 MPIs.
Com um cristal de 10 Mhz ele pode operar em 40 Mhz no modo HS Oscillator.

Contém dois módulos CCP.      
Saída do módulo PWM:  
Máxima frequência do PWM na resolução 8 bits = 156 Khz
Máxima frequência do PWM na resolução 10 bits = 39 Khz
Tensão máxima de trabalho: 5.5V
Corrente máxima fornecida nas saídas dos PORTs: 0.025A
Encapsulamento disponíveis: PLCC, TQFP e DIP

Para maiores informações consultar o datasheet:

http://ww1.microchip.com/downloads/en/DeviceDoc/39564b.pdf

_______________________________________________________________________

Vamos adotar o modelo com encapsulamento tipo DIP como na figura abaixo:



Descrição dos pinos principais para este exercício e outros da série PWM:

Pino 1 -> MCLR/Vpp  - Este pino vai alimentação de 5V estabilizado através de um resistor de 10K.
Pino 2 -> RA0/AN0    - Este pino é conectado o terminal central do trimpot RV1.

Pinos 11 e 32  - Alimentação 5V estabilizado.  
Pinos 12 e 31  - GND  

Pino 13 -> OSC1/CLKI    - Pino de entrada do cristal oscilador.
Pino 14 -> OSC2/CLKO   - Pino de saída do cristal oscilador.

Pino 17 -> RC2/CCP1               - Módulo PWM 1
Pino 16 -> RC1/T1OSI/CCP2A   - Módulo PWM 2

______________________________________________________________________

Esquemático do circuito para ser montado na (Protoboard):



Detalhe importante: É recomendado utilizar na experiência os componentes como estão na descrição do esquemático. O transístor Q1 em questão poderá ser substituído por outro, tudo vai depender do consumo de corrente do motor DC empregado na experiência.

NOTA: Para análise do circuito é necessário o uso de um frequencímetro para verificação da frequência e um osciloscópio para análise da variação do (Duty Cycle) ao se realizar os ajustes no trimpot RV1.

Com este circuito temos como objetivo observar o funcionamento do módulo CCP1 habilitado com uma frequência fixa de 30 Khz, esta frequência poderá ser modificada via programação conforme às suas necessidades em seus projetos. Vamos apenas variar o (Duty Cycle), ou (ciclo de trabalho) onde podemos controlar o RPM do motor DC.    

A única modificação que será feita pelo circuito é variação do (Duty Cycle), ou seja, o ciclo de trabalho através do trimpot RV1 conectado ao pino 2 (RA0/AN0). Conforme o valor for lido no (ADC) haverá mudança do (Duty Cycle) no sinal PWM, mas mantendo o valor de frequência constante.

O pino 2 (RA0/AN0) do MCU irá recolher o valor analógico entre 0V e 5V através do RV1 que recolhe esta amostra de tensão no formato analógico, logo em seguida no MCU vai ocorrer o processo de conversão em valores no formato digital. No algorítimo será implementado para efetuar o controle preciso, isto é, usará um fator de conversão na escala entre 0 e 255 para variar o (Duty Cycle) ciclo de trabalho entre 0% e 100%.

Veja na imagem abaixo à nossa proposta:  



O controle de velocidade é baseada no Pulse Width Modulation (PWM), o que significa que o RPM do motor é regulada por variação do ciclo de trabalho.

EX:

Com o ciclo de trabalho em 50%   - O motor DC fica com 50% de potência.
Com o ciclo de trabalho em 75%   - O motor DC fica com 75% de potência.
Com o ciclo de trabalho em 100% - O motor DC fica com 100% de potência, isto é, com sua aceleração máxima.

Veja no gráfico abaixo:



Aqui neste projeto estamos usando um motor 12 DCV. O valor de tensão DC média entregue ao motor DC pode ser variada, pela variação do Duty Cycle.

EX:

A tensão DC média em 0V ciclo de trabalho é 0%.
A tensão DC média em 3V ciclo de trabalho é 25%.
A tensão DC média em 6V ciclo de trabalho é 50%.
A tensão DC média em 9V ciclo de trabalho é 75%.
A tensão DC média em 12V ciclo de trabalho é 100%.

O interessante de utilizar esta técnica no controle do motor DC, onde podemos modificar o valor de rotação do motor, sem que haja perda do torque do motor em velocidades mínima.  

_______________________________________________________________________

Software:

Agora será feito comentários particulares relacionado com comandos de habilitação do módulo CCP1 e também do algorítimo implementado do exercício nº 1.

Comandos utilizados na habilitação e configuração do módulo CCP1 na geração do sinal PWM são:

Função: PWM1_Init (Frequência em Hz);

Esta função inicializa o módulo PWM com relação o valor de freqüência fixa, esta frequência desejada é declarada em Hz. Deve ser uma constante numérica, não deve ser uma variável.

EX:

PWM1_Init (5000);       // Inicializa o módulo CCP1 com frequência fixa de 5 Khz.
PWM1_Init (10000);    // Inicializa o módulo CCP1 com frequência fixa de 10 Khz.
PWM1_Init (15000);   // Inicializa o módulo CCP1 com frequência fixa de 15 Khz.
PWM1_Init (30000);  // Inicializa o módulo CCP1 com frequência fixa de 30 Khz.

Função: PWM1_Start ();

Esta função é iniciada na saída do módulo CCP1. A função PWM1_Init (); deve ser chamada antes de chamar esta segunda rotina PWM1_Start();    

EX:

PWM1_Init (30000); // Inicializa o módulo CCP1 com frequência fixa de 30 Khz.
PWM1_Start();      // Inícializa a geração do sinal PWM no módulo CCP1.

_______________________________________________________________________

Código fonte do exercício nº 1:

O algorítimo está com comentários para uma melhor compreensão.  

Selecione, copie e cole o código fonte do exercício nº 1 que está na caixa abaixo:

Código:
/*
 * Projeto: PWM CONTROL I
 * MikroC v6.0.0
 * Copyright (c) Anderson M, 08/04/2014.
 * Fórum: Eletrônica Silveira
 * MCU: PIC 18F452
 * Cristal Oscilador Externo: 10.0 Mhz
 * Oscilador XT
 * Bibliotecas adicionadas: (ADC) & (PWM)
*/
// *****************************************************************************

int y = 0; // Declaração de variável global

void main(){

   ADCON1 = 0b00001001;  // Configura e define os pinos PORT(A) como (A/D)
   TRISA = 255;         // Define os pinos PORTa como entrada

// ************ Ajuste de frequência e inicialização do módulo CCP1 ************
   Pwm1_Init(30000);      // Inicializa o módulo PWM com frequência 30 KHz
   Pwm1_Start();         // Inícializa a geração do sinal PWM no módulo CCP1
// *****************************************************************************

while(1){ //LOOP infinito...
// *************** Leitura e ajuste (DUTY CYCLE) do módulo CCP1 ****************
  y = Adc_Read(0);     // Lê o valor do canal (AD0) e salva na variável (y)
  y = (y * 0.24);     // Converte o valor em (DUTY CYCLE)
  Pwm1_Set_Duty(y);  // Envia o valor lido da variável (y) para o módulo CCP1 PWM - Pino 17 RC2
  Delay_us(10);     // Aguarda 10 microsegundos para próxima leitura
  }
// *****************************************************************************
}

_______________________________________________________________________


Utilizando o compilador MikroC PRO para compilação do código fonte:

Após o software MikroC PRO ser instalado em sua máquina.

Dê um duplo clique no ícone (MikroC PRO for PIC), aguarde o programa ser carregado como na imagem abaixo:



Clique em (New Project) como mostrado na imagem seguinte.



Após isso aparecerá uma caixa para configurações prévias como mostrada na imagem abaixo.



Clique em (Next) para continuar...

Próximo passo é apresentado e mostrado na imagem seguinte.



Aqui devemos configurar os seguintes campos:

Project Name -  Dê um nome ao seu projeto.

Project Folder - Escolha uma pasta específica para o projeto ser salvo, isso é feito clicando no botão (Browse).

Device Name  - Escolha o nome do dispositivo PIC do projeto, isso será realizado selecionando o modelo na caixa, no nosso caso escolha (P18F452).

Device Clock  - Aqui escolhemos o valor da frequência do cristal oscilador em Hz, no nosso projeto vamos utilizar um clock de (10000000) que corresponde um cristal de 10 Mhz.    

Abaixo é mostrado uma imagem da configuração que deve ser feita corretamente.



Configurado os parâmetros como estão na imagem, clique em (Next) para continuar.



Clique em (Next) para continuar.

Em seguida será apresentada outra caixa de configuração e ativação das biblioteca. Isso é mostrado na imagem abaixo.



Nesta caixa selecione o check box (Include None Advanced) e para finalizar clique (Next).

NOTA: Escolhemos esta configuração (Include None Advanced) para assim ser adicionadas da forma manual futuramente. Caso seja selecionado (Include All Default), será adicionado todas às nossas bibliotecas do compilador MikroC PRO. Isso seria um erro, pois não seria necessária muitas bibliotecas para o nosso projeto. Portanto, isso acabaria deixando o nosso código pesado.

Finalmente à nossa última configuração para assim começar:

Aqui devemos marcar o check box (Open Edit Project Window To Set Configuration Bits)

Como mostrado na imagem abaixo:



Após isso devemos clicar em (Finish) para à nossa próxima etapa que é mostrada na imagem abaixo.



Nesta etapa vamos configurar os FUSES, os únicos parâmetros que serão modificados são: (Oscillator Selection), como (XT Oscillator) e também (Oscillator System Clock Switch) como (Enabled) como estão selecionados na imagem acima.

NOTA: Os outros parâmetros vamos deixar como estão, sem necessidade de alterações para os projetos proposto nos tópicos.

Finalmente clique em OK para abrir o nosso ambiente de trabalho mostrado na imagem seguinte, e assim começar à nossa brincadeira de programação do exercício nº 1.



Selecione e apague o conteúdo como mostrado na imagem seguinte:



Agora copie e cole o código fonte fornecido no ambiente de trabalho MikroC PRO como mostrado na imagem abaixo.



Agora chegou o momento da compilação do código fonte.

Clique no ícone (Build) na parte superior, ou use teclas de atalho (CTRL+F9) como está mostrado na imagem abaixo.  



Opa!!! Ocorreu um erro terrível na compilação do código fonte, Por quê??? Calma pessoal, simplismente eu fiz este erro de maneira proposital para detalhar o que acontece se não for adicionado as bibliotecas necessárias para o trabalho proposto.

O erro ocorrido foi por causa que faltou adicionar às nossas bibliotecas (ADC) e (PWM) como estão detalhada no cabeçalho do nosso código fonte. Agora vamos adicioná-las e compilar o código novamente para observar o que acontece agora.

Adicionando bibliotecas no compilador MikroC:

Para adicionar devemos clicar na opção (Library Manager) que fica localizada na parte inferior à direita como está indicado na imagem abaixo.



NOTA: Não estão selecionados às nossas bibliotecas (ADC) e (PWM) como mostrado na imagem acima.

Para adicionar, marcamos o check box (ADC) e (PWM) como mostrado na imagem abaixo.  
 


Agora vamos compilar o código fonte novamente clicando em (Build) ou usando teclas de atalho (CTRL+F9) para observar o que acontece.

Nosso código foi compilado com sucesso, sem erros como mostrado nesta última imagem.



Após os procedimentos descritos, agora temos um arquivo HEX para posteriormente ser programado em nosso PIC 18F452 através do uso de um software e um gravador de PIC.    

______________________________________________________________________

Software PICpgm para programação de microcontroladores da família PIC:

http://picpgm.picprojects.net/download.html  

Lista de microcontroladores suportado pelo PICpgm:

http://picpgm.picprojects.net/devices.html

Guia rápido de utilização do PICpgm:

http://picpgm.picprojects.net/quickstartguide.html


Para dúvidas do exercício estou à disposição....  

Finalizando: Não venham com esta pergunta. Anderson M, como converter este código fonte para o compilador CCS?. Portanto, quem perguntar aqui no tópico vai ficar sem resposta, pois até porque eu não saberia responder, por não trabalhar com este compilador CCS. Quanto dúvidas do projeto ou problemas ocorridos no exercício, estarei à disposição, e assim deixando às suas dúvidas esclarecidas.

Até o exercício nº 2...

Boa sorte a todos Positivo 

Sds Anderson M
avatar
Anderson M
Avançado
Avançado

Mensagens : 401
Data de inscrição : 07/07/2011
Localização : São Paulo/SP

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum