Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do...

36
EA075 Processadores Dedicados Padronizados: Periféricos Faculdade de Engenharia Elétrica e de Computação (FEEC) Universidade Estadual de Campinas (UNICAMP) Prof. Levy Boccato 1

Transcript of Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do...

Page 1: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

EA075 Processadores Dedicados Padronizados: Periféricos

Faculdade de Engenharia Elétrica e de Computação (FEEC)

Universidade Estadual de Campinas (UNICAMP)

Prof. Levy Boccato

1

Page 2: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

2

Introdução Processador dedicado: sistema digital projetado

para realizar uma tarefa específica de computação.

Algumas tarefas de computação são tão comuns que processadores dedicados padronizados (também chamados de periféricos) estão disponíveis como “itens de prateleira”.

Software Hardware

Padronizados Customizados Propósito

geral

Abordagem

Processador

Page 3: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

3

Um projetista de sistemas embarcados pode escolher utilizar um processador dedicado padronizado para implementar parte de uma funcionalidade desejada do sistema e, com isso, obter alguns benefícios:

O custo NRE é relativamente baixo - o processador já está pronto, faltando sua integração.

O custo por unidade do processador pode ser baixo – o NRE foi amortizado pela grande quantidade de unidades produzidas pelo fabricante.

Em relação a um processador genérico, o desempenho pode ser mais rápido, com consumo de potência menor e ocupando um tamanho reduzido – afinal, o processador dedicado foi criado para esta única tarefa.

Trade-off: se um processador genérico já fizer parte do sistema embarcado em desenvolvimento, implementar uma tarefa através de um processador dedicado adicional em vez de software pode aumentar o tamanho e o consumo de potência do sistema.

Motivação

Page 4: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

Temporizadores / Contadores Temporizador: circuito capaz de medir intervalos de

tempo.

Pode gerar eventos temporais – por exemplo, para manter o sinal verde em um semáforo por 10 s.

Pode medir o tempo decorrido entre a ocorrência de eventos – por exemplo, para computar a velocidade de um carro.

4

Page 5: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

Temporizadores / Contadores Como medir o tempo?

Contando os pulsos que aparecem em um sinal de relógio de entrada que possui um período/frequência conhecido.

Exemplo: Se a frequência do relógio é igual a 1 MHz e foram

contabilizados 2000 pulsos, o tempo decorrido é igual a 2 ms.

Exemplo:

Contador

de

16 bits

Relógio Cnt

Temporizador Básico

Top

Reset

16

Faixa: máximo intervalo de tempo que o temporizador consegue medir. Exemplo: 65535 . 1x10-6 = 655,35 μs

Resolução: mínimo intervalo de tempo que o temporizador consegue medir. Exemplo: 10 μs

O sinal top indica que a contagem máxima foi alcançada

5

Page 6: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

Temporizadores / Contadores Contador: mesma estrutura interna de um

temporizador, porém conta pulsos gerados por outro sinal de entrada no lugar do relógio.

Por exemplo, a contagem de carros que passam por um sensor.

Com um seletor, controlado pelo modo de operação, é possível configurar um dispositivo como temporizador ou contador.

Contador

de

16 bits

Relógio 16

Cnt_in

2x1

mux

Mode

Temporizador/Contador

Top

Reset

Cnt

6

Page 7: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

Temporizadores / Contadores Estruturas alternativas

Contador de 16

bits

Relógio 16

Valor final de

contagem

= Top

Reset

Temporizador com um

valor final de contagem

Cnt

O valor final da contagem é determinado de acordo com o intervalo de tempo a ser analisado.

Exemplo: dado o contador mostrado ao lado e um sinal de relógio com frequência de 1 MHz, qual o valor a ser armazenado como valor final de contagem para que seja medido um tempo de 4 ms?

4.10-3 / 1.10-6 = 4000

Por simplicidade, pode-se usar um contador descendente.

7

Page 8: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

Temporizadores / Contadores Estruturas alternativas

Contador em série (cascata) Estende o valor máximo da contagem. E.g., (65536 x 65536) – 1 = 4.294.967.295.

Contador

de

16 bits

Relógio

Contador

de

16 bits

16

Cnt2

Top1

16/32-bit

temporizador

Cnt1

16

8

Page 9: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

Temporizadores / Contadores Estruturas alternativas

