Solução por Software para Implementar PWM em qualquer Microcontrolador PIC

Documentos relacionados
Solução por Software para Implementar PWM em qualquer Microcontrolador PIC

Arquitetura de Computadores. Prof. João Bosco Jr.

6. Estrutura do Programa em Assembly

OMódulo Comparador Analógico consiste em um conjunto

1.1. Microprocessadores e microcontroladores Sistemas genéricos e sistemas dedicados. 2. Microcontrolador PIC:

Introdução aos Microcontroladores PIC

1.1 Noções básicas sobre interrupções em Microcontroladores

Sistemas Microcontrolados. Período Aula 4. 1 Saulo O. D. Luiz

5. Conjunto de Instruções do MCU PIC

Eder Terceiro. Programação C com o PIC16F628a. Eder Terceiro. 31 de Outubro de 2016

Marcelo Fernandes Valter Rodrigues de Jesus Junior. Thermal Control

Sistemas Microcontrolados

Sistemas Digitais e Microcontrolados

Introdução ao PIC. Guilherme Luiz Moritz 1. 6 de novembro de DAELT - Universidade Tecnológica Federal do Paraná

Sistemas Digitais e Microcontrolados

Sequencial Supermáquina (TEMPORIZAÇÃO SIMPLES)

BANKSEL ADCON1 clrf ADCON1 bsf ADCON1,ADFM ; seta AD para VCC, GND e entradas analogicas, setando o bit ADFM configura como justificado a direita

Interrupção Externa. Capítulo 1. Noções básicas sobre interrupções em Microcontroladores PIC

Sistemas Digitais e Microcontrolados

Construção de Robôs Jogadores de Futebol (2ª Parte)

Placa McLab1 Upgrade PIC16F84A p/ PIC16F62x

OMPLAB é um programa para PC, que roda sobre a

PIC. PeripheralInterface Controller. Prof. EngºespLuiz Antonio Vargas Pinto Prof. Vargas

Servo-Motor. por. Nuno Monteiro & Gabriel Dinis Eng. Electrotécnica, UTAD Junho de nuno_monteiro@portugalmail.com gabrieldinis@portugalmail.

INTRODUÇÃO AOS SISTEMAS EMBEBIDOS

Programação Daniel Corteletti Aula 3 Parte III Página 1/7

Plano de Trabalho Docente 2017 Ensino Técnico

Microcontrolador PIC 16F877

C:\seminario\guiao_aluno\trab6\trab6.asm

Jadsonlee da Silva Sá

Hardware Parte I. Fábio Rodrigues de la Rocha

Conjunto de Instruções e Modelos de Arquiteturas

ARQUITETURA DE PROCESSAMENTO

Circuito Eletrônico. Entendendo o circuito eletrônico na robótica. domingo, 28 de agosto de 11

01. Identifique o conjunto de portas de entrada A e o conjunto de portas B na figura abaixo.

Arduino Lab 17 Inversor de. microcontrolado Versão 1

PIC16F628a. Pinagem do PIC16F628a:

Utilize o programa fonte em linguagem assembly abaixo para responder as questões seguintes.

Manual do Usuário. McMaster Desenvolvimento de Sistemas com Microcontroladores PIC

KIT DIDÁTICO PIC-2377

Objetivos MICROCONTROLADORES HARDWARE. Aula 03: Periféricos. Prof. Mauricio. MICRO I Prof. Mauricio 1. Arquitetura de um Microcontrolador

Sistemas Embarcados:

Implementando PWM por soft - um método simples. Por Renie S. Marquet reniemarquet.sites.com.br - versão

Cerne. Conhecimento para o Desenvolvimento. Cerne Tecnologia e Treinamento

MICROCONTROLADORES PIC PRIMEIROS PASSOS

CONTROLE DE UM SERVO MOTOR

Tecnologia em Automação Industrial 2016 ELETRÔNICA II

MICROCONTROLADORES - PIC 16F84/16F84A/16F628/16F628A

Acetatos de apoio às aulas teóricas

Interrupções e Timers

Microcontroladores: Programação em C

V1 5V +V. (14)Vdd (6)RB0 PIC 16F628A. (16) Clk-out. C1 33pF. C2 33pF. Figura 1 Circuito pisca-pisca.

