SlideShare a Scribd company logo
1 of 5
Download to read offline
Tutorial Motores – Parte 1: Lógica de
programação para motores elétricos
Ao iniciarmos qualquer projeto é necessário, primeiramente, saber qual o tipo de motor a ser utilizado.
Logo em seguida é preciso saber algumas especificações do mesmo tal como tensão e corrente
máxima e, caso seja um motor de passo, o ângulo de giro por passo, se trabalhamos com um motor de
ímã permanente, relutância variável ou híbrido e, se possível, a sequência dos cabos para manter o
giro do motor.
Uma boa referência para estudo dos motores elétricos é o livro “Motores Eléctricos – António
Francisco”.
Para ilustrar programação aplicada a motores elétricos, serão apresentados dois projetos: um com um
motor de passo, e outro com um motor dc. Os motores utilizados têm características especificas como
será apresentado. Por isso, se você for aplicar o que está nesse tutorial na prática, confira as
especificações de seu motor e ajuste o que for necessário.
Nos projetos que se seguem utilizaremos Linguagem C e PICs como nossas unidades de
processamento de dados. Assim sendo, é importante também que conheçamos as especificações do
microcontrolador, essas podem ser facilmente encontradas em seus datasheets disponíveis na
internet. Os circuitos de controle para implementação dos microcontroladores serão tema de uma
próxima postagem!
PROJETO 1
Precisamos que um motor gire um determinado eixo de uma máquina em 36°, no sentido horário,
sempre que o controlador aperte um botão no painel. Para tal utilizaremos um motor de passo híbrido
de 1,8°/passo. O motor conta com oito cabos de cores diferentes (Amarelo, Vermelho, Branco, Laranja,
Preto, Azul, Verde e Marrom).
Ao estudarmos as especificações do motor, soubemos que os cabos Amarelo, Branco, Azul e Verde
estão sempre conectados ao terminal de menor potencial de nossa fonte. Portanto devemos nos
preocupar em criar uma lógica de programação para energizar apenas os cabos Preto, Laranja,
Vermelho e Marrom.
Ainda estudando o datasheet do motor vemos que para manter um movimento do motor no sentido
horário devemos energizar os cabos na seguinte ordem: Vermelho, Laranja, Preto, Marrom (e
reiniciarmos o ciclo). E para um movimento no sentido anti-horário basta que os energizemos na
ordem inversa: Marrom, Preto, laranja, Vermelho.
Podemos tratar dessa ordem de cores agora como uma palavra binária de quatro bits sendo o cabo
vermelho o LSB e o cabo marrom o MSB, assim, na saída do microcontrolador poderemos usar o
equivalente binário para a sequência numérica: 1, 2, 4, 8.
Agora, em posse desses dados sobre o motor, construiremos a nossa lógica. O programa utilizado foi
o PIC C COMPILER. A vantagem desse programa é que podemos utilizar a função Project Wizard
(PW) e através dessa interface configurar o PIC da forma que quisermos (inserindo quais serão os
terminais de entrada e saída de dados, freqüência de trabalho do PIC, se queremos o Master Clear
ativado ou não, etc.) sem precisar gastar várias linhas de programação o fazendo manualmente.
Utilizaremos aqui o PIC 16F628a.
Desenvolvimentodoprojeto:
Parte 1- Programa Lógico:
Quando utilizamos o recurso do PW o programa gera para o programador uma biblioteca já com as
especificações do projeto. Essa biblioteca terá o mesmo nome do projeto e será automaticamente
inserida na página de programação, como pode ser visto na figura 2. Uma boa ideia é separar sempre
uma pasta para cada projeto, pois cada programa gera uma série de auxiliares de mesmo nome,
porém com extensões diferentes, com o tempo e acumulo de programas pode se tornar uma grande
bagunça.
Caso o programador queira ele pode também incluir outras bibliotecas para o programa, mas para
esse nosso caso não se faz necessário. Segue então a nossa lógica:
– O que se segue em vermelho foi gerado pelo programa ao finalizarmos a configuração do
microcontrolador no PW.
– O que se segue após o “//” até a quebra de linha (parágrafo) são comentários e não afetam na lógica
do programa.
– É válido lembrar que quando dizemos que na saída do controlador sairá um número inteiro, ex.: 7, o
mesmo fará a conversão para binário, logo na saída teríamos: 111.
#include <motor4.h>// O nome do nosso projeto é “motor4”. Portanto, o compilador gerou uma
biblioteca de mesmo nome e a inseriu em nosso programa logo após finalizarmos a configuração do
microcontrolador através do PW.
int s, k, botao; //variaveis inteiras (int) declaradas para execução do programa
void main()//inicio do programa
{
s=1;//condição inicial da variável s (Saída para os cabos do motor)
while (1){//início do infinite loop – Forma utilizada para que o programa nunca chegue ao fim já que 1=1
a todo momento.
botao=input(PIN_A0); //Com esse comando a variável botao sempre assumirá o valor lógico da porta
A0
if(botao){ //[ou “if(botão==1)”]condição para iniciar o movimento de 36°
for(k=1;k<=21;k++){ // número k de passos para o movimento de 36° – Como cada passo tem 1,8°, são
necessários 20 passos para completar os 36° – Aqui fizemos um contador de passos do motor.
if(s>=16){
s=1;
}
//A lógica para o movimento no sentido horário é 1, 2, 4, 8 – Podemos facilmente perceber a
progressão com o multiplicador 2. Entretanto, ao atingir o ultimo fio, queremos que o motor reinicie o
ciclo para manter o movimento. Assim, o número seguinte da progressão seria 16, mas com esse
regulador fazemos com que o ciclo seja retomado.
output_B(s);// Aqui determinamos que nas portas da família B (B0-B7)saia o valor de s (em binário)
s=s*2;//Aqui está a nossa progressão dos valores da saída em B. Ao atingir essa linha, a nossa
variável s assumirá um valor duas vezes maior que o anterior.
delay_ms(100);// Aqui determinamos uma pausa em milissegundos (100 ms) para que o programa
reinicie o loop. Esse delay varia de motor para motor, pois alguns motores foram projetados para ter
menos velocidade que outros. É importante que se faça uma pesquisa do limite de velocidade do
motor para não comprometer o equipamento. Caso o motor comece a esquentar ou perca o passo,
significa que você excedeu o limite do mesmo. Essa velocidade é controlada pelo programador,
supondo que nosso motor suporte eu poderia ter escrito: “delay_ms(30);”.
}
}
}
}//Fim do Programa
Figura 1: Criando um novo projeto (Project Wizard)
Figura 2: Tela de programação após configuração do microcontrolador com a função Project Wizard
PROJETO 2
Precisamos de um motor que faça um movimento horizontal em um trilho. Esse motor deve ir numa
direção ou outra do trilho sempre que exigido, obedecendo o final do percurso. O sistema deve permitir
que o motor assuma duas velocidades diferentes. Nota: O motor a ser utilizado é um motor DC de 12V.
Assim como utilizamos o PIC e a programação em C para criar um sistema de controle pra um motor
de passo, podemos fazer o mesmo para o controle de um motor de corrente contínua (DC).
O motor DC é muito mais simples que um motor de passo. Só possui dois cabos e pode girar num
sentido ou em outro a depender de qual cabo estará no terminal positivo da fonte. Entretanto o
problema nos exige que seja oferecida uma mudança dinâmica do estado do motor. Para isso
utilizaremos um circuito conhecido como ponte H. Esse circuito cuidará para que a polaridade do motor
seja alterada sempre que o controlador exija.
Uma segunda condição do problema é o controle de velocidade. Diferente do motor de passo que o
controle de velocidade tem que ser feito durante a programação, o motor DC possui sua velocidade
alterada pela ddp aplicada em seus terminais. Assim podemos construir um circuito auxiliar contanto
com relés de forma que cada um forneça uma tensão diferente para a alimentação do motor. Vamos
inserir também um comando no controlador para evitar que as duas chaves sejam abertas
simultaneamente.
Utilizaremos nesse projeto um componente chamado chave de fim de curso. Esta será utilizada para
evitar que por algum erro do controlador o motor tente extrapolar o final do trilho.
Assim como no controle do motor de passo utilizaremos o PIC C COMPILER e o Project Wizard para
esse novo projeto.
Parte1-ProgramaLógico:
Teremos nesse circuito então seis entradas de dados e quatro saídas. As entradas e saídas cumprirão
os papéis:
1) Duas entradas serão as chaves de fim de curso para parar o motor sempre que ativadas e evitar
que o motor saia do trilho.
2) Duas entradas serão atribuídas para o controle de velocidade. Esse controle será feito por um
divisor de tensão associado a dois relés ativados distintamente a depender da entrada.
3) Duas entradas serão atribuídas para o comando de ir e voltar.
4) Duas saídas levarão aos relés para controla-los.
5) Duas saídas levarão aos terminais de entrada da ponte H para inversão da polaridade do motor.
Quando configuramos o microcontrolador através do PW desativamos a entrada Master Clear
(PIN_A5) assim podemos utilizar o pino como uma simples entrada de dados.
#include <motortrilho.h>// O nome do nosso projeto é “motortrilho”. Portanto, o compilador gerou uma
biblioteca de mesmo nome e a inseriu em nosso programa logo após finalizarmos a configuração do
microcontrolador através do PW.
int a, b, ir, voltar, v1, v2;//variaveis declaradas para execução do programa
void main()//inicio do programa
{
while (1)//início do infinite loop
{
ir=input(PIN_A0);//alocando a variável ‘ir’ ao valor na porta A0
voltar=input(PIN_A1);//alocando a variável ‘voltar’ ao valor na porta A1
a=input(PIN_A2);//alocando a variável ‘a’ ao valor na porta A2 – Chave de fim de curso 1
b=input(PIN_A3);//alocando a variável ‘b’ ao valor na porta A3 – Chave de fim de curso 2
v1=input(PIN_A4);//alocando a variável ‘v1 ao valor na porta A4 – maior velocidade′
v2=input(PIN_A5);//alocando a variável ‘v2 ao valor na porta A5 – menor velocidade′
if(v1==1)//Caso ativemos a velocidade 1 colocaremos na saída que levará ao relé de maior tensão o
nível lógico alto (high ou 1), logo esse será ativado enquanto que o outro relé estará desativado.
{
output_high(PIN_B5);//associando o nivel lógico high (1) à saída
output_low(PIN_B4);//associando o nivel lógico low (0) à saída
}
if(v2==1) // Nesse momento ocorre exatamente o inverso. Caso ativemos a velocidade 2 colocaremos
na saída que levará ao relé de menor tensão o nível lógico alto (high ou 1), logo esse será ativado
enquanto que o outro relé de maior tensão estará desativado.
{
output_low(PIN_B5); //associando o nivel lógico low (0) à saída
output_high(PIN_B4); //associando o nivel lógico high (1) à saída
}
if(v1==1 && v2==1)//condição para evitar sobrecarga e apenas as duas velocidades predefinidas.
Assim, caso as duas chaves sejam acionadas ao mesmo tempo, não haverá tensão sobre o motor. As
duas saídas apresentarão nível lógico baixo, logo os dois relés estarão desativados.
{
output_low(PIN_B5);
output_low(PIN_B4);
}
if(a==1) //Chave de fim de curso ativada. Ok, nosso motor atingiu o final do trilho e pressionou a chave
que lá se encontra marcando o final do caminho, impedimos assim que o motor continue seu percurso.
A chave de fim de curso nada mais é que um push button próprio para “choques mecânicos” e que
marca o final de um percurso. Com ela ativada cortaremos a tensão nas entradas da Ponte H, não
mais dos relés, e impedimos que haja uma tensão sobre os terminais do motor.
{
output_low(PIN_B6);
output_low(PIN_B7);
ir=0;//Essa chave será colocada no sentido do movimento “ir” do motor, assim enquanto a chave
estiver ativada será impossível mandar o motor seguir neste sentido
}
if(b==1) //Agora construímos a lógica para a chave de fim de curso do outro lado do trilho. Da mesma
forma que a primeira ela será ativada com o contato do motor. Nesse momento a chave enviará um
pulso ao microcontrolador para cortar a tensão sobre os terminais do motor e voltamos ao estado
“parado”.
{
output_low(PIN_B6);
output_low(PIN_B7);
voltar=0;//Essa chave será colocada no sentido do movimento “volta” do motor, assim enquanto a
chave estiver ativada será impossível mandar o motor seguir neste sentido
}
if(ir==1) //condição para o movimento do motor em um sentido
{
output_low(PIN_B6);
output_high(PIN_B7);
delay_ms(100); //Esse delay é uma forma de garantir que o motor possa sair da condição imposta pela
chave de fim de curso. Supondo que 100ms seja suficiente para que a chave volte para seu estado
normal. Assim quando a chave “b” estiver acionada podemos usar o botão “ir” para retirá-la da posição.
}
if(voltar==1)//condição para o movimento do motor em outro sentido
{
output_low(PIN_B7);
output_high(PIN_B6);
delay_ms(100);//Esse delay é uma forma de garantir que o motor possa sair da condição imposta pela
chave de fim de curso. Supondo que 100ms seja suficiente para que a chave volte para seu estado
normal. Assim quando a chave “a” estiver acionada podemos usar o botão “voltar” para retirá-la da
posição.
}
}
}//Fim do programa
Em uma próxima postagem trabalharemos com a construção dos circuitos onde esses
microcontroladores deverão ser implementados!

