quinta-feira, 29 de setembro de 2016

Motor de Passo - Explicação

Fontes de consulta:

           PARA OS LINKS ABAIXO LER SOMENTE QUANDO TIVER TEMPO DISPONÍVEL

Vídeos explicativos
Como funcionam os motores de passo


Identificando cabos motor de passo


Acionamento de carga AC

Elaborar um programa em linguagem C para o PIC18F4550 para acionamento de uma carga.

O hardware deverá conter:

  • Um botão para acionamento do microcontrolador
  • Uma saída para o acionamento de carga
  • Etapa de acionamento com acoplamento ótico
  • Indicação de “status” no LCD 16 x 2
Hardware em funcionamento com botão solto

Hardware em funcionamento com botão pressionado



   

1. Acionamento de carga AC por meio de relé



Substituir ou ligar em paralelo ao conjunto resistor/led ligado a B7, o hardware proposto  pelo circuito abaixo:




Simulador de carga


Com o objetivo de simplificar e diminuir riscos com as ligações em AC, foi montado um simulador de carga com 4 cargas em 220Vac:


  • Lâmpada - carga resistiva
  • Campainha - carga indutiva de alta impedância
  • Contatora com bobina de 220Vac - carga indutiva de baixa impedância
  • Transformador 220Vac\24Vac que aciona uma contatora com bobina de 24Vac - cara indutiva de baixa impedãncia