ELETRÔNICA DE POTÊNCIA I

PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ CENTRO DE CIÊNCIAS EXATAS E DE TECNOLOGIA ENGENHARIA DE COMPUTAÇÃO

9/3/2009. Aula 4. Engenharia de Sistemas Embarcados. Cenário: Sistema de Controle de LEDs

Aula 4. Engenharia de Sistemas Embarcados. Prof. Abel Guilhermino Tópico: Arquitetura de um microcontrolador 8051

OMicrocontrolador PIC16F877A implementa um conversor

Microcontrolador PIC 16F877

Microcontrolador 8051

14/3/2016. Prof. Evandro L. L. Rodrigues

Cerne. Conhecimento para o Desenvolvimento. Cerne Tecnologia e Treinamento. Apostila de BASIC para PIC16F628A

Tecnologia em Automação Industrial ELETRÔNICA II. Fonte chaveada. Prof. Dra. Giovana Tripoloni Tangerino

Conjunto de Instruções e Modelos de Arquiteturas

Microcontroladores: Programação em C

Introdução à Organização de Computadores. Aula 8

Curso PIC 1 Desbravando o PIC. Eng. Diego Camilo Fernandes Labtools Mosaico Didactic Division

Arduino. Aula 3 motores

Montagem do Robô. Especificações. domingo, 28 de agosto de 11

laboratório de tecnologia

INSTITUTO TECNOLÓGICO DE AERONÁUTICA DIVISÃO DE ENGENHARIA ELETRÔNICA DEPARTAMENTO DE ELETRÔNICA APLICADA TIMER 555

EL08D - MICROCONTROLADORES

SEL-433 APLICAÇÕES DE MICROPROCESSADORES I

Sistemas Microcontrolados. Período Aula 9. 1 Saulo O. D. Luiz

LABORATÓRIO DE ARQUITETURA DE COMPUTADORES PREPARAÇÃO 02: DISPLAY DE 7 SEGMENTOS MICROCONTROLADO

Introdução ao Microcontrolador PIC

Microcontroladores. 1 Microprocessadores x Microcontroladores Microprocessadores: Microcontroladores: 2 Microcontrolador x DSP

2 - Considere a seguinte figura que representa uma parte dos componentes básicos de um microprocessador:

TÉCNICO EM ELETRÔNICA 1 CONHECIMENTOS ESPECÍFICOS QUESTÕES DE 11 A 35

Índice. Dia 05 de fevereiro de Apresentação Dia 12 de fevereiro de

Cerne. Conhecimento para o Desenvolvimento. Cerne Tecnologia e Treinamento

Figura do exercício 1

Lista de Exercícios 1

EPUSP PCS 2011/2305/2355 Laboratório Digital. Frequencímetro

7. Técnicas de Programação

Lista de Exercícios 2

OMicrocontrolador PIC16F877A apresenta dois módulos

Kit Clp Pic 40B Manual do usuário. Manual do usuário - Kit Clp Pic 40B v2.0. Copyright VW Soluções

1.2 Registradores relacionados as Interrupções. 3. TOSE Sentido da transição da borda do sinal aplicado am TMR0

Painel Luminoso com LEDs

Microcontroladores PIC

LABORATÓRIO DE ARQUITETURA DE COMPUTADORES PREPARAÇÃO 03: INTERRUPÇÕES

Experiência. Montagem Kit Didático. 2. Turma: Nota: 5. MICRO-I Prof. Mauricio. Identificação dos Alunos:

Painel Luminoso com LEDs

Sistemas Embarcados:

Centro Federal de Educação Tecnológica de Santa Catarina Departamento de Eletrônica Retificadores. Prof. Clóvis Antônio Petry.

PROJETO CONTROLADORA DE MOTOR DE PASSO UNIPOLAR

Temporizadores e Contadores (Timer/Counter)

Microcontroladores: Programação em C

Suporta os microcontroladores: R. Leonardo da Vinci, Campinas/SP CEP F.: (19) Kit de Desenvolvimento ACEPIC 28

Diodos de barreira Schottky; Termistores; Capacitores; Retificador controlado de silício. (SCR); Triac. Vitória-ES