More Related Content

What's hot

6.05 _dimensionamento
6.05  _dimensionamento6.05  _dimensionamento
6.05 _dimensionamento
Wilson Heck
 
Nbr 14039 instalacoes eletricas de alta tensao (de 1,0 kv a 36,2 kv)
Nbr 14039   instalacoes eletricas de alta tensao (de 1,0 kv a 36,2 kv)Nbr 14039   instalacoes eletricas de alta tensao (de 1,0 kv a 36,2 kv)
Nbr 14039 instalacoes eletricas de alta tensao (de 1,0 kv a 36,2 kv)
mjmcreatore
 

What's hot (20)

Exercicios clp l1 respondido
Exercicios clp l1   respondidoExercicios clp l1   respondido
Exercicios clp l1 respondido
 
Condutores e cabos_elétricos2007
Condutores e cabos_elétricos2007Condutores e cabos_elétricos2007
Condutores e cabos_elétricos2007
 
Veja como hackear seu carro usando Rede CAN com Arduino Due
Veja como hackear seu carro usando Rede CAN com Arduino DueVeja como hackear seu carro usando Rede CAN com Arduino Due
Veja como hackear seu carro usando Rede CAN com Arduino Due
 
6.05 _dimensionamento
6.05  _dimensionamento6.05  _dimensionamento
6.05 _dimensionamento
 
