collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: controlador dois turbos  (Lida 6524 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline cstefan

  • Mini Robot
  • *
  • Mensagens: 7
controlador dois turbos
« em: 18 de Março de 2016, 11:44 »
Boas pessoal estou a adaptar um sistema biturbo que funciona da seguinte maneira.

]http://bioage.typepad.com/.shared/image.html?/photos/uncategorized/opel_twinturbo_1.PNG[

tenho um problema no codigo, que deve ser uma coisa minima.. ao compilar e queria saber se alguem me pode dar uma ajuda e ja agora outra sugestao para os IF´s, de modo a que funcione mais ou menos como na foto.. a unica diferença é que o meu em vez de funcionar por rotaçao vai funcionar por Pressao atravez de um sensor map. na foto apenas falta a valvula wastegate que fica a saida do turbo grande e é o que faz a descarga quando chega a pressao maxima.

« Última modificação: 18 de Março de 2016, 11:48 por cstefan »

Online jm_araujo

  • Mini Robot
  • *
  • Mensagens: 2.947
  • NERD!
Re: controlador dois turbos
« Responder #1 em: 18 de Março de 2016, 12:13 »
A imagem bem inserida:


O teu código mais legível:
Código: [Seleccione]
#define sensorPin 0
int comporta = 13;
int admissao = 12;
int wastegate = 11;

void setup() {
 Serial.begin(9600);
 pinMode(comporta, OUTPUT);
 pinMode(admissao, OUTPUT);
 pinMode(wastegate, OUTPUT);
}


void loop() {
 int boostkPa = map(analogRead(sensorPin), 0, 1023, 50, 400);
 int boostMbar = boostkPa * 10 ; //Converts boostkPa to Mbar
 Serial.print("kPa :"); Serial.println(boostkPa);
 Serial.print("Mbar :"); Serial.println(boostMbar);
 delay(1000);

 if (boostMbar <2200)
  {
    // tudo fechado
    analogWrite(comporta, 0);
    digitalWrite(admissao, LOW);
    digitalWrite(wastegate, LOW);
  }

  if (boostMbar >2200 && <2800)
  {
    // abre Comporta a meio
    analogWrite(comporta, 100);
    digitalWrite(admissao, LOW);
    digitalWrite(wastegate, LOW);
  }
  if (pressao  > 2800 && < 3000)
  {
    // abre comporta toda
    analogWrite(comporta, 255);
    digitalWrite(admissao, HIGH);
    digitalWrite(wastegate, LOW);
}
if (pressao >3000)
  {
    // abre wastegate
    analogWrite(comporta, 255);
    digitalWrite(admissao, HIGH);
    digitalWrite(wastegate, HIGH);


}
}

Tens nesse código vários problemas
  • Condições mal escritas.
    Nos IFs "if (boostMbar >2200 && <2800)" tens de meter a variável na segunda comparação. "<2800" só por si não significa nada. Tem de ser: "if (boostMbar >2200 && boostMbar<2800)".
    O mesmo nos outros Ifs.
  • Sendo uma aplicação muito sensível em termos de tempo, usar um delay() no loop vai-te encravar isso tudo. Durante 1 segundo o Arduino vai ficar parado sem fazer nada, nesse género de sistemas não podes dar-te a esse luxo. Pior ainda, meteste esse atraso entre a leitura do sensor MAP e a atuação das válvulas.
  • Devias considerar usar "elseif" nesse género de condições, dá-te mais garantias de que não tens sobreposições (entrar em dois ifs para o mesmo valor de entrada)
  • Por último, usar um Arduino para esse fim é completamente errado, a menos que se trate apenas de uma brincadeira/demonstração. Usar um arduino num sistema tão crítico num veículo que vá circular é para colocar em risco a tua vida e a de terceiros.

Offline cstefan

  • Mini Robot
  • *
  • Mensagens: 7
Re: controlador dois turbos
« Responder #2 em: 18 de Março de 2016, 12:18 »
A imagem bem inserida:


O teu código mais legível:
Código: [Seleccione]
#define sensorPin 0
int comporta = 13;
int admissao = 12;
int wastegate = 11;

void setup() {
 Serial.begin(9600);
 pinMode(comporta, OUTPUT);
 pinMode(admissao, OUTPUT);
 pinMode(wastegate, OUTPUT);
}


