Página 1 de 1

Frequência?

MensagemEnviado: 11 Ago 2008 10:46
por bomber-eng
Bom dia pessoal, Tudo bom?
Estou precisando gerar uma onda quadrada com as seguintes frequências, não precisa ser exato, mas tem que ser o mais próximo possível:
Frequência(Hz):
0
3,1
6,2
9,4
12,5
15,6
18,7
21,8
25,0
28,1
31,2
34,3
37,4
40,6
43,7
46,8
49,9
53,1
56,2
59,3
62,4
65,5
68,7
71,8
74,9
78,0
81,1
84,3
87,4
90,5
93,6
96,7
99,9
103,0
106,1
109,2
112,3
115,5
118,6
121,7
124,8
127,9
131,1
134,2
137,3
140,4
143,6
146,7
149,8
152,9
156,0
159,2
162,3
165,4
168,5
171,6
174,8
177,9
181,0
184,1
187,2
190,4
193,5
196,6
199,7
202,8
206,0
209,1
212,2
215,3
218,4
221,6
224,7
227,8
230,9
234,1
237,2
240,3
243,4
246,5
249,7
252,8
255,9
259,0
262,1
265,3
268,4
271,5
274,6
277,7
280,9
284,0
287,1
290,2
293,3
296,5
299,6
302,7
305,8
308,9
312,1
315,2
318,3
321,4
324,6
327,7
330,8
333,9
337,0
340,2
343,3
346,4
349,5
352,6
355,8
358,9
362,0
365,1
368,2
371,4
374,5
377,6
380,7
383,8
387,0
390,1
393,2
396,3
399,4
402,6
405,7
408,8
411,9
415,1
418,2
421,3
424,4
427,5
430,7
433,8
436,9
440,0
443,1
446,3
449,4
452,5
455,6
458,7
461,9
465,0
468,1
471,2
474,3
477,5
480,6
483,7
486,8
489,9
493,1
496,2
499,3
502,4
505,6
508,7
511,8
514,9
518,0
521,2
524,3
527,4
530,5
533,6
536,8
539,9
543,0
546,1
549,2
552,4
555,5
558,6
561,7
564,8
568,0
571,1
574,2
577,3
580,4
583,6
586,7
589,8
592,9
596,1
599,2
602,3
605,4
608,5
611,7
614,8
617,9
621,0
624,1
627,3
630,4
633,5
636,6
639,7
642,9
646,0
649,1
652,2
655,3
658,5
661,6
664,7
667,8
670,9
674,1
677,2
680,3
683,4
686,6
689,7
692,8
695,9
699,0
702,2
705,3
708,4
711,5
714,6
717,8
720,9
724,0
727,1
730,2
733,4
736,5
739,6
742,7
745,8
749,0
752,1
755,2
758,3
761,4
764,6
767,7
770,8
773,9
777,1
780,2
783,3
786,4
789,5
792,7
795,8
798,9
802,0
805,1
808,3
811,4
814,5
817,6
820,7
823,9
827,0
830,1
833,2
836,3
839,5
842,6
845,7
848,8
851,9
855,1
858,2
861,3
864,4
867,6
870,7
873,8
876,9
880,0
883,2
886,3
889,4
892,5
895,6
898,8
901,9
905,0
908,1
911,2
914,4
917,5
920,6
923,7
926,8
930,0
933,1
936,2
939,3
942,4
945,6
948,7
951,8
954,9
958,1
961,2
964,3
967,4
970,5
973,7
976,8
979,9
983,0
986,1
989,3
992,4
995,5
998,6
1001,7
1004,9
1008,0
1011,1
1014,2
1017,3
1020,5
1023,6
1026,7
1029,8
1032,9
1036,1
1039,2
1042,3
1045,4
1048,6
1051,7
1054,8
1057,9
1061,0
1064,2
1067,3
1070,4
1073,5
1076,6
1079,8
1082,9
1086,0
1089,1
1092,2
1095,4
1098,5
1101,6
1104,7
1107,8
1111,0
1114,1
1117,2
1120,3
1123,4
1126,6
1129,7
1132,8
1135,9
1139,1
1142,2
1145,3
1148,4
1151,5
1154,7
1157,8
1160,9
1164,0
1167,1
1170,3
1173,4
1176,5
1179,6
1182,7
1185,9
1189,0
1192,1
1195,2
1198,3
1201,5
1204,6
1207,7
1210,8
1213,9
1217,1
1220,2
1223,3
1226,4
1229,5
1232,7
1235,8
1238,9
1242,0
1245,2
1248,3