Transcrição:

Solução por Software para Implementar PWM em qualquer Microcontrolador PIC Prof. Francisco Fambrini Faculdade de Engenharia, Universidade Anhanguera Pólo Santa Bárbara do Oeste Palavras-Chave: Microcontroladores, PWM, Modulação por largura de Pulso, Microchip, PIC. Keywords: Microcontrollers, PWM, Pulse Width Modulation, Microchip, PIC. Abstract: Some PIC Microcontrollers (Microchip) have built-in PWM modules, whose devices can produce pwm signals without computacional effort and extra firmware. However, all older PICs and some new models (for instance, PIC12F675) don t have built-in PWM modules in chip case. In this paper, the author intends to describe a PWM Software Solution for the PIC12F675 and other PIC microcontrollers without hard-coded PWM. This solution allows to build a digital pwm system embeeded at all PIC Microcontrollers chips. In adittion, a short revision about PWM System and MOS-FET transistors power control are described. A review about PWM concepts and its applications is also done as well as considerations about power stage, using MOS-FET transistors. Some considerations about programming techniques in Assembly language and a variety of examples about the implementation code were also included in this text in order to permit the interested reader to make the experience in laboratory. Resumo: Muitos Microcontroladores PIC (Microchip) possuem módulos PWM internos na própria pastilha, que possibilitam gerar sinais de pwm sem esforço computacional e sem firmware extra. Entretanto, todos os PICs mais antigos e alguns novos modelos (por exemplo, PIC12F675) não possuem tal módulo PWM interno em sua pastilha. Neste trabalho o autor pretende descrever um método para se implementar um Controlador PWM em qualquer microcontrolador PIC (Microchip), até mesmo em modelos que não possuem o módulo de PWM interno construído por hardware. Uma revisão sobre o Conceito de PWM e suas aplicações também é levada a feito, bem como considerações sobre o estágio de potência, usando transístores hex MOS-FET. Algumas considerações a respeito de técnicas de programação em linguagem Assembly e vários exemplos de como esse código foi implementado também foram incluídas no texto, com a finalidade de possibilitar ao leitor interessado reproduzir a idéia em laboratório.

Conceitos: PWM é uma sigla para Pulse Width Modulation, ou seja, Modulação por largura de pulsos. É um método consagrado para controlar a energia (e consequentemente a potência) entregue à carga em dispositivos que trabalham em sistemas de Corrente Continua (DC). Quanto maior a duração do Tempo Ligado (tempo em que o PWM permanece em On) daqui em diante denominado Ton neste trabalho, maior será a Energia entregue à carga. PWMs são por definição sistemas de Frequência (F) e Período (T) constantes e de Largura de Pulso (ciclo ativo) ajustável. Denominando de Toff o tempo em que a carga é mantida desativada, o periodo total de nosso PWM será: Define-se Ciclo Ativo (Duty Cycle D.C. ) por: T = Ton + Toff D. C. = Ton Ton + Toff A figura 1 abaixo ilustra a forma de onda típica de um sistema PWM digital: Ton Toff Figura-1 Forma de onda caracteristica do PWM A solução proposta foi testada e desenvolvida num microcontrolador PIC12F675 (que não possue módulo PWM interno) e baseia-se em firmware. A figura-2 abaixo ilustra a pinagem deste inovador microcontrolador de apnas 8 pinos:

