2 bimestre foi passado um projeto que reunia conhecimento de ambas as matrias lecionadas pelo professor Romeu, so elas CAI e ELI. O assunto do trabalho era Automao Acionamento de motores DC, cada grupo deveria desenvolver um circuito em duas possveis tecnologias: analgica (concebida atravs de CIs analgicos) ou digital (utilizando microcontroladores da famlia MCS51). O circuito deve poder controlar um motor DC em ambos os sentidos de rotao e poder cobrir uma faixa de 10% a 90% do duty-cycle (analgico) com uma frequncia padro de 400 Hz. Se digital dever tambm poder controlar o motor tanto no sentido horrio de rotao, quanto no anti horrio, mas com quatro chaves para seleo de velocidade (10%, 20%, 40%, 60%, 80% e 100% de ciclo de atividade).
Algumas semanas aps a entrega da proposta do trabalho, nos reunimos para discutir as ideias inicias do nosso projeto pois estvamos decididos a finaliz-lo o mais rpido possvel visto que, como todo fim de semestre, a semana de provas nos atrapalharia se deixssemos para ltima hora. O primeiro ponto discutido foi: Projetar um circuito analgico ou digital.
A primeira opo exigia um desgaste maior para ser feita e necessitava um circuito mais complexo, decidimos ento aproveitar nossos conhecimentos em programao e projetar um circuito digital atravs da linguagem assembly e o microcontrolador 8051 (como requisitado na proposta).
Ao longo dos meses que compuseram o bimestre, desenvolvemos o nosso controle por PWM do motor seguindo um cronograma realizado nas primeiras reunies do grupo. Pelo fato de termos terminado o projeto com certa antecedncia, resolvemos tentar aprimor-lo para que se destacasse entre os outros trabalhos. Para isso fizemos outra placa, dessa vez optando por desenvolver um circuito onde seria possvel escolher a potncia desejada para o motor e adicionamos tambm um display LCD mostrando informaes diversas como o sentido e a potencia entregue ao motor.
Tambm compramos uma espcie de caixa, para, depois de tudo pronto, colocar o circuito e melhorar a sua aparncia. Para isso, marcamos os locais que ficariam os botes que regulam a velocidade (pedido da proposta) e o LCD.
Embasamento Terico
O PWM, do ingls, Pulse-Widht Modulation, consiste em uma forma de modulao atravs da alterao da razo cclica (duty cicle) que pode ser utilizada tanto para se transmitir dados, quanto para se controlar a alimentao de uma carga, sendo esta ltima a sua aplicao mais comum. A tenso e corrente mdias entregues carga so controladas alternando a alimentao entre "ligado" e "desligado" utilizando-se uma chave. Quanto maior for o tempo que o pulso est ligado, maior ser a potncia disponvel na carga.
Esquemtico do funcionamento do PWM
Se quisermos por exemplo obter uma voltagem de 50% entregue carga, basta fazermos que a chave oscile de modo a ficar 50% do tempo fechada e 50% do tempo aberta. Em mdia, teremos metade do tempo com corrente e metade do tempo sem corrente.
Representao grfica do exemplo acima
A principal vantagem do PWM seu baixo ndice de perdas, uma vez que quando o pulso estiver em nvel baixo praticamente no h corrente de fuga e quando estiver em nvel alto a queda de tenso na chave quase nula.
PWM utilizando 8051
A idia bsica por trs da implementao de um PWM utilizando 8051 utilizar o seu timer interno e alterar o valor lgico (0 ou 1) das portas de sada em intervalos definidos. Alterando o tempo ativo da onda quadrada podemos alterar o valor mdio da alimentao entregue sem alterar sua frequncia. Movendo para os registradores diferentes valores podemos obter diversas contagens e com isso outros duty cicles e consequentemente novos valores de velocidade do motor. Tambm foi pedido que se controlasse o sentido de direo do motor, para isso suficiente inverter o nvel de tenso nos pinos, visto que quando polarizado de uma forma o motor adquire certo sentido de rotao, e quando polarizado de maneira reversa sua rotao acontecer no sentido oposto. Justamente pelo motivo de o microcontrolador da famlia MCS51 ter nativamente todos os requerimentos para se montar o PWM, nosso projeto pode ser simplificado de tal forma que acreditamos ter sido uma tima escolha de CI.
Parte Prtica
Hardware
Assim como nos outros trabalhos feitos at agora, o software foi desenvolvido primeiramente, uma vez que, para termos certeza de seu funcionamento na placa de circuito impresso, necessario fazer a simulao em um software com plataforma Windows adequado. O PROTEUS foi o tal escolhido, pois oferece a praticidade de podermos simular o schematic do circuito e tambm fazer o desenho da PCI. Desta vez, comeamos o desenvolvimento com bastante antecedncia, porque o desenvolvimento do software (programa a ser simulado) foi de simples realizao, o que proporcionou o desenvolvimento da primeira placa com algo torno de um ms de antecedncia data de apresentao. Essa rapidez em projetar foi um tanto quanto benfica ao grupo, pois pudemos realizar o trabalho com o tempo muito bem dividido. O circuito final foi o seguinte:
Aps terminar a fase de testes simulados, desenhamos a placa no PROTEUS ISIS, de modo que ela ficasse no menor tamanho possvel. Conseguimos reduz-la ao tamanho 10x10cm. Diante de tudo pronto, plotamos o circuito em um impressora a laser, de modo a fazer a transferncia trmica para placa de cobre/fenolite. O desenho da placa ficou do seguinte modo:
Assim, aps fazermos a transferncia por meio de um ferro de passar roupas em sua potencia mxima, fizemos as correes necessrias com uma caneta de marcar cds, devido a algumas falhas na transferncia. Assim, com tudo ajustado, utilizamos uma soluo concentrada de percloreto de ferro (em torno de 0,5kg/L) para fazer a corroso do cobre da placa. O resultado foi bem satisfatrio, como as fotos podem demonstrar, e ento, utilizando um furador apropriado para placas de fenolite, fizemos os furos nos locais determinados. Aps isso, soldamos os componentes necessrios (vide tpico Controle de Custos) com o material de segurana adequado a todo tcnico, utilizando o estanho comum nesse processo e um ferro de solda de 30W. O resultado da primeira placa foi:
Assim, ao fazer o primeiro teste, nos deparamos com uma situao incomum: o circuito funcionou perfeitamente como queriamos na primeira vez em que ligamos a fonte. Foi uma grande surpresa. Entretanto, como havia ainda mais tempo para a apresentao final, decidimos ter mais um desafio: implementar um LCD (display de cristal lquido) no circuito, para que mostre a potencia adotada (xx%) e a direo (acionada por push button). Assim, a visualizao ficaria bem mais intuitiva na relao homem-mquina. A placa manteve-se praticamente a mesma, pois podemos ver que sobraram 2 ports do 8051 para serem utilizados. Logo, colocamos o circuito necessrio para o funcionamento do lcd necessitando apenas de mnimas alteraes no circuito anterior, como podemos ver na imagem a seguir. Como j tnhamos feito o programa base de comunicao com o display na matria Tcnicas Digitais de Microprocessadores II, ns apenas fizemos as alteraes de acordo com o programa que j havamos desenvolvido para a primeira placa. (O programa completo est em anexo) A simulao desta segunda parte ocorreu sem problemas, com o circuito a seguir:
Aps testarmos tudo no mesmo simulador (PROTEUS), realizamos o mesmo processo: desenho da placa de circuito impresso, impresso em papel Glossy (especfico para tal trabalho), transferncia trmica com ferro de passar roupas, corroso com o percloreto de ferro, furos e soldagem com os novos componentes, alm da organizao do flat cable utilizado agora para o lcd, e depois os testes. Diferentemente da primeira placa, no houve sucesso nos testes, e como no havia mais tempo para tentar solucionar o problema, resolvemos aprensentar apenas a placa inicial, sem o LCD
START: CLR EN ;Inicia com o motor desligado CLR IN1 ;Garante que o motor no girar para nenhum ;lado CLR IN2 MOV R3,#00H MOV B,#00H MOV TMOD,#11H ;Configura o Timer 1 e o Timer 0 no Modo 1 MOV IE,#81H ;Ativa a interrupo Externa 0 SJMP PWM ;Inicia a rotina do PWM
PWM: MOV TH0,#0FFH ;Carrega o Timer 0 com FF06h MOV TL0,#06H SETB TR0 ;Ativa o Timer 0 JNB TF0,$ ;Espera o final da contagem INC R3 ;Incrementa o contador limitador da onda CJNE R3,#0BH,CONTINUA ;Se o contador j foi incrementado 10 vezes ;termina a rotina da onda MOV R1,B ;Copia o valor da potencia para R1 de B CLR TF0 ;Desliga o timer 0 MOV R3,#00H ;Reseta o contador limitador JMP PWM ;Reinicia a rotina do PWM
CONTINUA: CJNE R1,#00H,DUTY_HIGH ;Verifica se a onda deve continuar em 1 ou 0 CLR EN ;Coloca o pino EN em 0, ou seja, desliga o ;motor momentaneamente CLR TF0 ;Reseta o flag do timer 0 JMP PWM ;Volta para o lao principal do PWM
DUTY_HIGH: ;Continua a onda com 1 SETB EN ;Mantem o pino EN no nvel alto DEC R1 ;Decrementa o contador do controle de potencia CLR TF0 ;Reseta o flag do timer 0 JMP PWM ;Volta para o lao principal do PWM
INT_1: JB ON_OFF,VARRE1 ;Verifica se o boto ON/OFF foi apertado MOV R7,B ;Se sim, salva o conteudo de B em R7 CJNE R7,#00H,DESLIGA ;Se R7 = 0, liga o motor MOV B,30H ;Copia o valor salvo em 30h para o acumulador ;e para o registrador de controle de potencia MOV R1,30H SETB IN1 ;Gira para a esquerda CLR IN2 RETI ;Fim da interrupo/varredura DESLIGA: MOV 30H,B ;Salva o conteudo do registrador em um local de ;memoria MOV B,#00H ;Zera o PWM, ou seja, desliga o motor MOV R1,#00H CALL DEBOUNCE RETI
VARRE1: ;Verifica se o boto de direo (esquerda ou ;direita) foi acionado, mudando os pinos IN1 e ; IN2 para seus respectivos valores JB ESQ,VARRE2 SETB IN2 CLR IN1 CALL DEBOUNCE RETI
VARRE2: JB DIR,VARRE3 SETB IN1 CLR IN2 CALL DEBOUNCE RETI VARRE3: ;Verifica qual foi o boto de potencia apertado e ;copia seu respectivo valor para o registrador de ;controle de pulsos JB POWER10,VARRE4 MOV B,#01H MOV R1,#01H CALL DEBOUNCE RETI
VARRE4: JB POWER20,VARRE5 MOV B,#02H MOV R1,#02H CALL DEBOUNCE RETI
VARRE5: JB POWER40,VARRE6 MOV B,#04H MOV R1,#04H CALL DEBOUNCE RETI
VARRE6: JB POWER60,VARRE7 MOV B,#06H MOV R1,#06H CALL DEBOUNCE RETI
VARRE7: JB POWER80,VARRE8 MOV B,#08H MOV R1,#08H CALL DEBOUNCE RETI
VARRE8: JB POWER100,FIM_VARRE MOV B,#0AH MOV R1,#0AH CALL DEBOUNCE FIM_VARRE: ;Fim da varredura RETI
DEBOUNCE: ;Rotina de debounce MOV TH1,#0FFH MOV TL1,#06H SETB TR1 JNB TF1,$ CLR TF1 RET
;Rotina de Inicializao INI_LCD: CLR RW ;Indica que ser uma operao de escrita CLR RS ;Indica que ser enviado um comando MOV P0,#38h ;Modo 8 bits, caracteres 5x7 SETB EN_LCD ;Pulso no Enable NOP NOP CLR EN_LCD CALL DELAY_15MS ;Delay de 15ms para assegurar o recebimento CLR RS MOV P0,#38h ;Repete o comando anterior SETB EN_LCD NOP NOP CLR EN_LCD CALL DELAY_15MS MOV A,#06h CALL CMD_LCD MOV A,#0Ch CALL CMD_LCD RET
;Rotina para Escrever Dados no LCD DADO_LCD: CLR EN_LCD CLR RW SETB RS MOV P0,A SETB EN_LCD CALL ESPERA_LCD RET
;Rotina para Escrever Strings no LCD STRING_LCD: CLR A ;Limpa o Acumulador por segurana MOVC A,@A+DPTR ;Move o 1 Caractere (convertido para ASCII) para ;Acc CJNE A,#0FFH,CONTINUASTRING ;Verifica se o cdigo do caractere FFh(usado ;como marcao de fim de mensagem no caso), ;Se sim, termina o envio, se no, continua ;enviando a string at acabar JMP FIMSTRING CONTINUASTRING: CALL DADO_LCD ;Envia para o LCD INC DPTR ;Incrementa o DPTR, indicando que dever ;ser colocado no acumulador o endereo ;do prximo caractere JMP STRING_LCD FIMSTRING: RET
;Rotina para Escrever Comandos no LCD CMD_LCD: CLR EN_LCD ;Comea o Comando CLR RW ;Indica que uma operao de escrita CLR RS ;Indica que um comando MOV P0,A ;Move o comando do acumulador para a porta ; do LCD SETB EN_LCD ;Pulso do Enable CALL ESPERA_LCD ;Espera o LCD ficar livre RET
;Rotina para limpar o LCD LIMPA_LCD: CLR RS ;Indica que um comando MOV P0,#01h ;Comando = Limpar o LCD SETB EN_LCD ;D um pulso no Enable para enviar o comando CLR EN_LCD CALL ESPERA_LCD ;Espera o LCD ficar livre RET
;Rotina para verificar se o LCD est ocupado ESPERA_LCD:
CLR EN_LCD ;Comea o Comando CLR RS ;Identifica que ser enviado um comando SETB RW ;Habilita a Leitura MOV P0,#0FFh ;Coloca todos os Pinos em FFh SETB EN_LCD ;Termina o comando JB P0.7,ESPERA_LCD ;Verifica se o Busy Flag est em "0", ou seja, ;o LCD est livre CLR EN_LCD ;Volta EN ao estado inicial CLR RW ;Volta RW ao estado inicial RET
;Rotina para mover o cursor para a 2 Linha do LCD LINHA2_LCD: CLR RS ;Identifica que ser enviado um comando MOV P0,#0C0H ;Envia o comando "Definir posio do Cursor" ;(80h) e o end. do 1 caractere da 2 linha ;(40h) -> C0h SETB EN_LCD ;D um pulso no Enable para enviar o comando CLR EN_LCD CALL ESPERA_LCD ;Espera o LCD ficar livre RET
;Delay de 15 ms para o LCD DELAY_15MS: MOV R5,#30 D15MS: MOV R6,#250 DJNZ R6,$ DJNZ R5,D15MS RET ;--- ENVIA_VALOR_POTENCIA: ;Exibe a mensagem Potencia: % no lcd CLR RS ;Identifica que ser enviado um comando MOV P0,#80H ;Envia o comando "Definir posio do Cursor" ;(80h) e o end. do 1 caractere da 1 linha ;(00h) -> 80h SETB EN_LCD ;D um pulso no Enable para enviar o comando CLR EN_LCD CALL ESPERA_LCD ;Espera o LCD ficar livre MOV DPTR,#POTENCIA_LCD ;Envia a mensagem "Potencia: % CALL STRING_LCD CALL VALOR_POTENCIA ;Insere valor da potncia no display RET
VALOR_POTENCIA: ;Enviar o valor da potencia para o LCD CJNE R4,#0AH,UNDER100 CLR RS ;Identifica que ser enviado um comando MOV P0,#8AH ;Envia o comando "Definir posio do Cursor" ;(80h) e o end. do 10 caractere da 1 linha ;(0Ah) -> 8Ah SETB EN_LCD ;D um pulso no Enable para enviar o comando CLR EN_LCD CALL ESPERA_LCD ;Espera o LCD ficar livre MOV A,#31H CALL DADO_LCD ;Envia o dado para o LCD MOV A,#30H CALL DADO_LCD MOV A,#30H CALL DADO_LCD RET
UNDER100: CLR RS ;Identifica que ser enviado um comando MOV P0,#8AH ;Envia o comando "Definir posio do Cursor" ;(80h) e o end. do 10 caractere da 1 linha ;(0Ah) -> 8Ah SETB EN_LCD ;D um pulso no Enable para enviar o comando CLR EN_LCD CALL ESPERA_LCD ;Espera o LCD ficar livre MOV A,R4 ADD A,#30H ;Soma o nmero relativo ao boto pressionado ;com 30h, resultando em seu valor ASCII CALL DADO_LCD ;Envia o dado para o LCD MOV A,#30H CALL DADO_LCD RET
ENVIA_SENTIDO_LCD: ;Exibe qual o sentido de rotao do motor CALL LINHA2_LCD MOV DPTR,#SENTIDO_LCD ;Envia a mensagem "Sentido:" CALL STRING_LCD CALL SENTIDO ;Insere o sentido de rotao (Esquerda ou ;Direita) RET
SENTIDO: ;Envia o Sentido de rotao CLR RS ;Identifica que ser enviado um comando MOV P0,#0C8H ;Envia o comando "Definir posio do Cursor" ;(80h) e o end. do 8 caractere da 2 linha ;(48h) ->C8h SETB EN_LCD ;D um pulso no Enable para enviar o comando CLR EN_LCD CALL ESPERA_LCD ;Espera o LCD ficar livre CJNE R2,#01H,ENVIA_ESQUERDA MOV DPTR,#DIREITA_LCD CALL STRING_LCD RET ENVIA_ESQUERDA: MOV DPTR,#ESQUERDA_LCD CALL STRING_LCD RET
ENVIA_DESLIGA_LCD: CALL LIMPA_LCD CLR RS ;Identifica que ser enviado um comando MOV P0,#80H ;Envia o comando "Definir posio do Cursor" ;(80h) e o end. do 1 caractere da 1 linha ;(00h) -> 80h SETB EN_LCD ;D um pulso no Enable para enviar o comando CLR EN_LCD CALL ESPERA_LCD ;Espera o LCD ficar livre MOV DPTR,#DESLIGADO_LCD ;Envia a mensagem "Desligado" CALL STRING_LCD RET
SENTIDO_LCD: DB 'SENTIDO:',0FFH POTENCIA_LCD: DB 'POTENCIA: %',0FFH DIREITA_LCD: DB 'DIREITA',0FFH ESQUERDA_LCD: DB 'ESQUERDA',0FFH DESLIGADO_LCD: DB 'DESLIGADO',0FFH END
Controle de Custos - Materiais Utilizados
Componente Qtde Valor Unitrio Valor Total Borne com Parafuso 2 R$0,60 R$1,20 Boto 6x6mm 25 R$0,25 R$6,25 Cristal 12MHz 2 R$0,70 R$1,40 CI L293D 1 R$10,40 R$10,40 Soquete estampado 40 pinos 3 R$0,40 R$1,20 Soquete Torneado 20 pinos 1 R$1,50 R$1,50 CI 7805 2 R$0,90 R$1,80 Capacitor Eletroltico 10uF/50v 5 R$0,10 R$0,50 Capacitor Cermico 33pF/50v 4 R$0,05 R$0,20 Diodo 1N4007 / 1A 25 R$0,06 R$1,50 Resistor 120 / 0.5W 4 R$0,02 R$0,08 Resistor 10K / 0.5W 10 R$0,02 R$0,20 Resistor 8k2 / 0.5W 3 R$0,02 R$0,06 Conector para Fonte P4 2 R$1,00 R$2,00 Motor 12v DC 1 R$10,00 R$10,00 Placa 10x10cm 1 R$2,50 R$2,50 Placa de Fenolite 10x15cm 1 R$2,90 R$2,90 Display LCD 16x2 1 R$25,00 R$25,00 CI AT89S52 1 R$5,85 R$5,85 Barra de 40 pinos Estanhada 1 R$0,50 R$0,50 Trimpot Vertical 10k 1 R$1,00 R$1,00 Rede Resistiva 10k 1 R$0,60 R$0,60 Caixa de Plstico 1 R$17,50 R$17,50
Total: R$94,14 -> R$15,69 para cada integrante.
Concluso
Aps feitos os projetos, conclumos que a construo dos mesmos tem se tornado cada vez mais fcil, j que ao longo desses anos de curso aprendemos novas tcnicas e aperfeioamos aquelas que j havamos aprendido. Desta vez, nosso projeto funcionou na primeira vez testada, sem nenhum problema, o que indica o avano que temos tido. O grande problema deste trabalho foi achar uma caixa que se adaptasse aos botes escolhidos, por isso o mesmo no ser acompanhado desta. Para otimizar o projeto, decidimos fazer uma outra placa com display indicando o que o motor estaria fazendo, porm os vrios gravadores que nossa turma fez em outro ano no funcionavam mais e tivemos que utilizar o gravador que um colega comprou, o que atrasou um pouco o andamento do projeto, pois dependamos dele para conseguir testar e regravar o programa. No queramos mudar o programa da placa do motor por segurana, ento utilizamos outro microcontrolador. No final no foi possivel a implementao da placa com o LCD pois houveram problemas na gravao do programa e teste da placa. Ento decidimos utilizar a placa anterior somente com o controle do motor para a apresentao, j que estava em perfeito funcionamento.
Cruz, Eduardo Cesar Alves, 1960 - Eletrnica Aplicada/ Eduardo Cesar Alves Cruz, Salomo Choueri Jnior. -2Ed- Editora rica, So Paulo, 2008
Cipelli, Antonio Marco V., 1954 Teoria e Desenvolvimento de Projetos de Circuitos Eletrnicos / Antonio Marco V. Cipelli, Otvio Markus, Waldir Joo Sandrini. -- 23, ed. -- So Paulo: rica, 2007.
Controlador PWM para motor DC de 3A - Revista Elektor Portugal - Eletrnica & Microinformtica. Disponvel em: http://www.elektor.com.pt/revistas/2008/julho-047- agosto/controlador-pwm-para-motor-dc-de-3-a.602257.lynkx . Ultimo acesso em 01/06/2013.
Controle PWM de Motor DC - NE0009. Disponivel em : http://www.newtoncbraga.com.br/index.php/circuitos/142.html. Ultimo acesso em: 15/05/13
Circuito de Controle de Motor DC usando 555 - PWM - Eletrnica e Circuitos. Disponivel em: http://www.eletronica.com/circuito-de-controle-de-motor-dc-usando-555-pwm/ Ultimo acesso: 15/05/13.