Na verdade consegui gerar estas frequencias usando o TIMER_0 do PIC18F452, usando um Crital de 10MHz, mas o que acontece, quando aumento as rotinas no porcessador as frequências saem fora daquilo que tinha programado previamente. o Timer não mantém sua precisão.
Estou ficando louco com isso, se alguém souber de alguma forma de como posso melhorar isso, por favor dêm uma forcinha.... Estou tentando gerar uma onda quadrada. Tentei com PWM, mas em baixas frequencias não dá certo......... E a tabela são 401 frequencias difrentes....

Caso alguém tenha alguma sugestão ficarei muito grato mesmo....

Abraços e obrigado.

MensagemEnviado: 11 Ago 2008 11:05
por renatokodaira
Talvez seja o caso de voce usar um chip DDS (direct digital synthesis) tipo AD9833 ou tentar fazer isso por software no PIC. Tem um artigo sobre isso na Circuit Cellar desse mês (numero 217).

MensagemEnviado: 11 Ago 2008 12:21
por Djalma Toledo Rodrigues
Aqui você gera a onda quadrada exata, na freq. máxima possível:

Movlw 0FFH
Loop:
xorwf PortX,F

goto Loop


Inserindo um tempo baixa a freq.

Ex.:
Movlw 0FFH
Loop:
xorwf PortX,F
call tempo
goto Loop

MensagemEnviado: 11 Ago 2008 12:58
por msamsoniuk
vc nao consegue concatenar dois timers de 16 bits como um unico timer de 32 bits e usar um divisor mais preciso para gerar interrupcoes ?

MensagemEnviado: 12 Ago 2008 01:19
por MOR_AL
Olá bomber-eng. Tudo bem?
Bom.
1 - Tirando a frequência nula, você teria:

a) para menor frequência de 3,1Hz, o período aproximado de 322.581 us.
b) para a maior frequência de 1248,3Hz, o período aproximado de 841 us.

Programando a geração dos períodos em assembler, você teria mais controle sobre os tempos de chamada e retorno das rotinas. Talvez fosse menos complicado se você dividisse as frequências em grupos. Cada grupo possuiria a chamada a determinadas rotinas de geração de tempos.

2 - Se você fizer um oscilador de onda quadrada com 1MHz e alimentar um divisor programável por N, e em seguida um contador programável de M, talvez você possa resolver o seu problema.
Como contador você poderia usar diversos CD4516 (cmos), como divisor não pesquisei, mas certamente há um da família cmos.
O PIC gerenciaria os pinos de controle dos cmos.
Suas frequências não possuem um período com número inteiro de us, daí a aproximação. Porém as frequências ficariam quase corretas.

2 - Agora. Desculpe a minha curiosidade, mas se possível, eu gostaria de saber qual seria a aplicação que nescessita de tantas e tão precisas frequências. Você já se perguntou se são realmente necessárias?

MOR_AL

Frequência.....

MensagemEnviado: 12 Ago 2008 11:07
por bomber-eng
Caro MOR_AL são necessárias sim... Pois cada frequência desta gerada equivale a 0,1m/min do meu motor de passo, vou trabalhar de 0 a 40m/min de 0,1 em 0,1m/min e esta é a precisão que necessito atualmente. Estou em um mato sem cachorro..... Mas continuo tentando achar alguma solução viável........
Qualquer coisa entre neste link, é isso que estou tentando controlar:

http://www.geckodrive.com/upload/G203V-REV-6-MANUAL.pdf
http://www.geckodrive.com/upload/Step_motor_basics.pdf