Conexão ao simulador de carga




  • Conectar o contato C (Comum) do relé ao conector AC-MT1 
  • Conectar o contato NA (Normalmente Aberto) do relé ao conector "MT2-Carga". 
  • Escolher a carga (sentido de numeração da direita para a esquerda


    • 1 - Lâmpada
    • 2 - Campainha
    • 3 - Contatora
    • 4 - Transformador





   

2. Acionamento de carga AC por meio de triac


Substituir ou ligar em paralelo ao conjunto resistor/led ligado a B7, o hardware proposto  pelo circuito abaixo:





Conexão ao simulador de carga



  • Conectar o contato MT1 do traic ao conector AC-MT1 
  • Conectar o contato MT2 do triac ao conector "MT2-Carga". 
  • Escolher a carga (sentido de numeração da direita para a esquerda
    • 1 - Lâmpada
    • 2 - Campainha
    • 3 - Contatora
    • 4 - Transformador



Não esqueça de incluir um circuito “snubber” (100Ω/5W em série com 100nF/600V) ligado em paralelo a carga para situação de carga com baixa impedância.









   

Acionamento de carga DC



1. Acionamento de carga por transistor Bipolar

Utilize como base o programa da atividade menu com controle de tempos.




Modificações a serem implementadas:


  • Altere o programa para termos como opções de tempo:
    • 250ms
    • 500ms
    • 750ms
    • 1s
  • Substitua o led por um buzzer de 12V. 




Mostrar no LCD:

  • No programa (buzzer acionado):
    • 1ª linha do LCD: Tempo selecionado
    • 2ª linha do LCD: Opção para entrar no menu
  • No menu (trocar o tempo, buzzer desligado):
    • 1ª linha do LCD: O tempo selecionado
    • 2ª linha do LCD: As funções dos botões


   

2. Acionamento de carga por transistor mosfet

Substitua o transistor da atividade anterior por um transistor MOSFET (IRFxxx por exemplo) 




   

Explicação: Transistores bipolares, mosfet, triac e acionamentos


Transistores bipolares

Explicações


Vídeos



   

Transistores mosfet

Explicações


Vídeos




   

TRIAC






   

Circuitos e informações




   


sexta-feira, 9 de setembro de 2016

Montagens em hardware


Utilizar a o hardware básico com auxílio de uma protoboard para elaborar os projetos já desenvolvidos

1. Status do botão e led no LCD

Implementar em hardware um led controlado por um botão com status no LCD




  





2. Semáforo do cruzamento com informações no LCD

Implementar em hardware 3 semáforos para indicar os 3 tempos com as informações no display de LCD




  


3. Display de 7 segmentos

As chaves podem usados "push buttons" ou "fios jumpers" que simulem chaves liga-desliga.

Para o funcionamento deste projeto (Display de 7 segmentos) implementação siga as modificações listadas abaixo para o programa funcionar no hardware básico


Hardware:
Desconecte os pinos B4, B5, B6 e B7 do GND


Software:
Coloque os pinos  B4, B5, B6 e B7 como saída e "zere" o seu conteúdo.

  • Onde tinha:
    • TRISB = 0b11111111;
  • Substitua por 
    • TRISB = 0b00001111;
    • LATB = 0;




  


4. Contador binário com LCD


Mostrar no LCD os formatos decimal, hexadecimal e binário




  

5. Controle de tempo com menu


Montar o hardware para funcionamento





  

Teclados - Atividade 5


Teclado matricial com 16 teclas por conversor A/D e interrupção


Abaixo o hardware para a montagem do teclado com 16 teclas.




1. Carregue o programa da Atividade 2 do teclado (conversor A/D com Vref+ e Vref- que mostra o valor convertido).

2. Monte o hardware acima

3. Ajuste  Vref+ e Vref-. 

  • Procure a tecla com o maior valor convertido. Ajuste Vref+ de forma que o valor fique um pouco abaixo de 1023.
  • Procure a tecla com o menor valor convertido. Ajuste Vref- de forma que o valor fique um pouco acima de 0.
  • Repita o processo, pois o ajuste de Vref- pode influir no ajuste de Vref+ e vice versa.


4. Pressione cada tecla e anote os valores convertidos mínimo e máximo.

5. Criar a nova tabela de ranges (explicado na Atividade 3). 
          Planilha para cálculo dos ranges com 16 teclas

6. Utilize como base o programa da atividade 04 e faça a identificação de cada tecla por interrupção.



   
Descrição da pinagem do teclado de membrana








   




   

Teclados - Atividade 4


Identificando teclas por ranges com o teclado por A/D com interrupção.






1. Carregue o programa da Atividade 2 do teclado (conversor A/D com Vref+ e Vref- que mostra o valor convertido).

2. Monte o hardware acima

3. Ajuste  Vref+ e Vref-. 

  • Procure a tecla com o maior valor convertido. Ajuste Vref+ de forma que o valor fique um pouco abaixo de 1023.
  • Procure a tecla com o menor valor convertido. Ajuste Vref- de forma que o valor fique um pouco acima de 0.
  • Repita o processo, pois o ajuste de Vref- pode influir no ajuste de Vref+ e vice versa.


4. Pressione cada tecla e anote os valores convertidos mínimo e máximo.

5. Criar a nova tabela de ranges (explicado na Atividade 3).

5. Utilize o programa da Atividade 03 como base para criar a Atividade 4:


  • Realize as configurações gerais para interrupção (função config_int()).
  • Configure a Interrupção externa 0 (função config_int0()).
  • Mova o conteúdo do looping infinito (while(1)) para a função de interrupção. O while(1) fica “vazio” sem nenhum comando.
  • Ajuste os ranges para identificação de cada tecla de acordo com a nova tabela (item 2 acima)

6. Teste o programa no simulador. Lembre que os valores de hardware são diferentes de simulação, onde os componentes possuem características ideias. 

7. Apresente o programa com o hardware.


   




Teclados - Atividade 3



Identificando teclas por faixa de valores do A/D


Com base no programa desenvolvido em “Teclados – Atividade 2” (Inserção de tensões de referências no conversor A/D), implemente o software para identificar as teclas e mostrar no LCD.







   

Dicas de implementação


I - Dividindo a faixa de valores do conversor

1. Supondo que foi obtido os valores mínimos e máximos (exemplo hipotético) para cada tecla na Atividade 2:

  • Tecla 1: 800 - 850
  • Tecla 2: 400 - 430
  • Tecla 3: 230 - 270
  • Tecla 4: 50 - 58

2. Posicione os valores em uma reta considerando o menor e maior valores possíveis do conversor A/D (0 e 1023)



3. Calcule a distância entre o menor valor da Tecla 3 (230) e o maior valor da Tecla 4 (58)



4. Divida o espaço encontrado (172) em 2 partes iguais (86)


 5. Encontre o ponto médio entre a Tecla 4 e a Tecla 3 (144)



 6. Repita o processo para encontrar os pontos médios entre a Tecla 3 e Tecla 2, e o ponto médio entre a Tecla 2 e a Tecla 1



7. Arbitre valores entre 0 e o menor valor a Tecla 4 (15), e entre o maior valor da Tecla 1 e 1023 (1000), de forma que esses valores não atinjam o mínimo (0) e o máximo (1023)






   


II - Identificando as teclas

Com base nos valores inicias e finais de cada faixa, implemente testes (if) que testem se o valor está dentro de cada faixa e indique no LCD qual foi a tecla pressionada.
  • if (valor_convertido > 15 && valor_convertido<144) “imprime_no_lcd (“Tecla 4”);
  • if (valor_convertido > 144 && valor_convertido<335) “imprime_no_lcd(“Tecla 3”);
  • if (valor_convertido > 335 && valor_convertido<615) “imprime_no_lcd(“Tecla 2”);
  • if (valor_convertido > 615 && valor_convertido<1000) “imprime_no_lcd(“Tecla 1”);


   




Teclados - Atividade 2


Inserção de tensões de referências no conversor A/D


Utilizando o menor valor de tensão obtido em “Teclados - Atividade 1” calibre uma tensão referência negativa (-Vref) “um pouco abaixo” do menor valor de tensão obtido.

Utilizando o maior valor de tensão obtido em “Teclados - Atividade 1” calibre uma tensão referência positiva (+Vref) “um pouco acima” do maior valor de tensão obtido.




Dicas de implementação

1. Na configuração do conversor A/D, no registrador ADCON1, defina –Vref e +Vref como sinais externos

  • Bit 5: VCFG1: seleção da –Vref
    • 1: -Vref = AN2
    • 0: -Vref = VSS
  • Bit 4: VCFG2: seleção da +Vref
    • 1: +Vref = AN3
    • 0: +Vref = VDD



2. Defina os pinos AN2 e AN3 como entradas além de AN0 no registrador TRIS na função main().


   


Atividade para entregar - mostrar



Preencha a tabela abaixo baseado nos dados do obtidos no hardware físico.



Descreva o que aconteceu mudou em relação a atividade anterior (Teclados - Atividade 1)



   

Teclados - Atividade 1



Identificando valores de conversão para cada tecla (divisor de tensão)


               Utilizando o programa “Tec_atv01.c” (listado no fim deste post) monte compile um projeto no MPLAB X IDE.




1. Elabore o hardware no simulador.

2. Preencha a tabela abaixo baseado nos dados obtidos do simulador.



3. Elabore o hardware físico.


4. Preencha a tabela abaixo baseado nos dados do obtidos no hardware físico.



5. Compare os valores obtidos no simulador e no hardware físico e explique por que as diferenças.

6. Explique o que deveria ser feito no programa para:

  • Baixar o menor valor
  • Elevar o maior valor

7. Se fossem executadas as mudanças do item 6, o que aconteceria com a faixa entre os valores? Por que? 


Entregue (mostre) escrita as questões 2, 4, 5, 6 e 7.


   


/*
 * File:   Tec_atv01.c
 * Author: Pilger
 *
 * Created on 16 de Setembro de 2017, 09:26
 * Teclado - Atividade 01
 * Entendimento inicial do circuito divisor de tensão no conversor A/D
 * 
 * Utiliza a entrada AN0 como sinal de entrada e converte um sinal entre 0 e 5V
 * Apresenta o resultdo convertido (0 a 1023) na linha 1 do LCD
 *
 */

#define _XTAL_FREQ 48000000

#include <stdio.h>
#include <xc.h>
#include "C:\h\Config_PIC18F4550.h"
#include "c:\h\biblioteca_lcd_2x162_48M_XC.h"

// protótipos de funções
void config_AD(void);
int conv_AD(void);
void delay_ms(int i);

void main(void) {
    // variáveis locais
    int valor_convertido;
    unsigned char buffer[16];
    float tensao;
    // define os pinos de IO
    TRISA = 0b00000001;
    TRISB = 0x00;
    TRISC = 0x00;
    TRISD = 0x00;
    TRISE = 0x00;
    config_AD(); // configura e inicializa o conversor AD
    lcd_inicia(0x28, 0x0f, 0x06); // incializa o LCD com 4 linhas
    lcd_LD_cursor(0); // Desliga o cursor
    lcd_posicao(1, 1);
    imprime_string_lcd("Teclado A/D");

    while (1) {
        valor_convertido = conv_AD();
        // mostra no lcd o valor convertido (0-1023)
        lcd_posicao(2, 1);
        sprintf(buffer, "Conversao= %04d ", valor_convertido);
        imprime_buffer_lcd(buffer, 16);
        delay_ms(1000); // atraso de 1s
    }
}


// função de configuração do conversor A/D
void config_AD (void) {
ADCON0 = 0b00000001; /* canal AN0 selecionado <5:2> 0000
                             * Flag GO - /DONE desligado <1> 0
                             * Módulo conversor ligado <0> 1 */
ADCON1 = 0b00001110; /*  Vref- = VSS <5> 0
                             *  Vref+ = VDD <4> 0
                             * pino RA0/AN0 analógico e demais digitais <3:0> 1110 */
ADCON2 = 0b10110110; /* Resultado justificado a direita <7> 1
                             * Tempo de Aquisição de 16 TDA <5:3> 110 
                             * mínimo recomendado p/ automático = 4TDA
                             * TDA = 1,33us <2:0> 110
                             * 48MHz/64 = 750kHz = 1,33us */
}

// função que efetua uma conversão A/D e retorna um inteiro com o valor convertido
int conv_AD (void) {
int result_AD; // Variável local para armazenar o resultado da conv
ADCON0bits.GO=1; // inicia a conversão
while (ADCON0bits.GO); // Aguarda a o fim da conversão
result_AD = (((int)ADRESH)<<8)|(ADRESL);
return result_AD;
}
// função que gera atraso em mlisegundos
void delay_ms(int i){
    for ( int x = 0; x < i; x++ )     { 
    __delay_ms(1); 
    }
}