LusoRobótica - Robótica em Português
Sistemas específicos => Arduino / AVR => Tópico iniciado por: TigPT em 22 de Janeiro de 2009, 17:55
-
Boas.. gostava de saber se alguém me consegue ajudar.
Preciso de fazer um clock em background do código principal num pin do arduino (por acaso quer dois diferentes mas para já um) de um sinal. pode ser um pwm para facilitar mas não tem que ser, basta que seja um on off constante 1010101010 a um ritmo de x miliseconds que eu possa definir.
Não sei se consegui explicar a minha ideia... acho que terei que fazer com interruptions com o timer2 mas não tenho certeza, alguém tem outra ideia ou me pode ajudar?
-
Podes usar um timer como o 555 (http://en.wikipedia.org/wiki/555_timer_IC) e fazer correr o código em função de cada "tick".
-
Podes usar um timer como o 555 (http://en.wikipedia.org/wiki/555_timer_IC) e fazer correr o código em função de cada "tick".
Estes clocks vão variar durante o código pois vão controlar velocidade de motores steppers :|
Preciso de conseguir dar stepps (clocks) em background para não ficar o arduino sempre só de volta dos motores!
-
Mesmo após aquele artigo sobre interrupts nao consegues?
-
Mesmo após aquele artigo sobre interrupts nao consegues?
Com aquilo ainda não tentei pois não tenho tempo, altura de exames :P
Mas ei de tentar e deve de resolver, entretanto pode haver outra ideia milagrosa :D
-
Só para ter a certeza tu queres uma PWM com duty-cycle = 50% e depois vais querer variar a frequencia?
-
Não precisa ser de 50% desde que de um pulso (tamanho indefinido) de x em x microsegundos em que x vou variar durante o código.
-
mas tu queres que o tempo que está ligado seja o mesmo que o desligado, certo? e a outra coisa que eu disse, tu quando dizes "Estes clocks vão variar durante o código pois vão controlar velocidade de motores steppers :|" é a frequencia, certo?
-
o tempo de on e off não precisa de ser igual, só preciso que o pulos (subir e descer) ocorra de x em x milisegundos (sim a frequencia), em que x pode ser uma variável do código ou então que eu altere este valor com algum método durante a execução do programa.
-
Tive a ler aquele artigo e vai-te ajudar, alias um dos exemplos que ele dá é fazer o "TOGGLE", não sei como traduzir, talvez inverter o valor de um pin, em que podes defenir a frequência a que ele faz isto.
-
Tive a ler aquele artigo e vai-te ajudar, alias um dos exemplos que ele dá é fazer o "TOGGLE", não sei como traduzir, talvez inverter o valor de um pin, em que podes defenir a frequência a que ele faz isto.
ok, obrigado, depois knd tiver tempo tento fazer com aquilo ;)
-
Olha talvez tenha encontrado uma solução:
http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en010486 (http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en010486)
The TC9400/TC9401/TC9402 are low-cost voltage-to-frequency (V/F)converters utilizing low power CMOS technology. The converters accept a variable analog input signal and generate an output pulse train whose frequency is linearly proportional to the input voltage. The devices can also be used as highly-accurate frequency-to-voltage (F/V)converters,accepting virtually any input frequency waveform and providing a linearly-proportional voltage output. A complete V/F or F/V system only requires the addition of two capacitors,three resistors,and reference voltage.
-
Olha talvez tenha encontrado uma solução:
http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en010486 (http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en010486)
The TC9400/TC9401/TC9402 are low-cost voltage-to-frequency (V/F)converters utilizing low power CMOS technology. The converters accept a variable analog input signal and generate an output pulse train whose frequency is linearly proportional to the input voltage. The devices can also be used as highly-accurate frequency-to-voltage (F/V)converters,accepting virtually any input frequency waveform and providing a linearly-proportional voltage output. A complete V/F or F/V system only requires the addition of two capacitors,three resistors,and reference voltage.
Muito interessante, também acredito que sirva, vou ter que testar assim que acabar os exames... ;)
Obrigado.
-
Estás como eu... A primeira fase acaba quarta, altura em que espero que o meu arduino chegue a casa :) ;D :P
-
Boa tarde, n sei se será o sitio mais adequado mas pesquisei o fórum e pareceu-me o mais aproximado do que pretendo saber(era aqui ou criar novo topico). Que é o seguinte:
http://arduino.cc/en/Tutorial/SecretsOfArduinoPWM (http://arduino.cc/en/Tutorial/SecretsOfArduinoPWM) descreve como alterar a frequencia do PWM do arduino, mas eu queria que alguem me explicasse quais as implicações disto na pratica, e se é uma solução aconselhada ou não( tipo a nivel da estabilidade dos progrmas) pois pelo k li aletra o tempo que as instruções demoram a ser executadas.
Também gostaria de saber de alguem mais experiente que eu se não haverá maneira mais alto nivel de fazer o mesmo.
Atentamente,
Paulo J. M.
-
A unica coisa que altera o tempo de execução de cada instrução é o cristal de 16Mhz, se alterares os tempos do pwm a unica coisa que muda é a frequência do pwm que no Arduino anda na casa dos 500Hz para os timers de 8 bits e 1Khz no timer de 16 bits, ACHO eu.
Se alterares o timer de 16 bits as funções micros e milis ficam descalibradas.
Mas queres alterar a frequência dos timers porque?
-
Obrigado pela resposta,
Nao sei se vou precisar de alterar, mas preciso de controlar um servo motor DC e mais tarde umservo motor trifásico AC e anteriormente fiz uns testes com um picaxe e com determinadas frequências o comportamento era melhor que com outras (não cheguei a perceber na totalidade o pq). Neste momento ainda não tenho os motores que vou usar, e tb já não vou usar o picaxe, mas sim o arduino ou mais tarde uma ngw100 ou semelhante e queria apenas testar com varias frequências, de preferência com uma só instrução como no picaxe em vez de ter que por aquele código todo que ainda por cima não é muito fácil decorar as suas variantes.
Apenas mais uma questão:
Se alterares o timer de 16 bits as funções micros e milis ficam descalibradas.
Quer isto dizer que se precisar de fazer tipo delay n saberei se o tempo real estará correcto?
Ainda sou novo no arduino, estou mesmo a começar.
Cumprimentos,
Paulo J. M.
-
Podes usar as funções de delay calibradas, mas se é para usar servos então o melhor é usar a biblioteca servo, é só 2 ou 3 linhas de código e está feito.
-
Ok vou estudar essa livraria.
Quando digo servos não me refiro a servos rc, mas aqueles tipo industriais muito usados por exemplo em maquinas de CNC.
Essa biblioteca tb serve para esses?e já tem funções para ler o encoder ...
Não qeuro abusar mas e PID existe alguma coisa?
De qualquer maneira vou estuda-la e ver o que dá pa fazer.
Obrigado.
-
Não, só funciona para servos que recebam, sinais PPM, e não lê encoders, tem de ser á parte.
Ler encoders, mais que 2 é abusar muito, e mesmo um se for rápido vai ocupar grande parte do tempo de processamento que o Arduino tem para dar.
Esses servos industriais são baseados em motores sincronos ou em steppers?
É que se forem motores sincronos de 3 fases, é preciso mandar o Arduino dar uma curva e programar em Assembly ou C muito limpinho para gerar as 3 fases.
-
O Servo ac é um fanuc trifásico 90V e por isso já tinha desconfiado que não ia conseguir gerar as ondas com o arduino e usá-lo para o resto, mas ainda tinha esperança...Os DC que já testei são motores pittman de 24V que ao mais fracos que os que terei de usar(ainda não tive acesso a elesnem tirei as caracteristicas, apenas sei que são sevos DC, nem sei quantos pulsos tem o encoder). Se fossem steppers penso que teria o trabalho muito mais simplificado.