Figura-2 Microcontrolador PIC12F675, em seu inovador invólucro DIP de 8 pinos Nosso Firmware foi escrito totalmente em Linguagem Assembly pois nossa intenção inicial de utilizar Linguagem C revelou-se incapaz de proporcionar a velocidade necessária de processamento para gerar o PWM, ler os dois botões (Up e Down) sem causar efeitos de flicker na onda retangular gerada. Sobre velocidade de processamento, é importante frisar que optamos por utilizar o oscilador RC interno dos PIC12F675, cuja frequencia de clock é fixa e igual a 4 MHz. Como os Microcontroladores PIC dividem internamente o clock por 4, temos um clock efetivo interno de valor 1 MHz o que nos dá um Ciclo de Máquina de duração 1 us (um microsegundo). Com este ciclo de máquina, optamos por uma solução de software otimizada para a arquitetura do PIC, segundo nossa referência bibliográfica (1), o que nos proporcionou excelente desempenho no PWM. O sistema utiliza-se da interrupção do TMR0 (Timer-Zero) cujo prescaler foi ajustado para 1:2, ou seja, a cada 2 us temos uma interrupção de timer 0 e o fluxo do programa será desviado para o endereço 0x04 (endereço do vetor de interrupção do PIC12F675). As variáveis usadas no programa foram as seguintes: CBLOCK 0X20 STACKW STACKS COUNTER COUNTER2 PWMDESIRED PWMMAX PWMHELP MAX MIN FILTRO1 FILTRO2 FLAGS ENDC ;VALOR MAXIMO DO PWMDESIRED ;VALOR MINIMO ;filtros dos botoes Nota-se a declaração de tais variáveis a partir do endereço 0x20, que é o endereço do topo da memória RAM do dispositivo PIC utilizado. Outros microcontroladores podem exigir um novo endereço, bastando para isso que se altere a instrução CBLOCK 0x20 Para o novo valor do endereço inicial de memória desejado. Rotina de Interrupção: A partir do endereço 0x04 é colocada a rotina de interrupção, que será atendida toda vez que o contador denominado TMR0 (Timer-Zero) excede o valor 0xFF, caracterizando o Overflow. Tal rotina é mostrada abaixo:

Org 0x04 btfsc TMR0,0 GOTO PwmInt PwmInt: movwf STACKW SWAPF STACKW,F SWAPF STATUS,W MOVWF STACKS BCF INTCON,T0IF BTFSC LED GOTO LOWPULSE HIGHPULSE: COMF PWMDESIRED,W MOVWF PWMHELP ADDWF PWMMAX,F BTFSS STATUS,C GOTO HIGHIMPINT HIGHIMPSHRT: MOVF PWMMAX,W ADDWF PCL,F...... (essa instrução é repetida diversas vezes)...... INCF COUNTER, F COMF PWMHELP,W ADDLW PWMADJUSTVAL+5 MOVWF TMR0 GOTO LOWIMPINT2 HIGHIMPINT: ADDLW PWMADJUSTVAL MOVWF TMR0 HIGHIMPINT2: INCF COUNTER,F MOVLW PWMMAXVAL-1 MOVWF PWMMAX SWAPF STACKS,W MOVWF STATUS SWAPF STACKW,W RETFIE A instrução RETFIE finaliza a interrupção e devolve controle do fluxo do programa ao endereço armazenado no PCLATCH (Program Counter); Na rotina de interrupção temos uma estrutura de software da seguinte forma: MOVF pwmdesired, W ADDWF PCL,F

bsf LED bsf LED bsf LED bsf LED bsf LED bsf LED......... Cada instrução do tipo BSF (Bit Set File) mantém a saída LED em nível lógico alto durante um tempo igual a 1 us. De modo análogo, cada instrução do tipo BCF (Bit Clear File) mantém a mesma saída em nível lógico baixo durante o mesmo intervalo de tempo. A associação série de diversas instruções idênticas desse tipo é que permite produzir os tempos Ton e Toff necessários para se construir a forma de onda do PWM desejado. O registrador pwmdesired armazena o valor desejado de Ton. A seguir este valor é movido para o W e somado ao PCL que produz um salto relativo para a instrução que mantém o PWM pelo tempo correto na saída do microcontrolador. O uso de interrupção do Timer0 nos possibilita independência para leitura dos botoes UP e DOWN sem prejudicar a geração da onda do PWM. O botão UP incrementa o ciclo ativo e o botão DOWN decrementa. O PWM inicializa-se sempre em zero, ou seja, ao restabelecer a energia, começa sempre desativado. A constante LED é definida no cabeçalho do programa da seguinte forma: #define LED GPIO,5 sendo que o gate do transistor de potência utilizado foi então conectado ao pino GPIO.5 do Microcontrolador, sendo este o elemento de saida onde é gerado o sinal PWM. Rotina de Controle do Ciclo Ativo: A rotina que faz a Leitura das duas teclas ( denominadas respectivamente UP e Down ) é mostrada abaixo, sendo que tais teclas tem por função incrementar ou decrementar o ciclo ativo do sinal de PWM produzido no pino GPIO.5 do Microcontrolador usado no protótipo: CONTROLE: clrwdt BTFSS BT1 GOTO AUMENTAR BTFSS BT2 GOTO DIMINUIR goto CONTROLE AUMENTAR: MOVF MAX,W XORWF PWMDESIRED,W BTFSC STATUS,Z GOTO CONTROLE INCF PWMDESIRED,1 CALL DELAY GOTO CONTROLE DIMINUIR: MOVF MIN,W XORWF PWMDESIRED,W BTFSC STATUS,Z GOTO CONTROLE DECF PWMDESIRED,1 ; verifica se o valor de pwmdesired ja está no máximo ; se pwmdesired=max volta para CONTROLE ; caso contrario, incrementa a variavel pwmdesired