Contador com divisor de frequência Dependendo dos bits em mode, o sinal de saída do prescaler será semelhante ao relógio de entrada, mas com metade da frequência, ou um quarto da frequência, etc. Por exemplo:

Relógio de 100 MHz. Divisão de frequência por um fator de 8. Relógio efetivo terá freq. de 12,5 MHz. Resolução: 1/12,5 MHz = 80ns Faixa: 80ns x 65535 = 5,24 ms

Temporizador com divisor

de frequência Contador

de

16 bits

Relógio Prescaler

mode

9

Page 10: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

Temporizadores / Contadores É possível utilizar um processador genérico para

implementar um temporizador:

Sabendo o número de ciclos que cada instrução consome, basta escrever um laço (loop) que executa uma determinada sequência de instruções.

Quando o loop se encerra, sabe-se que um determinado período de tempo (ciclos) se passou.

10

Page 11: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

Temporizadores / Contadores Exemplo: tempo de reação

Mede o tempo decorrido entre o acendimento do LED e o acionamento

do botão por parte do usuário.

Processador genérico de 12 MHz com temporizador embutido.

A cada ciclo de instrução (igual a seis ciclos de relógio), o temporizador é incrementado. A cada 6 x 1/12MHz = 0,5 μs, o valor da contagem (16 bits) é incrementado. Esta é a

resolução do temporizador.

Faixa: 65535 x 0,5 μs = 32,77 ms

Exige-se que o programa determine o tempo de reação com precisão de ms, e espera-se que o tempo de reação seja da ordem de segundos.

LED Botão

de

reação

Tempo: 20 ms LCD

11

Page 12: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

Temporizadores / Contadores Exemplo: tempo de reação

A faixa do temporizador não é suficiente para medir um tempo em segundos.

Ideia:

Inicializar um valor no contador de 16 bits tal que a contagem final (top = 1) seja atingida após 1 ms.

c = 1 ms / 0,5 μs = 2000.

O valor da contagem é, portanto, 65535 – 2000 = 63535.

Resta ao programa contar o número de vezes que o sinal top é igual a 1 para determinar o tempo de reação.

12

Page 13: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

Temporizadores / Contadores Exemplo: tempo de reação

/* main.c */

#define MS_INIT 63535

void main(void){

int count_milliseconds = 0;

configure timer mode

set Cnt to MS_INIT

wait a random amount of time

turn on indicator light

start timer

while (user has not pushed reaction button){

if(Top) {

stop timer

set Cnt to MS_INIT

start timer

reset Top

count_milliseconds++;

}

}

turn light off

printf(“time: %i ms“, count_milliseconds);

}

Toda vez top = 1, o contador (hardware) recomeça a contagem do valor MS_INIT e incrementamos o contador de milissegundos (software).

13

Page 14: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

Temporizador Watchdog Em vez de o temporizador gerar um sinal a cada T

unidades de tempo, é necessário que o usuário (programa) gere um sinal para o contador a cada T unidades de tempo.

Caso isso não aconteça, o temporizador “expira” e gera um sinal indicando que uma falha aconteceu.

Usos: detecção de falhas / auto-reset.

14

Page 15: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

Temporizador Watchdog Exemplo: timeout (sinal de tempo esgotado) em um

caixa eletrônico.

Deseja-se determinar o valor a ser carregado no contador de 16 bits de tal forma que o sinal de overflow é disparado após 2 minutos.

Cont. 11

bits

Cont. 16

bits

Reset ou

interrupção

Clock: 12 MHz clk Prescaler

(1/12)

overflow overflow

15

Page 16: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

Temporizador Watchdog Exemplo: timeout (sinal de tempo esgotado) em um

caixa eletrônico. Contador de 11 bits:

Relógio: 12 MHz x (1/12) = 1 MHz – período = 1 μs.

Faixa: 0 a 211 – 1 = 2047.

No 2048º ciclo, o contador de 11 bits zera e o contador de 16 bits deve incrementar seu valor.

Contador de 16 bits:

Faixa: 0 a 65535.

Como o valor é incrementado a cada 2,048 ms, para se atingir 2 minutos, é preciso contar 120/(2,048x10-3) = 58594.

Logo, o valor inicial no contador de 16 bits deve ser:

65535 – 58594 = 6941.

16

Page 17: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

UART Receptor/Transmissor universal assíncrono: recebe dados seriais e

