SlideShare uma empresa Scribd logo
2
Mais lidos
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!

Mais conteúdo relacionado

PDF
150 Circuitos Electronicos
PDF
ELECTRÓNICA ANALÓGICA .Componentes electrónicos
PDF
Original NPN Transistor LBC817 BC817 6C SMD Code 500mA 45V SOT23
DOCX
Circuito variador de velocidad de motor ac
PPT
Botões de comando
PDF
4.2 transformador trifasico en poste
PPT
El Diodo Semiconductor
PPT
Como hacer un reostato
150 Circuitos Electronicos
ELECTRÓNICA ANALÓGICA .Componentes electrónicos
Original NPN Transistor LBC817 BC817 6C SMD Code 500mA 45V SOT23
Circuito variador de velocidad de motor ac
Botões de comando
4.2 transformador trifasico en poste
El Diodo Semiconductor
Como hacer un reostato

Mais procurados (20)

PDF
Practicas de laboratorio en scilab y matlab
PDF
EDUARDO CAHUAZA CISNEROS_(8).pdf
PDF
9.1 pres
PDF
13258786 tipos-y-especificaciones-de-rodamientos
PDF
Edb m enf_mod-full-dc-inverter-es
PDF
Tecnicas Predictivas- Análisis de aceites dielectricos e interpretación de re...
PDF
BOMBAS ALTERNADAS CON TANQUE HIDRONEUMATICO (2).pdf
PPT
PPTX
Montaje de un capacimetro digital
PDF
Cash Componentes - iluminação
PDF
2 evidencia aa2 presentacion_aplicando_las_leyes
DOCX
TAREA 01.docx
PDF
[E-BOOK 3] - Comandos Elétricos 3.pdf
PDF
Pspice fuentes dependientes
PDF
Practica 3 electronica 1 convertidoeeeeeee
PDF
Instructivo de instalación concertinas
DOC
Solucionario electrotecnia
PDF
Eletrônica de Potência 2020 - Cefet-MG
PPTX
Teoría Básica de Diodos
DOCX
Dimensionamiento del circuito en arranque directo
Practicas de laboratorio en scilab y matlab
EDUARDO CAHUAZA CISNEROS_(8).pdf
9.1 pres
13258786 tipos-y-especificaciones-de-rodamientos
Edb m enf_mod-full-dc-inverter-es
Tecnicas Predictivas- Análisis de aceites dielectricos e interpretación de re...
BOMBAS ALTERNADAS CON TANQUE HIDRONEUMATICO (2).pdf
Montaje de un capacimetro digital
Cash Componentes - iluminação
2 evidencia aa2 presentacion_aplicando_las_leyes
TAREA 01.docx
[E-BOOK 3] - Comandos Elétricos 3.pdf
Pspice fuentes dependientes
Practica 3 electronica 1 convertidoeeeeeee
Instructivo de instalación concertinas
Solucionario electrotecnia
Eletrônica de Potência 2020 - Cefet-MG
Teoría Básica de Diodos
Dimensionamiento del circuito en arranque directo
Anúncio

Destaque (11)

PPT
O que é programar
PDF
Autron
PDF
Autron 2012
PDF
[Palestra] André Souza: Desafios da terminação a pasto - Produtividade x Qual...
PPT
Curso de Linguagem C
PPT
Palestra manejo de pastagens TecnoPasto
PPTX
Instalações e equipamentos bovino de corte pasto e confinamento
PPT
Introdução a Linguagem C
PPT
Linguagens De ProgramaçãO Clp
TXT
Exercicios resolvidos visuAlg
PDF
Aquicultura - Tilápia
O que é programar
Autron
Autron 2012
[Palestra] André Souza: Desafios da terminação a pasto - Produtividade x Qual...
Curso de Linguagem C
Palestra manejo de pastagens TecnoPasto
Instalações e equipamentos bovino de corte pasto e confinamento
Introdução a Linguagem C
Linguagens De ProgramaçãO Clp
Exercicios resolvidos visuAlg
Aquicultura - Tilápia
Anúncio

Semelhante a Programar pic em c motor passo (20)