void loop() {
 int boostkPa = map(analogRead(sensorPin), 0, 1023, 50, 400);
 int boostMbar = boostkPa * 10 ; //Converts boostkPa to Mbar
 Serial.print("kPa :"); Serial.println(boostkPa);
 Serial.print("Mbar :"); Serial.println(boostMbar);
 delay(1000);

 if (boostMbar <2200)
  {
    // tudo fechado
    analogWrite(comporta, 0);
    digitalWrite(admissao, LOW);
    digitalWrite(wastegate, LOW);
  }

  if (boostMbar >2200 && <2800)
  {
    // abre Comporta a meio
    analogWrite(comporta, 100);
    digitalWrite(admissao, LOW);
    digitalWrite(wastegate, LOW);
  }
  if (pressao  > 2800 && < 3000)
  {
    // abre comporta toda
    analogWrite(comporta, 255);
    digitalWrite(admissao, HIGH);
    digitalWrite(wastegate, LOW);
}
if (pressao >3000)
  {
    // abre wastegate
    analogWrite(comporta, 255);
    digitalWrite(admissao, HIGH);
    digitalWrite(wastegate, HIGH);


}
}

Tens nesse código vários problemas
  • Condições mal escritas.
    Nos IFs "if (boostMbar >2200 && <2800)" tens de meter a variável na segunda comparação. "<2800" só por si não significa nada. Tem de ser: "if (boostMbar >2200 && boostMbar<2800)".
    O mesmo nos outros Ifs.
  • Sendo uma aplicação muito sensível em termos de tempo, usar um delay() no loop vai-te encravar isso tudo. Durante 1 segundo o Arduino vai ficar parado sem fazer nada, nesse género de sistemas não podes dar-te a esse luxo. Pior ainda, meteste esse atraso entre a leitura do sensor MAP e a atuação das válvulas.
  • Devias considerar usar "elseif" nesse género de condições, dá-te mais garantias de que não tens sobreposições (entrar em dois ifs para o mesmo valor de entrada)
  • Por último, usar um Arduino para esse fim é completamente errado, a menos que se trate apenas de uma brincadeira/demonstração. Usar um arduino num sistema tão crítico num veículo que vá circular é para colocar em risco a tua vida e a de terceiros.
obrigado :)e nesse caso no else if metia o que?o delay vou tirar apenas esta para uso de demostraçao, enquanto a velocidade e facto de ser um arduino nao existe problema nenhum, visto que a parte da "segurança" por assim dizer é programada na propria centralina do carro.

Online jm_araujo

  • Mini Robot
  • *
  • Mensagens: 2.947
  • NERD!
Re: controlador dois turbos
« Responder #3 em: 18 de Março de 2016, 12:39 »
obrigado :)e nesse caso no else if metia o que?o delay vou tirar apenas esta para uso de demostraçao, enquanto a velocidade e facto de ser um arduino nao existe problema nenhum, visto que a parte da "segurança" por assim dizer é programada na propria centralina do carro.

Tens muitos tutorials, manuais e vídeos na net que ensinam a programar e explicam os "elseif" e outros conceitos de programação, muito melhor do que eu sou capaz ou tenho paciência. Usa o google, com erros tão básicos que o teu código tem não te fazia mal nenhum perder umas horitas a aprender programação. O Arduino é C / C++ disfarçado, encontras mesmo carradas de material.

O problema do Arduino com a segurança não é a "velocidade". É mesmo que tem montes de código por trás escondido que não sabes o que está a fazer e nada te garante que não encrave, as saídas e entradas não tem qualquer tipo de proteção a todo o tipo de interferências nefastas que encontras num ambientes automóvel, e por aí fora.
"segurança" não são airbags e travões. Estás a mexer diretamente na admissão do motor, e um problemas/erro pode facilmente desligar-te o motor ou tornar irregular o seu funcionamente. Queres arriscar uma falha de motor quando fores numa autoestrada a 140 na faixa da esquerda a ultrapassar um camião? ou uma aceleração súbita a meio de uma curva num ambiente urbano? Não é só a tua vida que arriscas.
Explico-te de forma mais visual:
Conta os componentes aqui:

E conta os que estão aqui:


Porque achas que há uma diferença tão grande? dica: não é por causa de falta otimização de custos, no mundo automóvel tenta-se sempre fazer mais por menos.


Offline KammutierSpule

  • Mini Robot
  • *
  • Mensagens: 1.481
Re: controlador dois turbos
« Responder #4 em: 18 de Março de 2016, 12:47 »
E conta os que estão aqui:


Porque achas que há uma diferença tão grande? dica: não é por causa de falta otimização de custos, no mundo automóvel tenta-se sempre fazer mais por menos.