Transistor bipolar de juncao (TBJ) 1
Transistor bipolar de juncao (TBJ)   1Transistor bipolar de juncao (TBJ)   1
Transistor bipolar de juncao (TBJ) 1
 
HC 05藍芽模組連線
HC 05藍芽模組連線HC 05藍芽模組連線
HC 05藍芽模組連線
 
Flip Flops Parte 4
Flip Flops Parte 4Flip Flops Parte 4
Flip Flops Parte 4
 
Nbr 14039 instalacoes eletricas de alta tensao (de 1,0 kv a 36,2 kv)
Nbr 14039   instalacoes eletricas de alta tensao (de 1,0 kv a 36,2 kv)Nbr 14039   instalacoes eletricas de alta tensao (de 1,0 kv a 36,2 kv)
Nbr 14039 instalacoes eletricas de alta tensao (de 1,0 kv a 36,2 kv)
 
Capacidade de condução de corrente de condutores em eletrodutos e diâmetro do...
Capacidade de condução de corrente de condutores em eletrodutos e diâmetro do...Capacidade de condução de corrente de condutores em eletrodutos e diâmetro do...
Capacidade de condução de corrente de condutores em eletrodutos e diâmetro do...
 
Máquina síncrona 3
Máquina síncrona 3Máquina síncrona 3
Máquina síncrona 3
 