os armazena como dados paralelos (usualmente um byte); também recebe dados paralelos e os transmite de forma sequencial.

Útil para comunicação entre dispositivos bastante afastados ou quando há poucos pinos de entrada/saída disponíveis.

Baud rate = determina a velocidade com que dados são trocados entre duas UARTs; mede o número de mudanças de sinal (símbolos) por segundo.

Protocolo de comunicação: receptor e transmissor concordam com i. taxa em que bits são enviados; ii. número de bits usados para separar duas transmissões consecutivas; iii. número de bits de dados e o tipo de paridade (usado para verificação de erros).

17

Page 18: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

UART

Recepção:

O receptor está constantemente monitorando o pino de entrada à espera de um bit de partida (e.g., uma transição de ALTO para BAIXO). Após esse bit, o receptor amostra o pino em intervalos de tempo pré-determinados, deslocando cada bit amostrado em um registrador de deslocamento de recepção.

Sistema

embarcado 1

0 0 1

1 0 1 1

UART - Transmissor

1 0 0 1 1 0 1 1

UART - Receptor

1 0 0 1 1 0 1 1

18

Page 19: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

UART

Transmissão:

O processador escreve um byte no registrador da UART, a qual inicia a transmissão com um bit de partida no pino de saída.

Então, o transmissor desloca os dados do registrador de deslocamento para o pino de saída de acordo com uma taxa pré-determinada. Além disso, também envia um bit de paridade e um bit de parada, encerrando a transmissão.

Sistema

embarcado 1

0 0 1

1 0 1 1

UART - Transmissor

1 0 0 1 1 0 1 1

UART - Receptor

1 0 0 1 1 0 1 1

19

Page 20: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

UART

Sistema

embarcado 1

0 0 1

1 0 1 1

UART - Transmissor

1 0 0 1 1 0 1 1

UART - Receptor

1 0 0 1 1 0 1 1

Bit de partida Dados

Bit de parada

1 0 0 1 1 0 1 1

20

Page 21: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

PWM Pulse Width Modulation:

clk

pwm

25% duty cycle

clk

pwm

50% duty cycle

clk

pwm

75% duty cycle

Gera um sinal de saída periódico com duração ajustável do nível ALTO (ou BAIXO).

Duty cycle: porcentagem do tempo que o sinal permanece no nível ALTO em relação ao período.

21

Page 22: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

PWM Usos comuns:

Para gerar um sinal de relógio para outro dispositivo (e.g.,

para piscar um LED segundo uma taxa específica).

Para controlar a corrente ou tensão média de entrada em um motor DC.

Para codificar comandos de controle em um único sinal enviado a outro dispositivo. Por exemplo, é possível dirigir um carrinho controlado remotamente

enviando pulsos de diferentes larguras. Um pulso de largura igual a 1 ms poderia representar o comando “vire à esquerda”, enquanto um pulso de duração 8 ms representaria o comando “prossiga em frente”.

Um temporizador acionado quando o pulso começa poderia medir a largura do pulso e identificar o comando.

22

Page 23: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

PWM Exemplo: motor DC

A velocidade de rotação do motor é proporcional à tensão aplicada.

Contador de 8 bits clk_div – determina o período do PWM ao especificar o número de ciclos do clk dentro do período.

O registrador cycle_high determina o duty cycle, indicando o número de ciclos (do período) que a saída permanece no nível ALTO.

Estrutura interna do PWM

clk_div

cycle_high

(Nível ALTO)

Contador

( 0 – 254)

Comparador de

8 bits

Controla o

período do

contador

contador < cycle_high, pwm = 1

contador >= cycle_high, pwm = 0

pwm

clk Tensão de entrada

% da máxima tensão

aplicada (duty cycle) RPM do motor DC

0 0 0

2.5 50 4600

3.75 75 6900

5.0 100 9200

Relação entre a tensão aplicada e a velocidade do

motor DC

23

Page 24: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

PWM Exemplo: motor DC

Para atingir 6900 RPM, é necessário um duty cycle de 75%.

Então, cycle_high deve receber o valor 254 x 0.75 = 191.

Estrutura interna do PWM

clk_div

cycle_high

(Nível ALTO)

Contador

( 0 – 254)

Comparador de

8 bits

Controla o

período do

contador

contador < cycle_high, pwm = 1

contador >= cycle_high, pwm = 0

pwm

clk Tensão de entrada