CALL DELAY GOTO CONTROLE Filtros Anti -debouncing: Os botões (que são chaves mecânicas convencionais, do tipo push-buttons ) geram, ao serem pressionados, o inevitável ruído elétrico conhecido na literatura como bouncing (referência 8). Com a finalidade de resolver tal problema, foi acrescentado um filtro por software, que nada mais é do que uma rotina de atraso de tempo (conhecida na literatura como delay ), que produz um atraso da ordem de 100 ms para um clock interno de 4 MHz e ciclo de máquina de 1 microsegundo. Tal rotina é descrita abaixo: DELAY: movlw.30 movwf FILTRO2 DL1: clrwdt movlw.255 movwf FILTRO1 DL2: clrwdt NOP DECFSZ FILTRO1,F GOTO DL2 DECFSZ FILTRO2,F GOTO DL1 RETURN Outro detalhe é o uso dos resistores de pull-up internos ao Microcontrolador PIC em questão, o que nos dispensou de usá-los externamente, através da configuração do registrador WPU. Também não foi utilizado nenhum oscilador de clock externo ao chip, nem cristal de quartzo, tendo-se optado pelo uso do oscilador RC interno ao chip como forma de minimizar a quantidade de componentes externos. É importante tecer algumas considerações sobre o estágio de Potência. A escolha recaiu para um transistor MOS de Efeito de Campo (MOS-FET) da International Rectifier, o IRLZ 44 N. A letra L no prefixo IRLZ indica que seu gate é adequado para controles lógicos e que o mesmo pode ser saturado com tensões de 5 Volts, o que não ocorre com os tipos IRF ou IRFZ. Nestes, um valor tão baixo de tensão pode não levá-lo à saturação, fazendo o Mos-Fet operar na região linear, o que iria provocar um considerável aquecimento do componente ( referência 6 ). Operando na condição de Corte e Saturação, o aquecimento é mínimo (não ocorre perda de energia por dissipação de potência na junção Dreno Source de maneira apreciável ). Assim, o transistor poderá manipular correntes elevadas (até 47 A segundo o datasheet do fabricante), exibindo (quando saturado) uma resistência DRENO-SOURCE ( Rds ) de apenas Rds = 0,022 ohms (6). A tensão máxima admissível entre D e S é de 55 Volts, ainda de acordo com (6). A escolha do resistor de Gate do mos-fet também é importante: a capacitância interna entre G e S é elevada (da ordem de 1700 pf ) e um resistor de valor elevado formaria com esta um RC com constante de tempo considerável, prejudicando o disparo rápido para corte e saturação deste transistor. Nota-se que o tempo necessário para que um capacitor que compõe uma rede RC esteja totalmente carregado é dado por: T = 5.R.C Onde o tempo é dado em segundos, o capacitor é dado em farads e o resistor em ohms.