Apostila pic-c16 f877
Apostila pic-c16 f877Apostila pic-c16 f877
Apostila pic-c16 f877
 
Apostila fluid sim pneumática 2011
Apostila fluid sim pneumática 2011Apostila fluid sim pneumática 2011
Apostila fluid sim pneumática 2011
 
Simbologia ELETRICA.doc
Simbologia ELETRICA.docSimbologia ELETRICA.doc
Simbologia ELETRICA.doc
 
Clp exercicio
Clp  exercicioClp  exercicio
Clp exercicio
 
Fet
FetFet
Fet
 
10 apostila microcontroladores
10  apostila microcontroladores10  apostila microcontroladores
10 apostila microcontroladores
 
Transformers
TransformersTransformers
Transformers
 
José maría nieves (grupo quark srl) “curso superior de electrónica idóneo e...
José maría nieves (grupo quark srl) “curso superior de electrónica   idóneo e...José maría nieves (grupo quark srl) “curso superior de electrónica   idóneo e...
José maría nieves (grupo quark srl) “curso superior de electrónica idóneo e...
 
Tabela condutores-cobre-awg-x-mm
Tabela condutores-cobre-awg-x-mmTabela condutores-cobre-awg-x-mm
Tabela condutores-cobre-awg-x-mm
 
Manual básico WinPic800
Manual básico WinPic800Manual básico WinPic800
Manual básico WinPic800
 

Viewers also liked (11)

O que é programar
O que é programarO que é programar
O que é programar
 
Autron
AutronAutron
Autron
 
Autron 2012
Autron 2012Autron 2012
Autron 2012
 
[Palestra] André Souza: Desafios da terminação a pasto - Produtividade x Qual...
[Palestra] André Souza: Desafios da terminação a pasto - Produtividade x Qual...[Palestra] André Souza: Desafios da terminação a pasto - Produtividade x Qual...
[Palestra] André Souza: Desafios da terminação a pasto - Produtividade x Qual...
 
Curso de Linguagem C
Curso de Linguagem CCurso de Linguagem C
Curso de Linguagem C
 
Palestra manejo de pastagens TecnoPasto
Palestra manejo de pastagens TecnoPastoPalestra manejo de pastagens TecnoPasto
Palestra manejo de pastagens TecnoPasto
 
Instalações e equipamentos bovino de corte pasto e confinamento
Instalações e equipamentos bovino de corte   pasto e confinamentoInstalações e equipamentos bovino de corte   pasto e confinamento
Instalações e equipamentos bovino de corte pasto e confinamento
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
 
