[Resolvido] Dúvida sobre controle de servo

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

[Resolvido] Dúvida sobre controle de servo

Mensagempor [Daniel] » 13 Jul 2010 09:31

Bom dia,

Colegas eu gostaria de saber uma coisa:

Qual é a melhor forma de controlar vários servos com o pic? Fazer o pwm no programa principal ou na interrupção, vou usar botões para fazer ajustes dos ângulos dos mesmos.

O clock esta bom em 4Mhz? não há necessidade de aumentar..correto?
Editado pela última vez por [Daniel] em 13 Jul 2010 15:31, em um total de 2 vezes.
Avatar do usuário
[Daniel]
Byte
 
Mensagens: 106
Registrado em: 18 Nov 2009 09:14

Mensagempor Andre_Cruz » 13 Jul 2010 09:54

Daniel,

Acredito que a interupção seje a melhor opção, embora no loop principal funciona para servo motor.
A respeito da velocidade do clock 4MHz depende do tamanho do programa (tudo que ele precisa fazer) e da linguagem utilizada.

André Cruz
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor [Daniel] » 13 Jul 2010 10:11

Uhm, então ta certo obrigado André, vou fazer na interrupção mesmo, alguém tem dicas para configurar os registradores? no momento eu fiz com o TMR0.

Até o momento tive resultados com isso:

Configurei com presc. de 1:2 e TMR0 para estourar a cada 40us (intrc_osc_noclockout 4mhz / 16f628), sendo assim uma interrupção a cada de 80us, o periodo do pwm é 255 incrementos, assim tenho, aproximadamente um pwm de 20,400ms.

Consegui usar 2 chaves para aumentar e diminuir o ciclo pwm dentro do padrão suportado pelo servo.

Alguém tem uma sugestão melhor?

Mais uma pergunta, se eu usar um cristal de 8 ou 10Mhz, quanto fica o tempo de cada instrução? não consegui mais calcular isso apesar que sei que com 10mhz da 400ns e em 4mhz dá 250us. Já na config do tmr0 como fica?

Ele recebe o clock do cristal > divide por 4 > a quantos us ele dá um incremento no tmr0? to confuso ainda...
Avatar do usuário
[Daniel]
Byte
 
Mensagens: 106
Registrado em: 18 Nov 2009 09:14

Mensagempor Andre_Cruz » 13 Jul 2010 10:24

Daniel,

Para calcular a frequência de estouro do timer0 é assim:

Ftmr0 = 1/ ((256-TMR0)*(1/(Fosc/4))*prescaler)

Ftmr0 é a frequência de estouro do timer 0 em Hz
TMR0 é o valor carregado no registrador TMR0
Fosc é a frequência do oscilador
prescaler é o fator de divisão

Exemplo:

Ftmr0 = 1/((256-221)*(1/(20MHz/4))*16)
TMR0 = 221
Fosc = 20MHz
prescaler = 16

Ftmr0 = 8928,6 Hz

A frequência de clock dividida por quatro é para achar a frequência de trabalho interna do PIC.

André Cruz
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor [Daniel] » 13 Jul 2010 12:30

Sei la, vou tentar explicar do meu jeito:

Sinais de controle para o servo:

Imagem

Meus "cálculos":

Imagem
(OBS: inverti os valores para posição central do servo com as da posição de -90°)

Então, eu entendo assim nesse caso ,o tmr0 estoura a cada 80us. com clock de 4mhz.

Dessa forma eu tenho um registrador de periodo de 250partesx80us= periodo de 20ms, cada incremento/decremento no ciclo equilave a uma parte dessa ou seja por exemplo com 13x80us tenho um pulso de 1040us (1ms) no periodo constante de 20000us (20ms), assim meu servo fica na posição dos -90°. afirmativo?

Agora se eu colocar um cristal de 10mhz qual a velocidade que o tmr0 recebe os incrementos de clock? e se for 8 mhz?

sendo que 4mhz:4=1us então: 10mhz:4=2,5us???? não deveria ser um tempo menor? com 8mhz:4=2us???
Avatar do usuário
[Daniel]
Byte
 
Mensagens: 106
Registrado em: 18 Nov 2009 09:14

Mensagempor Andre_Cruz » 13 Jul 2010 14:27

Daniel,

Com a interupção acontecendo a cada 80uS, o seu duty cycle varia de 80uS em 80uS, com um registrador de controle da pra fazer o PWM sim.
Seu raciocinio esta certo.

Tempo do ciclo de maquina = 1/(Fosc/4)
Fosc = Frequência do Cristal

Cristal de 4MHz

Tempo do ciclo de maquina = 1/(4.000.000/4)
Tempo do ciclo de maquina = 1/1.000.000
Tempo do ciclo de maquina = 0,000001 ou 1uS

Cristal de 8MHz

Tempo do ciclo de maquina = 1/(8.000.000/4)
Tempo do ciclo de maquina = 1/2.000.000
Tempo do ciclo de maquina = 0,0000005 ou 500nS

Cristal de 10MHz

Tempo do ciclo de maquina = 1/(10.000.000/4)
Tempo do ciclo de maquina = 1/2.500.000
Tempo do ciclo de maquina = 0,0000004 ou 400nS

André Cruz
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor [Daniel] » 13 Jul 2010 15:30

Pois é André,

Eu fiz várias vezes esses cálculos, mas já tinha esquecido o raciocínio (fórmula) muito obrigado, dessa vez eu não esqueço mais. Vou aproveitar para fixar:

Cristal de 2Mhz

Tempo do ciclo de maquina = 1/(2.000.000/4)
Tempo do ciclo de maquina = 1/500.000
Tempo do ciclo de maquina = 0,000002 ou 2uS

Cristal de 20Mhz

Tempo do ciclo de maquina = 1/(20.000.000/4)
Tempo do ciclo de maquina = 1/5.000.000
Tempo do ciclo de maquina = 0,0000002 ou 200nS

Obrigado!

Sobre o sinal de controle consegui algo satisfatório, só falta testar na prática.

Imagem Imagem Imagem


Abraço

Tópico Resolvido!
Avatar do usuário
[Daniel]
Byte
 
Mensagens: 106
Registrado em: 18 Nov 2009 09:14

Mensagempor Andre_Cruz » 13 Jul 2010 15:42

Legal !!

Se possivel poste o código para compartilhar com o pessoal do forum.

Abraço

André Cruz
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor [Daniel] » 16 Jul 2010 14:49

Então cara o código do pwm é simples:

Eu basicamente vejo se "=" se não, faço então a comparação "<" e uso o BSF pin ou BCF pin... Mais nada.

O resto tai em cima, uma interrupção a cada 80us dividido em 250 partes, ja testei na prática também e funfa.

Abraço
Avatar do usuário
[Daniel]
Byte
 
Mensagens: 106
Registrado em: 18 Nov 2009 09:14


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x