% da máxima tensão

aplicada (duty cycle) RPM do motor DC

0 0 0

2.5 50 4600

3.75 75 6900

5.0 100 9200

Relação entre a tensão aplicada e a velocidade do

motor DC

24

Page 25: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

Controlador LCD Liquid Crystal Display:

Um mostrador de cristal líquido é um dispositivo de baixo

custo e baixa potência capaz de exibir texto e imagens.

LCD refletivo: A luz incidente passa através de uma placa de polarização.

Então, a luz polarizada encontra um material cristal líquido que, quando excitado, tem suas moléculas alinhadas, o que faz com que a luz polarizada o atravesse. Senão, a luz não passa.

Por fim, a luz que passou atinge uma superfície refletora, de modo que estas regiões excitadas acendem.

Controlador LCD: provê uma interface simples para o uso de

LCDs.

25

Page 26: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

Controlador LCD Exemplo: controlador LCD

Recebe palavras de controle do microcontrolador e realiza as ações

correspondentes no LCD.

RS: quando em nível BAIXO,informa ao controlador que os dados enviados (DB7 – DB0) formam uma palavra de controle.

Toda vez que um dado precisa ser enviado, o bit de enable (E) deve ser acionado.

E

R/W

RS

DB7–DB0

Controlador

LCD

Barramento de

comunicação

Microcontrolador 8

26

Page 27: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

Controlador LCD Exemplo: controlador LCD

void WriteChar(char c){

RS = 1; /* indicate data being sent */

DATA_BUS = c; /* send data to LCD */

EnableLCD(45); /* toggle the LCD with appropriate delay */

}

CODES

I/D = 1 cursor moves left DL = 1 8-bit

I/D = 0 cursor moves right DL = 0 4-bit

S = 1 with display shift N = 1 2 rows

S/C =1 display shift N = 0 1 row

S/C = 0 cursor movement F = 1 5x10 dots

R/L = 1 shift to right F = 0 5x7 dots

R/L = 0 shift to left

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 Description

0 0 0 0 0 0 0 0 0 1 Clears all display, return cursor home

0 0 0 0 0 0 0 0 1 * Returns cursor home

0 0 0 0 0 0 0 1 I/D S Sets cursor move direction and/or

specifies not to shift display

0 0 0 0 0 0 1 D C B ON/OFF of all display(D), cursor

ON/OFF (C), and blink position (B)

0 0 0 0 0 1 S/C R/L * * Move cursor and shifts display

0 0 0 0 1 DL N F * * Sets interface data length, number of

display lines, and character font

1 0 WRITE DATA Writes Data

Rotina que envia um caractere ao controlador para escrita no display

27

Page 28: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

Controlador de teclado Oferece uma interface simples para leitura de caracteres de entrada

em um teclado.

O sinal “tecla pressionada” pode disparar uma interrupção, de modo que o processador genérico realiza a leitura do código da tecla.

N1 N2

N3 N4

M1

M2

M3

M4

Código da tecla

Controlador de teclado

Tecla pressionada

Código da tecla

4

N=4, M=4 28

Page 29: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

Controlador de teclado Exemplo:

29

As colunas (C0-C2) ficam em nível lógico alto enquanto nenhuma tecla é acionada.

Para identificar uma tecla acionada, faz-se uma varredura da matriz do teclado.

Primeiramente, coloca-se as linhas em nível lógico baixo e verifica-se qual coluna possui também nível lógico baixo. Em seguida, atribui-se nível lógico alto de forma sequencial nas linhas, verificando qual linha produz transição de nível da coluna previamente identificada.

Page 30: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

Controlador de teclado Exemplo:

30

Registrador (posição de memória):

Bits: B7 B6 B5 B4 B3 B2 B1 B0 Significado: CI EI X X L3 L2 L1 L0 Bits: B7 B6 B5 B4 B3 B2 B1 B0 Significado: FI X X X X C2 C1 C0 EI – habilita interrupção. CI – limpa o pedido de interrupção. FI – indica solicitação de interrupção.

Page 31: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

Controlador de teclado Exemplo:

31

• A interface com o teclado pode ser feita mesclando hardware e software.

• Em hardware,

Pode-se eliminar o efeito de bounce usando latches D. Conecta-se a pinos específicos do microprocessador as linhas (entradas do teclado) e colunas (saídas do teclado).