PDF
Curso microcontroladores pic no mp lab 8
PPTX
Desafio de Robótica - Católica de Santa Catarina - Joinville
PPTX
Prova de aptidão tecnológica
PPT
V2 - Microcontroladores: a revolucao do arduino
PDF
38698469 slides-arduino
PDF
Introdução ao Arduino
PDF
Apostila - Tutorial Arduino (Básico).PDF
PDF
Mini curso Arduíno
PPT
Programação básica de microcontroladores
PDF
PDF
Estudo orientado de circuitos com motor dc programados em S4A
PDF
Manual de programação introdutória
PDF
Mini curso arduino
PDF
Corpo relatorio
PDF
Monografia Arduino
PDF
Tcc carlos felipe de paiva perché
PPT
Arduino Hack Day por Vinicius Senger
PPTX
Controlo de motor de passo com Snap4Arduino
PPT
microcontroladores6_8.pptsadsadsadasdasdasdasssad
PDF
Pic slides
Curso microcontroladores pic no mp lab 8
Desafio de Robótica - Católica de Santa Catarina - Joinville
Prova de aptidão tecnológica
V2 - Microcontroladores: a revolucao do arduino
38698469 slides-arduino
Introdução ao Arduino
Apostila - Tutorial Arduino (Básico).PDF
Mini curso Arduíno
Programação básica de microcontroladores
Estudo orientado de circuitos com motor dc programados em S4A
Manual de programação introdutória
Mini curso arduino
Corpo relatorio
Monografia Arduino
Tcc carlos felipe de paiva perché
Arduino Hack Day por Vinicius Senger
Controlo de motor de passo com Snap4Arduino
microcontroladores6_8.pptsadsadsadasdasdasdasssad
Pic slides

Último (20)

PPTX
Caminho das Bromélias _Nível Obra - Governança em SSMA_03.2024.pptx
PPT
Ergonomia Aula 01 conceitos básicos segurança
PDF
Normas, higiene e segurança na soldadura eléctrica
PPT
22a Aula Manejo de Plantas Daninhas(1).ppt
PDF
Material referente ao método kanban f2ms
PPTX
1 Conceitos-de-Gestao-da-Qualidaade.pptx
PDF
1 - Fundamentos Básicos da Transferência de Calor.pdf
PPTX
Física I - 01 e 02 - Introdução ao método Científico.pptx
PDF
Aula 01 INT. EnnnnnnnnnnnnnnENF.pdf 2.pdf
PPTX
Func-equip-moagem-espe-prensa_PPT_003.pptx
PDF
Maqinas1(ENCANAMENTOS E ACESSORIOS)2.pdf
PPTX
Portuguese_Portfolio_May_2024.pptx_redes
PDF
DETECCAO DE ALARME DE INCENSDIO E PANICO
PDF
Ia no concreto - tecnicas de aprendizagem de máquina
PDF
Análise do concreto permeável com adição de resíduos
PPT
DIFERENTES TIPOS DE SOLO NA AGRICULTURA.
PDF
Material referente a introdução a instr.
PPT
1 - Introdução a disciplina ciencia o solo.ppt
PPTX
Treinamento em powerpoint para integração de colaboradores em fábrica de pequ...
PDF
Artigo sobre industria de petroleo em pdf
Caminho das Bromélias _Nível Obra - Governança em SSMA_03.2024.pptx
Ergonomia Aula 01 conceitos básicos segurança
Normas, higiene e segurança na soldadura eléctrica
22a Aula Manejo de Plantas Daninhas(1).ppt
Material referente ao método kanban f2ms
1 Conceitos-de-Gestao-da-Qualidaade.pptx
1 - Fundamentos Básicos da Transferência de Calor.pdf
Física I - 01 e 02 - Introdução ao método Científico.pptx
Aula 01 INT. EnnnnnnnnnnnnnnENF.pdf 2.pdf
Func-equip-moagem-espe-prensa_PPT_003.pptx
Maqinas1(ENCANAMENTOS E ACESSORIOS)2.pdf
Portuguese_Portfolio_May_2024.pptx_redes
DETECCAO DE ALARME DE INCENSDIO E PANICO
Ia no concreto - tecnicas de aprendizagem de máquina
Análise do concreto permeável com adição de resíduos
DIFERENTES TIPOS DE SOLO NA AGRICULTURA.
Material referente a introdução a instr.
1 - Introdução a disciplina ciencia o solo.ppt
Treinamento em powerpoint para integração de colaboradores em fábrica de pequ...
Artigo sobre industria de petroleo em pdf

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!