Estou tentando fazer as rotinas de controle de velocidade, depois preciso fazer rotinas de rampas de aceleração para o mesmo.
Complicado viu..... Mas vamos lá, uma hora dá certo....

Abraços e obrigado a todos pelas dicas...

MensagemEnviado: 12 Ago 2008 11:23
por Djalma Toledo Rodrigues
Oi Mor_al essas freq. certamente correspondem as notas musicais , visto que o La é 440 Hertz.

Oi Bomber-eng veja bem , para maior freq., 1248,3 cps (*), teremos cada meio período da onda quadrada com duração de 400545 nano seg. aproximadamente , ( = 1248.23 cps) * então acredito que um PIC com instrução de 50.0705 micro seg. seja de satisfatório. Certo?

(*) cps e não Hertz porque só onda senoidal tem frequência , não é mesmo ?

MensagemEnviado: 12 Ago 2008 11:31
por Djalma Toledo Rodrigues
Caracas é motor e não escala musical .

MensagemEnviado: 12 Ago 2008 12:54
por msamsoniuk
nao vejo pq o timer interno nao poderia suprir isso, mas se vc quer algo melhor e mais inteligente, pode usar um VCO (oscilador controlado por tensao).

os VCOs tipicos permitem vc variar a frequencia linearmente de acordo com a tensao de controle, assim vc pode passar de uma frequencia baixa para uma mais alta e vice-versa de forma linear e sem saltos, simplesmente incrementando ou decrementando a tensao (o que pode ser feito com alta precisao atraves de um DA ligado ao PIC).

para encontrar a frequencia alvo, vc pode montar uma especie de frequencimetro, contando durante um segundo os pulsos. como vc precisa de algo com resolucao de 1/10Hz, o VCO tem que operar a uma frequencia 10x maior, de modo que vc consiga chegar a frequencia alvo em apenas um segundo. se o tempo de resposta para encontrar essa frequencia tem que ser menor, por exemplo, 1/10 de segundo, vc tem entao que ter uma frequencia novamente 10x maior, resultando entao em 100x maior para ter precisao de 1/10Hz em 1/10 de segundo.

soh nao sei se eh simples projetar um VCO capaz de cobrir uma faixa assim grande de frequencias (mais de 400:1).

MensagemEnviado: 12 Ago 2008 12:58
por xultz
Ah, então você tá fazendo uma bomba infusora, né? Aquela frequência mínima é para o KVO? EU desenvolvi o hardware para uma bomba uma vez, mas o firmware eu contratei um piá para escrever.

Se você acha que isso é complicado, vai arrancar os cabelos para certificar a bomba na Anvisa... isso sim que é um inferno.

MensagemEnviado: 12 Ago 2008 14:07
por bomber-eng
Pessoal, não tem nada a ver com notas musicais, muito menos com bomba de infusão........
Só quero mesmo conseguir variar a velocidade de um motor de passo usando este drive em específico, nada além disso. Tenho a necessidade de usar este drive pois é com este material que trabalhamos.
Mas mesmo assim agradeço todas as dicas.
Na verdade estas frequencias consigo usando o timer 1 do pic e com duty cicle de 50%, mas conforme vou colocando mais rotinas em meu processador estas frequências mudam, diferente do PWM por hardware que fica cravado indiferente do tamnho de meu programa.

MensagemEnviado: 12 Ago 2008 14:43
por renatokodaira
Entao, esse chip DDS (AD9833) que eu citei anteriormente tem resolução de 0,1Hz (isso mesmo, a frequencia do sinal pode ser incrementada de 0,1Hz em 0,1Hz) e pode gerar sinais até 12,5MHz. Seu controle é por SPI e uma vez configurado funciona independentemente do PIC que vai controla-lo. Mais importante: tem na Farnell.
A parte chata: ele só tem uma droga de encapsulamento MSOP 10 pinos que é o cúmulo de pequeno (3mm x 3mm).

MensagemEnviado: 12 Ago 2008 17:16
por Djalma Toledo Rodrigues
Mas, se vc esta usando o Timmer 1 por interrupção não entendo porque suas rotinas alteram o mesmo .