• Em software, faz-se a varredura segundo o procedimento anteriormente mencionado para identificar a tecla pressionada quando uma interrupção do teclado é gerada.

Page 32: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

Controlador de teclado Exemplo:

32

Page 33: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

Motor de passos Stepper Motor

Motor elétrico que rotaciona um número fixo de graus toda vez que um sinal de ativação é disparado.

A especificação de um motor se dá pelo número de graus que o motor avança por passo (e.g., 1,8°) ou pelo número de passos necessários para uma rotação completa (200 passos para 360°).

A rotação do eixo do motor ocorre quando uma determinada sequência de tensões é aplicada às bobinas.

Red A

White A’

Yellow B

Black B’

Sequência A B A’ B’

1 + + - -

2 - + + -

3 - - + +

4 + - - +

5 + + - -

A sequência inteira precisa ser aplicada para que ocorra a rotação do motor (1 passo).

33

Page 34: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

Motor de passos Exemplo: Uso de driver

CW’ / CCW – especifica o sentido da rotação do motor (horário ou anti-horário) quando um pulso de clock (Clk) é aplicado.

Full’ / Half Step – determina se um passo completo ou meio passo é dado quando o pulso de clock é aplicado.

MC3479P 1

5

4

3

2

7

8

6

16

15

14

13

12

11

10

9

Vd

A’

A

GND

Bias’/Set

Clk

O|C

Vm

B

B’

GND

Phase A’

CW’/CCW

Full’/Half Step

2 A’

3 A

10

7

B 15

B’ 14

MC3479P

Driver de um

motor de passos

8051

P1.0

P1.1

Motor

de

passos

CLK

CW’/CCW

34

Page 35: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

Motor de passos Exemplo: Uso de driver

MC3479P 1

5

4

3

2

7

8

6

16

15

14

13

12

11

10

9

Vd

A’

A

GND

Bias’/Set

Clk

O|C

Vm

B

B’

GND

Phase A’

CW’/CCW

Full’/Half Step

2 A’

3 A

10

7

B 15

B’ 14

MC3479P

Driver de um

motor de passos

8051

P1.0

P1.1

Motor

de

passos

CLK

CW’/CCW

void main(void){

*/roda o motor no sentido horário */

cw=0; /* sentido */

clk=0; /* gera um pulso de clock */

delay();

clk=1;

/*roda o motor no sentido oposto */

cw=1; /* anti-horário*/

clk=0; /* gera um pulso de clock*/

delay();

clk=1;

}

/* main.c */

sbit clk=P1^1;

sbit cw=P1^0;

void delay(void){

int i, j;

for (i=0; i<1000; i++)

for ( j=0; j<50; j++)

i = i + 0;

}

35

Page 36: Equalização de Canais de Comunicação Baseada em …lboccato/Cap.4-Perifericos.pdf · A faixa do temporizador não é suficiente para medir um tempo em segundos. ... Para controlar

Motor de passos Exemplo: Sem driver

A sequência que define um passo tem que ser gerada via software.

Stepper

Motor

8051

GND/ +V P2.4

P2.3

P2.2

P2.1

P2.0

/*main.c*/

sbit notA=P2^0;

sbit isA=P2^1;

sbit notB=P2^2;

sbit isB=P2^3;

sbit dir=P2^4;

void delay(){

int a, b;

for(a=0; a<5000; a++)

for(b=0; b<10000; b++)

a=a+0;

}

void move(int dir, int steps) {

int y, z;

/* clockwise movement */

if(dir == 1){

for(y=0; y<=steps; y++){

for(z=0; z<=19; z+4){

isA=lookup[z];

isB=lookup[z+1];

notA=lookup[z+2];

notB=lookup[z+3];

delay();

}

}

}

/* counter clockwise movement */

if(dir==0){

for(y=0; y<=step; y++){

for(z=19; z>=0; z - 4){

isA=lookup[z];

isB=lookup[z-1];

notA=lookup[z -2];

notB=lookup[z-3];

delay( );

}

}

}

}

void main( ){

int z;

int lookup[20] = {

1, 1, 0, 0,

0, 1, 1, 0,

0, 0, 1, 1,

1, 0, 0, 1,

1, 1, 0, 0 };

while(1){

/*move forward, 15 degrees (2 steps) */

move(1, 2);

/* move backwards, 7.5 degrees (1step)*/

move(0, 1);

}

} 36