E a Energia total acumulada por este capacitor será, em unidades SI (joules): CU E = 2 2 Onde C é a capacitância em farads e U é o valor final da tensão sobre o capacitor. Por outro lado, a carga elétrica total armazenada por este capacitor é dada por: Q = C.U Onde Q representa a carga total armazenada medida em coulombs. Tal energia acumulada na junção gate-source será da ordem de 0,02 microjoules e a carga elétrica total será de 0,0085 microcoulombs. Por outro lado, o menor valor de resistor admissível pela saída do microcontrolador PIC é de 200 ohms, pois tais dispositivos são especificados para uma corrente máxima de saída de 25 ma em 5 Volts de alimentação (ref. 7). O valor escolhido foi então de 200 ohms. Faz-se também necessário acrescentar um diodo zener entre o gate do mos-fet e a porta de saída do PIC, para evitar que spikes rápidos de tensão venham a atingir o microcontrolador, o que provocaria a queima do mesmo. Um diodo zener (1N4733A) foi inserido entre um resistor de 22 ohms e outro de 180 ohms associados em série, para evitar oscilações parasitas que poderiam provocar o disparo errático do terminal Gate do transístor Mos-Fet usado no estágio de potência. O diagrama elétrico do circuito experimentalmente adotado é mostrado abaixo: Figura-3 - Circuito Elétrico experimental proposto

A potência dissipada pela junção Dreno-Source do transistor Mos-Fet utilizado, considerando-se uma carga resistiva de 1,2 ohms acoplada ao dreno foi da ordem de 1,25 watts, o que equivale a uma energia de 1,25 J por segundo produzida na forma de calor. Tal medida foi efetuada em laboratório, usando-se um calorímetro específico. Essa dissipação de potência nos leva a recomendar o uso de um pequeno radiador de calor, preferencialmente em alumínio, acoplado termicamente ao transístor, com a finalidade de aumentar a superfície da pastilha em contato com o ar e possibilitar a necessária refrigeração. Recomenda-se ainda que tal dissipador de calor seja pintado na cor preta, com tinta apropriada para superfícies de alumínio, porque a cor negra tem melhores propriedades de irradiação térmica. Nota-se ainda pelo diagrama elétrico da figura 2 que um terminal jumper foi acrescentado no pino A3 (também denominado GPIO.3) com a finalidade de se acrescentar futuras inovações. A idéia é que, através da colocação deste jumper no circuito, novas funções possam ser implementadas, tais como a leitura de um LDR (Light Dependent Resistor) ou uma foto-célula, com a finalidade de comandar automaticamente a intensidade da iluminação ambiente, levando-se em conta o nível de luz local. Tais implementações serão oportunamente descritas. Ainda sobre a entrada GPIO.3 (na figura 2 chamada simplesmente A3) nota-se que também não foram utilizados os resistores de pull-up tradicionais, o que se traduz numa economia de componentes e maior confiabilidade para o circuito. Ao invés de se utilizar resistores de pull-up externos, optou-se mais uma vez pelo uso dos elementos internos ao Microcontrolador, que foram acionados através da correta configuração do registrador WPU: MOVLW 16h MOVWF WPU ;configura os resitores de pull-up Configurações Iniciais: As configurações usadas para inicializar o Microcontrolador, bem como o estado incial do registrador STATUS são descritas abaixo: #include <p12f675.inc> CONFIG 314Ch #define BANK0 BCF STATUS, RP0 #define BANK1 BSF STATUS, RP0 BANK1 ; ajusta oscilador interno para 4MHz CALL 3FFh MOVWF OSCCAL BANK0 CLRF GPIO MOVLW 07h MOVWF CMCON ; desliga comparadores analógicos BANK1 CLRF ANSEL ;todos I/Os digitais MOVLW 1Fh MOVWF TRISIO ;configura as saidas e entradas MOVLW 16h MOVWF WPU ;configura os resitores de pull-up MOVLW B'00000000' ; ajusta o OPTION_REG, TMR0 com divisor 1:2 MOVWF OPTION_REG ; habilita os pull-up MOVLW B'10100000' ;ajusta o INTCON MOVWF INTCON ;liga interrup do TMR0 e liga pull-ups BANK0