Linguagens De ProgramaçãO Clp
Linguagens De ProgramaçãO ClpLinguagens De ProgramaçãO Clp
Linguagens De ProgramaçãO Clp
 
Exercicios resolvidos visuAlg
Exercicios resolvidos visuAlgExercicios resolvidos visuAlg
Exercicios resolvidos visuAlg
 
Aquicultura - Tilápia
Aquicultura - TilápiaAquicultura - Tilápia
Aquicultura - Tilápia
 

Similar to Programar pic em c motor passo

Relatório de Projeto - Desenvolvimento de um Controlador de Rotação para Moto...
Relatório de Projeto - Desenvolvimento de um Controlador de Rotação para Moto...Relatório de Projeto - Desenvolvimento de um Controlador de Rotação para Moto...
Relatório de Projeto - Desenvolvimento de um Controlador de Rotação para Moto...
Gustavo Fernandes
 
Pic apostila
Pic apostilaPic apostila
Pic apostila
moschen
 
Clp completa
Clp completaClp completa
Clp completa
panelada
 
Apostila de CLP / PLC
Apostila de CLP / PLCApostila de CLP / PLC
Apostila de CLP / PLC
Ricardo Akerman
 

Similar to Programar pic em c motor passo (20)

Relatório de Projeto - Desenvolvimento de um Controlador de Rotação para Moto...
Relatório de Projeto - Desenvolvimento de um Controlador de Rotação para Moto...Relatório de Projeto - Desenvolvimento de um Controlador de Rotação para Moto...
Relatório de Projeto - Desenvolvimento de um Controlador de Rotação para Moto...
 
Motor CC no Matlab
Motor CC no MatlabMotor CC no Matlab
Motor CC no Matlab
 
Estudo orientado de circuitos com motor dc programados em S4A
Estudo orientado de circuitos com motor dc programados em S4AEstudo orientado de circuitos com motor dc programados em S4A
Estudo orientado de circuitos com motor dc programados em S4A
 
CHAVES CODIFICAS E MÓDULOS INJEÇÃO ELETRÔNICA 8996 g6h66j6k6k5l55hj6g6f66s
CHAVES CODIFICAS E MÓDULOS INJEÇÃO ELETRÔNICA   8996 g6h66j6k6k5l55hj6g6f66sCHAVES CODIFICAS E MÓDULOS INJEÇÃO ELETRÔNICA   8996 g6h66j6k6k5l55hj6g6f66s
CHAVES CODIFICAS E MÓDULOS INJEÇÃO ELETRÔNICA 8996 g6h66j6k6k5l55hj6g6f66s
 
MÓDULOS INJEÇÃO ELETRÔNICA E CHAVES CODIFICADAS ...
MÓDULOS INJEÇÃO ELETRÔNICA  E CHAVES CODIFICADAS                             ...MÓDULOS INJEÇÃO ELETRÔNICA  E CHAVES CODIFICADAS                             ...
MÓDULOS INJEÇÃO ELETRÔNICA E CHAVES CODIFICADAS ...
 
GLOSSARIO AUTOMACAO INDUSTRIAL PORTUGUES MITSUBISHI ELECTRIC EMERSON EDUARDO ...
GLOSSARIO AUTOMACAO INDUSTRIAL PORTUGUES MITSUBISHI ELECTRIC EMERSON EDUARDO ...GLOSSARIO AUTOMACAO INDUSTRIAL PORTUGUES MITSUBISHI ELECTRIC EMERSON EDUARDO ...
GLOSSARIO AUTOMACAO INDUSTRIAL PORTUGUES MITSUBISHI ELECTRIC EMERSON EDUARDO ...
 
Simulacao analise e_controle_de_motor_de_corrente_
Simulacao analise e_controle_de_motor_de_corrente_Simulacao analise e_controle_de_motor_de_corrente_
Simulacao analise e_controle_de_motor_de_corrente_
 
ATmega Prática
ATmega PráticaATmega Prática
ATmega Prática
 
Workshop iniciação à robótica - Farrusco
Workshop iniciação à robótica - FarruscoWorkshop iniciação à robótica - Farrusco
Workshop iniciação à robótica - Farrusco
 
Pic apostila
Pic apostilaPic apostila
Pic apostila
 
Clp completa
Clp completaClp completa
Clp completa
 
Curso microcontroladores pic no mp lab 8
Curso microcontroladores pic no mp lab 8Curso microcontroladores pic no mp lab 8
Curso microcontroladores pic no mp lab 8
 
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
 
Microcontroladores pic ling c unicamp
Microcontroladores pic ling c unicampMicrocontroladores pic ling c unicamp
Microcontroladores pic ling c unicamp
 
