LusoRobótica - Robótica em Português
Sistemas específicos => 8051 => Tópico iniciado por: ivitro em 27 de Agosto de 2010, 13:29
-
ola a todos.
já tinha dito noutro topico que estou a fazer um mini computador de bordo para o carro e que precisava de alguma ajuda no codigo!
então é assim , estou a pegar no sinal que vai para os injectores do carro e a medir o tempo em que estão abertos num determinado periodo!
o sinal que vai para os injectores tem este aspecto:
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimagefrog.net%2Fthumb%2Fthumb_e5eaa988.jpg&hash=e167ad46d086c0161c2f68f8dd387e5cc0b98aea) (http://imagefrog.net/show.php/111463_2000rpmquente.BMP)
e o impulso este:
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimagefrog.net%2Fthumb%2Fthumb_e85d6c98.jpg&hash=e2d1eb2c3c8354c8bf441a57ea8d4965a7412a51) (http://imagefrog.net/show.php/111464_DS0012.BMP)
depois de tratar o sinal ele vai ficar entre 5 e 0 volts
o meu codigo é o seguinte:
int temp_injec()
{
unsigned int valor;
TMOD = (TMOD & 0xF0) | 0x09; //temp modo1 a 16bits temporizador com controlo externo
TH0 = 0;
TL0 = 0; //limpa os temporizadores
TR0 = 1; //liga a temporização
while(!INT0); // espera pelo primeiro impulso
LCD_delay(100); //tempo de 100ms
TR0 = 0; // desliga o temporizador
valor=TH0*65/256;
cursorxy(6, 10);
putchar(((valor)/10)+0x30);
putchar(((valor)%10)+0x30);
return valor;
}
podem me dizer se está bem assim?
-
Esse porgrama é suposto fazer o que mesmo?
-
ola senso...
a ideia é ler o tempo total em que a onda está a nivel 0 durante 100ms.
porque varia durante os impulsos uns são mais largos que outros, dependendo de vários factores!
eu fiz esse programa e simulei com um pwm mas o resultado não me convenceu :S
preciso tambem de outra função para ler o tempo entre impulsos...mas primeio vou tentar fazer depois se precisar de ajuda posto
-
Queres portanto fazer um espécie de centralina e controlar tu os injectores?
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1264932928/all (http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1264932928/all)
Tinha aqui um projecto mesmo bem documentado, mas perdi os meus favoritos :(
-
nao eu quero é medir a gasolina l/100km tas a ver?
o grafico ja é medido apartir do injector (mas tenho que medir porque medi em AC e é em DC)
-
E sabes qual é o débito dos teus injectores e como é que ele varia consoante o tempo que eles estão activos?
-
o debito ainda nao sei! quanto a variação deles quando activos estou a entrar no suposto que estão todos aberto (acho que é isto que me perguntas-te)
o debito so tenho que ver a ref deles ou então vou a uma casa de material auto e dizem me lá.... o que ainda nao sei e se calhar tenho que medir é a pressão da bomba para ter a certeza do debito
-
já encontrei o problema!
o código está bem, a rotina de delay é que está mal e tem que ser corrigida
-
Estás a fazer tu uma rotina de delay?
Porque?Todos os compiladores oferecem rotinas de delay calibradas e que sabes que funcionam, tu criares uma rotina, pelo menos em gcc é o mesmo que mandar código para o lixo porque o optimizador vê que é uma rotina sem qualquer utilidade e remove-a, penso que tens de declarar as variaveis usadas como volatile para o compilador não remover o código.
-
eu estou a programar no keil... pois realmente fiz a rotina para o uma coisa e ela está muito mais lenta do que eu pensava.
como posso ir buscar essas rotinas já calibradas sabes me dizer?
-
keil?
Para que micro-controlador?
Isso lês o manual do compilador, deve ser algo do género delay_ms() ou delayms() ou delay().
-
e um at89s52 que tou a utilizar...
tenho que fazer o condicionamento do sinal que vai para os injectores...so estou na duvida por onde lhe ei-de pegar :S, se faço um limitador de tensão ou faço um interruptor com um transistor...a onda está no primeiro post
-
Pois isso é x51 não é?
Mas procura no manual por delay que de certeza que tem.
-
vou procurar lá..espero em breve poder colocar aqui o resultado final ;)