A seguinte subrotina Assembly tem por função verificar quando a variável pwmdesired atingiu seu valor máximo através do ajuste do botão UP pelo usuário: ;**************************************************************************** AUMENTAR: MOVF MAX,W ; verifica se o valor de pwmdesired ja está no máximo XORWF PWMDESIRED,W BTFSC STATUS,Z GOTO CONTROLE ; se pwmdesired=max volta para CONTROLE INCF PWMDESIRED,1 ; caso contrario, incrementa a variavel pwmdesired CALL DELAY GOTO CONTROLE ;***************************************************************************** Ressalta-se o uso da instrução XORWF (OU Exclusivo) com a finalidade de se efetuar a comparação entre a variável pwmdesired e a constante MAX, previamente definida no firmware para limitar o valor máximo a ser atingido pelo Ton (tempo no qual a saida permanece em nível lógico alto) do PWM. CONCLUSÃO: Este software é capaz de produzir na saída de qualquer Microcontrolador um PWM de ciclo ativo variável digitalmente através de 2 botões, com 255 passos de ajuste ( 256 steps, incluindo o valor 0). O consumo de memória do processador é inferior a 200 words (cerca de 20% da capacidade de um PIC12F675). A Frequência do PWM gerado gira em torno de 2,2 KHz. O período medido é de aproximadamente 450 us. O uso de um MOS-FET lógico de potência (IRLZ 44) da International Rectifier garante que elevadas correntes podem ser controladas, o que torna este dispositivo ideal para controle de luminosidade de lâmpadas e de velocidade de motores DC. A figura-4 mostra o aspecto final do protótipo que foi montado tendo por base uma placa de cicuito impresso padrão: Figura-4 Foto do Protótipo montado

REFERÊNCIAS: (1)- Ropcke, Ole. AN654, Aplicattion Note da Microchip (www.microchip.com) (2)- Zanco, Wagner. Microcontroladores PIC, Ed. Érica, 3 Edição (3)- Souza, David José. Desbravando o PIC, 6 Edição, Ed. Érica (4)- Pereira, Fabio. Microcontroladores PIC Técnicas Avançadas, Ed. Érica. (5)- Fambrini, Francisco Apostila sobre Linguagem Assembly, INTEP, edição do Autor. (6)- International Rectifier, Datasheet do transistor IRLZ 4 (7)- Microchip, Datasheet do microcontrolador PIC12F6xx (8)- www.rentron.com/myke6.htm Myke Predko, artigo sobre bouncings ANEXO1- LISTA DE MATERIAL REFERENTE AO CIRCUITO DA FIGURA 3 ANEXO-2- CÓDIGO FONTE COMPLETO DO FIRMWARE IMPLEMENTADO

Anexo 1 Lista de Material referente ao circuito da fig- 2 Circuitos Integrados c.i. 1 Resistores R1 R2 R3 Capacitores C1 C2 C3 C4 Diodos D1 D2 D3 chaves S1 e S2 Transistor Q1 PIC 12F675 - Microcontrolador Microchip todos 1/8 Watt 470 ohms 22 ohms 180 ohms 470 uf, 25V, cap eletrolítico 220 uf, 25V, cap eletrolitico 100nF, 16V, cap. cerâmico disco 100uF, 16 V, cap eletrolitico 1N4007, diodo de Silicio 1N4733A, diodo zener 5.1 V, 1 watt 1N4733A, diodo zener 5.1 V, 1 watt chaves tipo push button para circuito impresso Transistor Hex Power Mos-Fet IRLZ 44 N

ANEXO - 1 ;****************************************************** ; PWM por software para PIC12F675 * ; VARIAVEL PWMDESIRED CONTROLA * ; O NIVEL DE PWM * ;;***************************************************** #include <p12f675.inc> CONFIG 314Ch #define BANK0 BCF STATUS,RP0 #define BANK1 BSF STATUS,RP0 ;**************************** ;variaveis do programa ;**************************** CBLOCK 0X20 STACKW STACKS COUNTER COUNTER2 PWMDESIRED PWMMAX PWMHELP MAX ;VALOR MAXIMO DO PWMDESIRED MIN ;VALOR MINIMO FILTRO1 ;filtros dos botoes FILTRO2 FLAGS ENDC ;**************************** ; Constantes usadas no programa: PWMADJUSTVAL EQU.22 PWMMAXVAL EQU.29 ;**************************** #define LDR GPIO,0 #define BT1 GPIO,1 #define BT2 GPIO,2 #define JUMPER GPIO,4 #define LED GPIO,5 org 0x00 goto power_on ;*********************************** ;Endereco inicial da interrupcao ;*********************************** org 0x04 btfsc TMR0,0 GOTO PwmInt PwmInt: movwf STACKW