Ate faltam ali uns componentes pelo meio :P .. eh ir tirando ate isso parar de funcionar :O

Offline cstefan

  • Mini Robot
  • *
  • Mensagens: 7
Re: controlador dois turbos
« Responder #5 em: 18 de Março de 2016, 13:10 »
Quando me referi a segurança estava mesmo a falar da centralina do motor que mesmo não controlando os turbos consigo fazer bem à gestão de safe mods. Quantidade de gasóleo etc.., se funcionar como eu espero evolui se para uma pcb custom made com um arm ou coisa do género.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: controlador dois turbos
« Responder #6 em: 18 de Março de 2016, 13:28 »
E porque não ir para uma Megasquirt ou algo mais a sério e pensado já de raiz para ambiente automovel?
Avr fanboy

Offline cstefan

  • Mini Robot
  • *
  • Mensagens: 7
Re: controlador dois turbos
« Responder #7 em: 18 de Março de 2016, 13:56 »
Citar
E porque não ir para uma Megasquirt ou algo mais a sério e pensado já de raiz para ambiente automovel?
A megasquirt  é só para carros a gasolina, este é um 530d com o sistema biturbo OEM do 535d.. Hardware plug And play.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: controlador dois turbos
« Responder #8 em: 18 de Março de 2016, 19:53 »
Podes sempre aprender a programar o chip que está na megasquirt.
E a ideia é alterar o ponto de transição, ou fazer isso E fazer mais pressão?
Avr fanboy

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: controlador dois turbos
« Responder #9 em: 19 de Março de 2016, 01:36 »
Stefan, o que é que acontece se boostMbar = 2200 ou = 2800 ou = 3000?

Offline cstefan

  • Mini Robot
  • *
  • Mensagens: 7
Re: controlador dois turbos
« Responder #10 em: 19 de Março de 2016, 18:09 »
Stefan, o que é que acontece se boostMbar = 2200 ou = 2800 ou = 3000?
a 2200 abre a meio a 2800 toda e a 3000 abre a wastegate, terei que por nesse caso <= ou >= ?

Offline ivitro

  • Mini Robot
  • *
  • Mensagens: 451
Re: controlador dois turbos
« Responder #11 em: 19 de Março de 2016, 23:28 »
Olha isso é assim por steps?

Não tipo uma formula para isso em que depois fazer o controlo?

Offline cstefan

  • Mini Robot
  • *
  • Mensagens: 7
Re: controlador dois turbos
« Responder #12 em: 20 de Março de 2016, 17:45 »
Olha isso é assim por steps?

Não tipo uma formula para isso em que depois fazer o controlo?
boas, sim nesse caso como em vez de funcionar por rpm funciona por pressao pode ser por steps, agora estou na duvida se uso if ou case :/

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: controlador dois turbos
« Responder #13 em: 20 de Março de 2016, 21:51 »
Vais ter um tempo de reacção extremamente lento..
A fazer prints, e com um delay de 1 segundo a cada volta do "loop de controlo", a coisa será algo estranha de se conduzir.
Depois tens zero filtragem e condicionamento de sinal do que sensor que estás a ler, vais ter ruido e montes de oscilações.
Á a parte já referida dos > ou >=, porque tens valores de pressão que não produzem um resultado válido em qualquer um dos if's.
Entre if's e cases a coisa dá no mesmo.

Sim, é possivel usar um Arduino para o que queres fazer.
E se esse sensor de pressão for um extra não ligado a mais lado nenhum dificilmente atrofias assim tanto a centralina, mas podes á mesma ter comportamentos erráticos de tentar abrir e fechar qualquer uma dessas valvulas rapidamente, mas não muito, já que o delay de 1s tambem torna o controlo super lento a responder.
Mas terias de começar do zero, não depender de código de terceiros e adicionar alguma/muita protecção a nivel de hardware.
Dai eu ter falado em Megasquirt, ela trabalha onde tu bem quiseres, não é só para carros a gasolina.
Avr fanboy

Offline StrikerofDeath

  • Mini Robot
  • *
  • Mensagens: 104
Re: controlador dois turbos
« Responder #14 em: 20 de Março de 2016, 22:32 »
tudo dito acima... o arduino "serve" para o que queres (desde que consigas jogar com a centralina a evitar os safes quando a pressão real não for a pedida), mas o código não é o teu forte mesmo. ou passas por um processo de aprendizagem mais lendo ou pede alguém que te faça algo de raiz.

por curiosidade qual é a tua casa?