Apostila de plc gladimir
Apostila de plc gladimirApostila de plc gladimir
Apostila de plc gladimir
 
Apostila clp cefet rs
Apostila clp   cefet rsApostila clp   cefet rs
Apostila clp cefet rs
 
Microcontroladores PIC.pptx
Microcontroladores PIC.pptxMicrocontroladores PIC.pptx
Microcontroladores PIC.pptx
 
Controle de servomotores para o avatar robótico
Controle de servomotores para o avatar robóticoControle de servomotores para o avatar robótico
Controle de servomotores para o avatar robótico
 
Clp
ClpClp
Clp
 
Apostila de CLP / PLC
Apostila de CLP / PLCApostila de CLP / PLC
Apostila de CLP / PLC
 

Programar pic em c motor passo

  • 1. Tutorial Motores – Parte 1: Lógica de programação para motores elétricos Ao iniciarmos qualquer projeto é necessário, primeiramente, saber qual o tipo de motor a ser utilizado. Logo em seguida é preciso saber algumas especificações do mesmo tal como tensão e corrente máxima e, caso seja um motor de passo, o ângulo de giro por passo, se trabalhamos com um motor de ímã permanente, relutância variável ou híbrido e, se possível, a sequência dos cabos para manter o giro do motor. Uma boa referência para estudo dos motores elétricos é o livro “Motores Eléctricos – António Francisco”. Para ilustrar programação aplicada a motores elétricos, serão apresentados dois projetos: um com um motor de passo, e outro com um motor dc. Os motores utilizados têm características especificas como será apresentado. Por isso, se você for aplicar o que está nesse tutorial na prática, confira as especificações de seu motor e ajuste o que for necessário. Nos projetos que se seguem utilizaremos Linguagem C e PICs como nossas unidades de processamento de dados. Assim sendo, é importante também que conheçamos as especificações do microcontrolador, essas podem ser facilmente encontradas em seus datasheets disponíveis na internet. Os circuitos de controle para implementação dos microcontroladores serão tema de uma próxima postagem! PROJETO 1 Precisamos que um motor gire um determinado eixo de uma máquina em 36°, no sentido horário, sempre que o controlador aperte um botão no painel. Para tal utilizaremos um motor de passo híbrido de 1,8°/passo. O motor conta com oito cabos de cores diferentes (Amarelo, Vermelho, Branco, Laranja, Preto, Azul, Verde e Marrom). Ao estudarmos as especificações do motor, soubemos que os cabos Amarelo, Branco, Azul e Verde estão sempre conectados ao terminal de menor potencial de nossa fonte. Portanto devemos nos preocupar em criar uma lógica de programação para energizar apenas os cabos Preto, Laranja, Vermelho e Marrom. Ainda estudando o datasheet do motor vemos que para manter um movimento do motor no sentido horário devemos energizar os cabos na seguinte ordem: Vermelho, Laranja, Preto, Marrom (e reiniciarmos o ciclo). E para um movimento no sentido anti-horário basta que os energizemos na ordem inversa: Marrom, Preto, laranja, Vermelho. Podemos tratar dessa ordem de cores agora como uma palavra binária de quatro bits sendo o cabo vermelho o LSB e o cabo marrom o MSB, assim, na saída do microcontrolador poderemos usar o equivalente binário para a sequência numérica: 1, 2, 4, 8. Agora, em posse desses dados sobre o motor, construiremos a nossa lógica. O programa utilizado foi o PIC C COMPILER. A vantagem desse programa é que podemos utilizar a função Project Wizard (PW) e através dessa interface configurar o PIC da forma que quisermos (inserindo quais serão os terminais de entrada e saída de dados, freqüência de trabalho do PIC, se queremos o Master Clear ativado ou não, etc.) sem precisar gastar várias linhas de programação o fazendo manualmente. Utilizaremos aqui o PIC 16F628a. Desenvolvimentodoprojeto: Parte 1- Programa Lógico: Quando utilizamos o recurso do PW o programa gera para o programador uma biblioteca já com as
  • 2. especificações do projeto. Essa biblioteca terá o mesmo nome do projeto e será automaticamente inserida na página de programação, como pode ser visto na figura 2. Uma boa ideia é separar sempre uma pasta para cada projeto, pois cada programa gera uma série de auxiliares de mesmo nome, porém com extensões diferentes, com o tempo e acumulo de programas pode se tornar uma grande bagunça. Caso o programador queira ele pode também incluir outras bibliotecas para o programa, mas para esse nosso caso não se faz necessário. Segue então a nossa lógica: – O que se segue em vermelho foi gerado pelo programa ao finalizarmos a configuração do microcontrolador no PW. – O que se segue após o “//” até a quebra de linha (parágrafo) são comentários e não afetam na lógica do programa. – É válido lembrar que quando dizemos que na saída do controlador sairá um número inteiro, ex.: 7, o mesmo fará a conversão para binário, logo na saída teríamos: 111. #include <motor4.h>// O nome do nosso projeto é “motor4”. Portanto, o compilador gerou uma biblioteca de mesmo nome e a inseriu em nosso programa logo após finalizarmos a configuração do microcontrolador através do PW. int s, k, botao; //variaveis inteiras (int) declaradas para execução do programa void main()//inicio do programa { s=1;//condição inicial da variável s (Saída para os cabos do motor) while (1){//início do infinite loop – Forma utilizada para que o programa nunca chegue ao fim já que 1=1 a todo momento. botao=input(PIN_A0); //Com esse comando a variável botao sempre assumirá o valor lógico da porta A0 if(botao){ //[ou “if(botão==1)”]condição para iniciar o movimento de 36° for(k=1;k<=21;k++){ // número k de passos para o movimento de 36° – Como cada passo tem 1,8°, são necessários 20 passos para completar os 36° – Aqui fizemos um contador de passos do motor. if(s>=16){ s=1; } //A lógica para o movimento no sentido horário é 1, 2, 4, 8 – Podemos facilmente perceber a progressão com o multiplicador 2. Entretanto, ao atingir o ultimo fio, queremos que o motor reinicie o ciclo para manter o movimento. Assim, o número seguinte da progressão seria 16, mas com esse regulador fazemos com que o ciclo seja retomado. output_B(s);// Aqui determinamos que nas portas da família B (B0-B7)saia o valor de s (em binário) s=s*2;//Aqui está a nossa progressão dos valores da saída em B. Ao atingir essa linha, a nossa variável s assumirá um valor duas vezes maior que o anterior. delay_ms(100);// Aqui determinamos uma pausa em milissegundos (100 ms) para que o programa reinicie o loop. Esse delay varia de motor para motor, pois alguns motores foram projetados para ter menos velocidade que outros. É importante que se faça uma pesquisa do limite de velocidade do motor para não comprometer o equipamento. Caso o motor comece a esquentar ou perca o passo, significa que você excedeu o limite do mesmo. Essa velocidade é controlada pelo programador, supondo que nosso motor suporte eu poderia ter escrito: “delay_ms(30);”. } } } }//Fim do Programa
  • 3. Figura 1: Criando um novo projeto (Project Wizard) Figura 2: Tela de programação após configuração do microcontrolador com a função Project Wizard PROJETO 2 Precisamos de um motor que faça um movimento horizontal em um trilho. Esse motor deve ir numa direção ou outra do trilho sempre que exigido, obedecendo o final do percurso. O sistema deve permitir que o motor assuma duas velocidades diferentes. Nota: O motor a ser utilizado é um motor DC de 12V. Assim como utilizamos o PIC e a programação em C para criar um sistema de controle pra um motor de passo, podemos fazer o mesmo para o controle de um motor de corrente contínua (DC).
  • 4. O motor DC é muito mais simples que um motor de passo. Só possui dois cabos e pode girar num sentido ou em outro a depender de qual cabo estará no terminal positivo da fonte. Entretanto o problema nos exige que seja oferecida uma mudança dinâmica do estado do motor. Para isso utilizaremos um circuito conhecido como ponte H. Esse circuito cuidará para que a polaridade do motor seja alterada sempre que o controlador exija. Uma segunda condição do problema é o controle de velocidade. Diferente do motor de passo que o controle de velocidade tem que ser feito durante a programação, o motor DC possui sua velocidade alterada pela ddp aplicada em seus terminais. Assim podemos construir um circuito auxiliar contanto com relés de forma que cada um forneça uma tensão diferente para a alimentação do motor. Vamos inserir também um comando no controlador para evitar que as duas chaves sejam abertas simultaneamente. Utilizaremos nesse projeto um componente chamado chave de fim de curso. Esta será utilizada para evitar que por algum erro do controlador o motor tente extrapolar o final do trilho. Assim como no controle do motor de passo utilizaremos o PIC C COMPILER e o Project Wizard para esse novo projeto. Parte1-ProgramaLógico: Teremos nesse circuito então seis entradas de dados e quatro saídas. As entradas e saídas cumprirão os papéis: 1) Duas entradas serão as chaves de fim de curso para parar o motor sempre que ativadas e evitar que o motor saia do trilho. 2) Duas entradas serão atribuídas para o controle de velocidade. Esse controle será feito por um divisor de tensão associado a dois relés ativados distintamente a depender da entrada. 3) Duas entradas serão atribuídas para o comando de ir e voltar. 4) Duas saídas levarão aos relés para controla-los. 5) Duas saídas levarão aos terminais de entrada da ponte H para inversão da polaridade do motor. Quando configuramos o microcontrolador através do PW desativamos a entrada Master Clear (PIN_A5) assim podemos utilizar o pino como uma simples entrada de dados. #include <motortrilho.h>// O nome do nosso projeto é “motortrilho”. Portanto, o compilador gerou uma biblioteca de mesmo nome e a inseriu em nosso programa logo após finalizarmos a configuração do microcontrolador através do PW. int a, b, ir, voltar, v1, v2;//variaveis declaradas para execução do programa void main()//inicio do programa { while (1)//início do infinite loop { ir=input(PIN_A0);//alocando a variável ‘ir’ ao valor na porta A0 voltar=input(PIN_A1);//alocando a variável ‘voltar’ ao valor na porta A1 a=input(PIN_A2);//alocando a variável ‘a’ ao valor na porta A2 – Chave de fim de curso 1 b=input(PIN_A3);//alocando a variável ‘b’ ao valor na porta A3 – Chave de fim de curso 2 v1=input(PIN_A4);//alocando a variável ‘v1 ao valor na porta A4 – maior velocidade′ v2=input(PIN_A5);//alocando a variável ‘v2 ao valor na porta A5 – menor velocidade′ if(v1==1)//Caso ativemos a velocidade 1 colocaremos na saída que levará ao relé de maior tensão o nível lógico alto (high ou 1), logo esse será ativado enquanto que o outro relé estará desativado. { output_high(PIN_B5);//associando o nivel lógico high (1) à saída output_low(PIN_B4);//associando o nivel lógico low (0) à saída } if(v2==1) // Nesse momento ocorre exatamente o inverso. Caso ativemos a velocidade 2 colocaremos
  • 5. na saída que levará ao relé de menor tensão o nível lógico alto (high ou 1), logo esse será ativado enquanto que o outro relé de maior tensão estará desativado. { output_low(PIN_B5); //associando o nivel lógico low (0) à saída output_high(PIN_B4); //associando o nivel lógico high (1) à saída } if(v1==1 && v2==1)//condição para evitar sobrecarga e apenas as duas velocidades predefinidas. Assim, caso as duas chaves sejam acionadas ao mesmo tempo, não haverá tensão sobre o motor. As duas saídas apresentarão nível lógico baixo, logo os dois relés estarão desativados. { output_low(PIN_B5); output_low(PIN_B4); } if(a==1) //Chave de fim de curso ativada. Ok, nosso motor atingiu o final do trilho e pressionou a chave que lá se encontra marcando o final do caminho, impedimos assim que o motor continue seu percurso. A chave de fim de curso nada mais é que um push button próprio para “choques mecânicos” e que marca o final de um percurso. Com ela ativada cortaremos a tensão nas entradas da Ponte H, não mais dos relés, e impedimos que haja uma tensão sobre os terminais do motor. { output_low(PIN_B6); output_low(PIN_B7); ir=0;//Essa chave será colocada no sentido do movimento “ir” do motor, assim enquanto a chave estiver ativada será impossível mandar o motor seguir neste sentido } if(b==1) //Agora construímos a lógica para a chave de fim de curso do outro lado do trilho. Da mesma forma que a primeira ela será ativada com o contato do motor. Nesse momento a chave enviará um pulso ao microcontrolador para cortar a tensão sobre os terminais do motor e voltamos ao estado “parado”. { output_low(PIN_B6); output_low(PIN_B7); voltar=0;//Essa chave será colocada no sentido do movimento “volta” do motor, assim enquanto a chave estiver ativada será impossível mandar o motor seguir neste sentido } if(ir==1) //condição para o movimento do motor em um sentido { output_low(PIN_B6); output_high(PIN_B7); delay_ms(100); //Esse delay é uma forma de garantir que o motor possa sair da condição imposta pela chave de fim de curso. Supondo que 100ms seja suficiente para que a chave volte para seu estado normal. Assim quando a chave “b” estiver acionada podemos usar o botão “ir” para retirá-la da posição. } if(voltar==1)//condição para o movimento do motor em outro sentido { output_low(PIN_B7); output_high(PIN_B6); delay_ms(100);//Esse delay é uma forma de garantir que o motor possa sair da condição imposta pela chave de fim de curso. Supondo que 100ms seja suficiente para que a chave volte para seu estado normal. Assim quando a chave “a” estiver acionada podemos usar o botão “voltar” para retirá-la da posição. } } }//Fim do programa Em uma próxima postagem trabalharemos com a construção dos circuitos onde esses microcontroladores deverão ser implementados!