SWAPF STACKW,F SWAPF STATUS,W MOVWF STACKS BCF INTCON,T0IF BTFSC LED GOTO LOWPULSE HIGHPULSE: COMF PWMDESIRED,W MOVWF PWMHELP ADDWF PWMMAX,F BTFSS STATUS,C GOTO HIGHIMPINT HIGHIMPSHRT: MOVF PWMMAX,W ADDWF PCL,F INCF COUNTER,F COMF PWMHELP,W ADDLW PWMADJUSTVAL+5 MOVWF TMR0 GOTO LOWIMPINT2 HIGHIMPINT: ADDLW PWMADJUSTVAL MOVWF TMR0

HIGHIMPINT2: INCF COUNTER,F MOVLW PWMMAXVAL-1 MOVWF PWMMAX SWAPF STACKS,W MOVWF STATUS SWAPF STACKW,W RETFIE ;**************************** LOWPULSE: COMF PWMHELP,W ADDWF PWMMAX,F BTFSS STATUS,C GOTO LOWIMPINT LOWIMPSHRT: MOVF PWMMAX,W ADDWF PCL,F COMF PWMDESIRED,W MOVWF PWMHELP ADDLW PWMADJUSTVAL+5 MOVWF TMR0 GOTO HIGHIMPINT2

LOWIMPINT: ADDLW PWMADJUSTVAL MOVWF TMR0 LOWIMPINT2: MOVLW PWMMAXVAL MOVWF PWMMAX SWAPF STACKS,W MOVWF STATUS SWAPF STACKW,W RETFIE ;********************************************************************* ; inicio do programa propriamente ;********************************************************************* power_on: ;ajustes iniciais clrf TMR0 CLRF PWMDESIRED MOVLW PWMMAXVAL MOVWF PWMMAX ;******************************************************************* ; Configuração do PIC ;******************************************************************* BANK1 ; ajusta oscilador interno para 4MHz CALL 3FFh MOVWF OSCCAL BANK0 CLRF GPIO MOVLW 07h MOVWF CMCON BANK1 CLRF ANSEL MOVLW 1Fh MOVWF TRISIO MOVLW 16h MOVWF WPU ; desliga comparadores analógicos ;todos I/Os digitais ;configura as saidas e entradas ;configura os resitores de pull-up MOVLW B'00000000' ; ajusta o OPTION_REG, TMR0 com divisor 1:2 MOVWF OPTION_REG ; habilita os pull-up MOVLW B'10100000' ;ajusta o INTCON MOVWF INTCON ;liga interrup do TMR0 e liga pull-ups BANK0 ;**************************************** Idle:

clrwdt btfss COUNTER,07h goto Idle bcf COUNTER,07h ;********************** ;Controle do PWM ;********************** MOVLW.0 MOVWF PWMDESIRED ;valor inicial do PWM MOVWF MIN ;valor minimo do pwm MOVLW.250 ;valor maximo do pwm MOVWF MAX CONTROLE: clrwdt ;****************** ;Checa o botao 1: ;****************** BTFSS BT1 GOTO AUMENTAR ;****************** ;Checa o botao 2: ;****************** BTFSS BT2 GOTO DIMINUIR goto CONTROLE ;****************** ;****************************************************************** AUMENTAR: MOVF MAX,W ; verifica se o valor de pwmdesired ja está no máximo XORWF PWMDESIRED,W BTFSC STATUS,Z GOTO CONTROLE ; se pwmdesired=max volta para CONTROLE INCF PWMDESIRED,1 ; caso contrario, incrementa a variavel pwmdesired CALL DELAY GOTO CONTROLE ;****************************************************************** ;****************************************************************** DIMINUIR: MOVF MIN,W XORWF PWMDESIRED,W BTFSC STATUS,Z GOTO CONTROLE DECF PWMDESIRED,1 CALL DELAY GOTO CONTROLE ;****************************************************************** ;************************* ; Rotina de delay ;************************* DELAY:

movlw.30 movwf FILTRO2 DL1: clrwdt movlw.255 movwf FILTRO1 DL2: clrwdt NOP DECFSZ FILTRO1,F GOTO DL2 DECFSZ FILTRO2,F GOTO DL1 RETURN ;************************ END