Página 1 de 1

[Resolvido] Dúvida sobre controle de servo

MensagemEnviado: 13 Jul 2010 09:31
por [Daniel]
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?

MensagemEnviado: 13 Jul 2010 09:54
por Andre_Cruz
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

MensagemEnviado: 13 Jul 2010 10:11
por [Daniel]
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...

MensagemEnviado: 13 Jul 2010 10:24
por Andre_Cruz
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

MensagemEnviado: 13 Jul 2010 12:30
por [Daniel]
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???

MensagemEnviado: 13 Jul 2010 14:27
por Andre_Cruz
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

MensagemEnviado: 13 Jul 2010 15:30
por [Daniel]
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!

MensagemEnviado: 13 Jul 2010 15:42
por Andre_Cruz
Legal !!

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

Abraço

André Cruz

MensagemEnviado: 16 Jul 2010 14:49
por [Daniel]
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