Arduino schakelt MOSFET of transistor


Ik heb een tweede ontwerp gemaakt.
Ik heb geprobeerd om de analoge signalen van de stroommeting langs zo weinig mogelijk schakelende banen te leiden.
Ook heb ik de AREF pin gebruikt, waar ik 2.5V op zet.
Als filter condensator gebruik ik een keramische, als weerstanden gebruik ik dikfilm weerstanden, behalve de shunt, dit is een metaalfilm.
De extra zekering wil ik niet op mijn PCB hebben, aangezien ik de PCB in een waterdichte behuizing wil hebben en die dan niet open hoef te maken.
Naar die schakelaars moet ik nog even kijken, daar heb ik de tijd nog niet voor gehad.
Ik heb de PCB 9.5x9.5 centimeter weten te krijgen. Misschien zou het nog kleiner kunnen, maar ik denk als dit ontwerp goed is, dat ik eerst dit uitprobeer. Ik heb ook nog niet zo veel ervaring met SMD solderen, dus iets meer extra ruimte is altijd handig. :)

Kijk dat ziet er al beter uit.
Wel had ik nog een hoe je de min van alle belastingen aan gaat verbinden. Want de vrijloopdiode heeft dat wel nodig voor zijn werking. En het zelfde geld voor je schakelaars.

En ik denk dat je voor het verbinden van de voeding naar je print kabeloog in combinatie met kartel ring. Alleen nu vroeg ik me af of je de clearance van je 12V connector wel ruim genoeg genomen is. Want anders kan/ gaat je kartel ring verbinding maken met je ground plane.

Ik zal nog een condensator plaatsen op de AREF en mogelijk ook op de lijn die je ingangspanning meet.

Ik wil alle belastingen en schakelaars via het frame van mijn brommer laten aarden.
Ik zit nog te twijfelen of ik ook de aarde naar de diodes op de PCB wil versterken met een dikke laag tin. Of dat de twee koperen grondlagen genoeg stroom aankunnen.
De voeding wil ik inderdaad op die manier verbinden. De connectie tussen het frame en de massa op de PCB wil ik verbinden dmv een schroef en een ring.
De formaten en clearances van de gaten van massa en voeding moet ik nog bekijken, doordat ik nog moet beslissen met wat voor schroeven ik alles wil verbinden.

Op 8 augustus 2018 17:41:26 schreef JelleB:
Ik wil alle belastingen en schakelaars via het frame van mijn brommer laten aarden.
Ik zit nog te twijfelen of ik ook de aarde naar de diodes op de PCB wil versterken met een dikke laag tin. Of dat de twee koperen grondlagen genoeg stroom aankunnen.

Je kan het ook zo doen, maar nu ik erover na denk wil dat niet denk ik. Aangezien alles aan de massa hangt.

Ik zal echter wel beter zijn om die voedings connectoren dichter bij de groot verbruikers te zetten. Aangezien er nu niet echt een directe pad naar de je massa in. Bijvoorbeeld van je bovenste MOSFET. En die, mogelijke lelijke, stromen bevat. Gaat dan over je volledige print heen.

Ik snap niet precies wat je bedoelt.
Bedoel je dat eventuele inductieve stromen van de GND linksonder over het hele board naar de MOSFET rechtboven moeten en hierdoor de boel verstoren?
Ik heb nu namelijk een tweede GND toegevoegd en deze met elkaar en de aarde van de vrijloopdiodes verbonden.
De inductieve stromen zullen nu wel over de analoge signalen van de stroommeting heen lopen, maar deze paar milliseconden dat dit gebeurt lijken mij niet erg.
De GNDs zullen tevens dienen als ophangpunten voor de PCB.
De condensatoren voor de AREF en de ingangspanning moet ik nog plaatsen.

Ik heb nog een vraag waar ik zelf niet uit kom.
Ik wil graag de massa en voeding connectoren "verzwaren" met een soort cilinder. Een voorbeeld is te zien op de foto hieronder.
Hierdoor kan ik zowel aan de onderkant als de bovenkant paden hier vanaf versterken met een laag tin en nog steeds een kabeloog gebruiken.
Ik vroeg me alleen af hoe dit normaal wordt gedaan.
Zou ik een koperen cilinder kunnen opwarmen met een soldeerbout. Een cilinder met een binnendiameter van een M5 bout en een buitendiameter zodat deze precies in de connector van de PCB past?
Ik hoop dat ik het zo goed heb uitgelegd.

Banaanchassisstukken werken, het lijkt me dat dat ook is wat op de foto staat.

Ik vind overigens de andere connectoren op de foto zeer charmant, heb je daar een referentie of webpagina van?

hoe beter de vraag geschreven, zoveel te meer kans op goed antwoord

Op 9 augustus 2018 16:44:32 schreef JelleB:
Bedoel je dat eventuele inductieve stromen van de GND linksonder over het hele board naar de MOSFET rechtboven moeten en hierdoor de boel verstoren?

De inductieve stromen zullen nu wel over de analoge signalen van de stroommeting heen lopen, maar deze paar milliseconden dat dit gebeurt lijken mij niet erg.

Daar komt komt het wel op neer ja. De stroom "zoekt" de makkelijkste weg om daar te komen. Dus het kan zijn dat die print spoor op die plek te klein is. En ik zal de bovenste ground verbinding weg halen.

Zolang de banen haaks op elkaar staan gebeurt er niet heel veel. Het is erger als ze parallel lopen aan elkaar.

Op 10 augustus 2018 15:01:23 schreef JelleB:
Ik heb nog een vraag waar ik zelf niet uit kom.

Oke, ik denk dat ik weet wat je bedoeld. Je bent op zoek naar dit of naar dit soort connectoren.
Hier staan meer van dat soort connectoren.

Op 10 augustus 2018 15:21:39 schreef big_fat_mama:
Ik vind overigens de andere connectoren op de foto zeer charmant, heb je daar een referentie of webpagina van?

Dit heet de MotoGadget M-unit blue.
https://motogadget.com/shop/en/m-unit-blue.html

Waarom zou ik de bovenste ground weghalen? Zo is de kans op een goede aarde alleen groter toch?
Die connector is inderdaad de gene die ik bedoel. Alleen ik denk dat de koperen laag tussen de onderste en de bovenste laag van de PCB de stroom niet aan kan, dus zal dit ook verzwaard moeten worden.

Op 10 augustus 2018 15:21:39 schreef big_fat_mama:
Ik vind overigens de andere connectoren op de foto zeer charmant, heb je daar een referentie of webpagina van?

Ze lijken wel op deze Wago picoMAX serie. En ik zie ook "wago" op een van die foto's staan :)

Op 10 augustus 2018 15:52:26 schreef JelleB:
Waarom zou ik de bovenste ground weghalen? Zo is de kans op een goede aarde alleen groter toch?

Volgens mij kan er nu een spanning verschil ontstaan tussen beide ground pinnen en dat is niet echt wenselijk.

Op 10 augustus 2018 15:52:26 schreef JelleB:
Alleen ik denk dat de koperen laag tussen de onderste en de bovenste laag van de PCB de stroom niet aan kan, dus zal dit ook verzwaard moeten worden.

Ik snap niet geheel wat je hier bedoeld. En over het algemeen staat er wel in de datasheet van de (gekozen) connector waar je PCB aan moet voldoen.

Op 10 augustus 2018 16:02:40 schreef Brandon:
Ik snap niet geheel wat je hier bedoeld. En over het algemeen staat er wel in de datasheet van de (gekozen) connector waar je PCB aan moet voldoen.

Sorry ik had hier een denkfout gemaakt.

Ik zat te kijken naar een goedkope PCB fabrikant die prototype PCBs kan maken. In het programma EasyEDA wat ik gebruik hebben ze een fabrikant in Amerika die 10 prototype PCBs kan maken voor ongeveer 15 euro. Alleen hier komen dan weer 25 euro verzendkosten overheen.
Zijn er in Nederland ook zulke goedkope PCB fabrikanten? Ik kan niks vinden.
Of kan ik zelf prototypes maken voor minder geld? Kunnen deze wel zulke goede kwaliteit hebben dat ze zulke kleine SMD componenten aan kunnen?

Voor een pcb fabrikant kun je in deze topic kijken. Ik heb alleen ervaring met eurocircuits.
Je kunt ze zelf ook maken, echter moet je al het apperatuur aanschaven om dat voor elkaar te krijgen. En ze worden nooit zo 'mooi' dan als je ze besteld.

Op 26 juli 2018 12:48:58 schreef Lambiek:
Er zijn trouwens ook geschakelde regelaars, die worden een heel stuk minder warm en ze hebben de zelfde steek als de 78Sxx types. Misschien is dat nog een optie voor je. :)

Wat voor geschakelde regelaar heeft dezelfde steek als de 78Sxx types?
De geschakelde regelaars die ik vind hebben of 5 pinnen en hebben allemaal minimaal een extra diode en spoel nodig.

Lambiek

Special Member

Kijk hier eens tussen.

https://nl.rs-online.com/web/c/power-supplies-transformers/d...mp;rpp=100

Je kunt ook bij andere leveranciers kijken, bijv. bij Reichelt, Conrad, enz.

Als je haar maar goed zit, GROETEN LAMBIEK.
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Lambiek

Special Member

Hé rew. Als dat zo is heb ik het verkeerd gelezen of begrepen denk. :)

Als je haar maar goed zit, GROETEN LAMBIEK.

Beste leden,

Ik heb sinds vorige keer erg veel vooruitgang gemaakt.
Het vorige ontwerp is een succes geworden, maar na er te veel van te hebben gevraagd is de PCB helaas doorgebrand.
Na het succes heb ik besloten ermee door te gaan en een nieuw ontwerp te maken die kleiner is en meer uitgangen heeft.
Ik heb daarom besloten om alles helemaal opnieuw te ontwerpen zodat ik veel tips van jullie mee zou kunnen nemen in het nieuwe ontwerp.

Veranderingen zijn:
- Ipv een arduino gebruik ik nu een ATMEGA2560 met arduino bootloader.
Deze heeft namelijk meer uitgangen en is sneller.
- Ik heb BLE en een accelerometer toegevoegd. Ik gebruik hiervoor een HM-10 en een ADXL335
- Ipv de TO220 behuizingen voor de P-MOSFETS gebruik ik nu TO262-3 behuizingen ivm hoogte
- Ik ga wel een schakelende spanningsregelaar gebruiken, maar ga deze zelf maken ivm ruimte. Erg bedankt voor de tips, maar ik besluit de TO220 behuizing over te slaan ivm hoogte.

Wat denken jullie er van?

Het schema staat hier:
https://easyeda.com/JelleBezemer/arduino-motorcycle-computer
Een relevante pagina staat hier:
https://www.circuitsonline.net/forum/view/142899

Mvg, Jelle

Na nog veel aanpassingen zijn de nieuwe PCBs besteld.
Het zal nog een prototype worden om te kijken alles werkt zoals ik wil. De uiteindelijke versie zal kleiner worden.

Sinds de eerste versie heb ik bluetooth en een accelerometer toegevoegd.
Zoals eerder gezegd wordt de module op een brommer geplaatst, waardoor er door de bluetooth bijvoorbeeld geen sleutel meer hoeft te worden gebruikt en de accelerometer functies mogelijk maakt, zoals het automatisch uitschakelen van de knipperlichten na een bocht.

Het eerste wat nu moet blijken is of de hardware het goed doet. Daarna zal ik eerst een basisprogramma schrijven met remlicht, knipperlicht etc.

Daarna kunnen andere functies bedacht worden, zoals bijvoorbeeld een alarm dat af gaat als de brommer beweegt, je telefoon die als dashboard display kan dienen en nog veel meer.

Nu eerst maar wachten tot de printplaten binnenkomen.

Mvg, Jelle

Denken jullie dat de stroommeting dmv de INA193 snel genoeg is om bij kortsluiting de mosfet zo snel uit te schakelen dat er geen schade is? Hoe lang kunnen componenten zulke stromen aan? Naar mijn idee zal er bij kortsluiting namelijk toch zeker zo'n 200A doorheen lopen.
De stroommeting zal prioriteit hebben in de code, dus deze zal elke keer zo snel mogelijk af worden gelezen.

Mvg, Jelle

Nee, niet van uit gaan, feedback via een A/D converter is te traag en niet voorspelbaar genoeg om van uit te gaan. Er zit bovendien maar een enkele A/D in zo een ATMega met een multiplexer, dus de coversieperiode moet je nog eens vermenigvuldigen met het aantal kanalen dat je hebt. En dan ga ik er nog van uit dat je A/D continu coverteert, maar ik heb je software niet bekeken.

Dit is de code tot nu toe. Het is alleen nog een basisprogramma om de mosfets aan te sturen en ze uit te schakelen als de stroom te hoog is.
Ik moet nog op de printplaten wachten, dus ik heb de code nog niet uit kunnen proberen.

code:


// inputs
// aux1 light brake turnl turnr horn key
int inputs[] = {44, 43, 39, 38, 37, 36, 35};

// outputs
// aux2 aux1 lbeam hbeam brake turnl turnr horn
int outputs[] = {15, 16, 17, 18, 23, 24, 25, 26};

// signals
// aux2 aux1 lbeam hbeam brake turnl turnr horn
int signals[] = {97, 96, 95, 94, 93, 92, 91, 90};

void setup() {
  Serial.begin(9600);
  //analogReference(external);
  
  // inputs
  for(int i=0; i<7; i++){
    pinMode(inputs[i], INPUT);
  }
  
  // outputs
  for(int i=0; i<8, i++){
    pinMode(outputs[i], OUTPUT);
    digitalWrite(outputs[i], LOW);
  }
  
  // signals
  for(int i=0; i<8, i++){
    pinMode(signals[i], INPUT);
  }
  
  // aux2, aux1, lbeam, hbeam, brake, turnl, turnr, horn
  int outputs_on[8] = {0,0,0,0,0,0,0,0};
  int errors_outputs[] = {0,0,0,0,0,0,0,0};
  
  double batteryvoltage;
  
  unsigned long timer_turnl = 0;
  unsigned long timer_turnr = 0;
  char turnl_type = "default";
  char turnr_type = "fade";
  int brightness_turnl = 0;
  int brigtness_turnr = 0;
  int fadeamount = 5;
  int fadespeed = 100;
}

void loop() {
  if(digitalRead(inputs[6]) == LOW && key_on == false){
    errors_outputs = new int[]{};
    key_on = true;
  }else if(digitalRead(inputs[6] == LOW) && key_on = true){
    // run as normal
  }else if (digitalRead(inputs[6] == HIGH) && key_on == true){
    key_on = false;
  }else{
    // limited features like alarm
  }
  
  // over voltage
  batteryvoltage = analogRead(84);
  if(batteryvoltage > 546){// 16V-5V, (819/16V-3.3V)
    digitalWrite(outputs[7], HIGH);
    outputs_on[7] = 1;
  }else if(batteryvoltage < 546 && outputs_on[7] == 1 && digitalRead(inputs[5]) == HIGH){
    digitalWrite(outputs[7], LOW);
    outputs_on[7] = 0;
  }
  
  // overcurrent
  for(int x=0; x<8; x++){
    if(outputs_on[x] == 1){
	    // check if current is too high
	    if(analogRead(signals[x]) > 307){ // 7.5A-5V
	      // turn off output
	      digitalWrite(outputs[x], LOW);
	      outputs_on[x] = 0;
	      errors_outputs[x] = 1;
	    }
    }
  }
  
  // licht aan
  if(digitalRead(inputs[1]) == LOW && outputs_on[2] == 0 && errors_output[2] == 0 && errors_output[3] == 0){
    digitalWrite(outputs[2]) = HIGH;
    outputs_on[2] = 1;
  }else if(digitalRead(inputs[1]) == HIGH && outputs_on[2] == 1){
    digitalWrite(outputs[2], LOW);
    outputs_on[2] = 0;
  }
  
  // remlicht aan
  if(digitalRead(inputs[2]) == LOW && outputs_on[4] == 0 && errors_outputs[4] == 0){
    digitalWrite(outputs[4]) = HIGH;
  }else if(digitalRead(inputs[2]) == HIGH && outputs_on[4] == 1){
    digitalWrite(outputs[4], LOW);
    outputs_on[4] = 0;
  }
  
  // toeter aan 
  if(digitalRead(inputs[5]) == LOW && outputs_on[7] == 0 && errors_outputs[7] == 0){
    digitalWrite(outputs[7]) = HIGH;
  }else if(digitalRead(inputs[5]) == HIGH && outputs_on[7] == 1){
    digitalWrite(outputs[7], LOW);
    outputs_on[7] = 0;
  }
  
  // rechter knipperlicht aan
  switch(turnr_type){
    case "fade":
      if(digitalRead(inputs[4]) == LOW && errors_outputs[6] == 0){
        timer_turnl = millis();
        brightness = brightness + fadeamount;
        analogWrite(outputs[6], brightness);
        outputs_on[6] = 1;
      }else if(digitalRead(inputs[4]) == HIGH && outputs_on[6] == 1){
        digitalWrite(outputs[6], LOW);
        outputs_on[6] = 0;
        brightness = 0;
      }
    break;
    case "default":
      if(digitalRead(inputs[4]) == LOW && errors_outputs[6] == 0){
        if(outputs_on[6] == 0 || timer_turnr == 0){ // aan als je klikt
          timer_turnr = millis();
          digitalWrite(outputs[6], HIGH);
          outputs_on[6] = 1;
        }else if(outputs_on[6] == 1 || timer_turnr - millis() > 1000){ // uit na een seconde
          timer_turnr = millis();
          digitalWrite(outputs[6], LOW);
          outputs_on[6] = 0;
        }else if(outputs_on[6] == 0 || timer_turnr - millis() > 1000){ // aan na een seconde
          timer_turnr = millis();
          digitalWrite(outputs[6], HIGH);
          outputs_on[6] = 1;
        }
      }else if(digitalRead(inputs[4]) == HIGH && outputs_on[6] == 1){
        digitalWrite(outputs[6], LOW);
        outputs_on[6] = 0;
        timer_turnr = 0;
      }else if(digitalRead(inputs[4]) == HIGH && timer_turnr =!0){
        timer_turnr = 0;
      }
    break;
  }
  
  
// linker knipperlicht aan 
  switch(turnl_type){
    case "fade":
      if(digitalRead(inputs[3]) == LOW && errors_outputs[5] == 0){
        timer_turnl = millis();
        brightness = brightness + fadeamount;
        analogWrite(outputs[5], brightness);
        outputs_on[5] = 1;
      }else if(digitalRead(inputs[3]) == HIGH && outputs_on[5] == 1){
        digitalWrite(outputs[5], LOW);
        outputs_on[5] = 0;
        brightness = 0;
      }
    break;
    case "default":
      if(digitalRead(inputs[3]) == LOW && errors_outputs[5] == 0){
        if(outputs_on[5] == 0 || timer_turnl == 0){ // aan als je klikt
          timer_turnl = millis();
          digitalWrite(outputs[5], HIGH);
          outputs_on[5] = 1;
        }else if(outputs_on[5] == 1 || timer_turnl - millis() > 1000){ // uit na een seconde
          timer_turnl = millis();
          digitalWrite(outputs[5], LOW);
          outputs_on[5] = 0;
        }else if(outputs_on[5] == 0 || timer_turnl - millis() > 1000){ // aan na een seconde
          timer_turnl = millis();
          digitalWrite(outputs[5], HIGH);
          outputs_on[5] = 1;
        }
      }else if(digitalRead(inputs[3]) == HIGH && outputs_on[5] == 1){
        digitalWrite(outputs[5], LOW);
        outputs_on[5] = 0;
        timer_turn1 = 0;
      }else if(digitalRead(inputs[3]) == HIGH && timer_turnl =!0){
        timer_turnl = 0;
      }
    break;
  }

Een tijdje geleden sinds de vorige update.
In deze tijd heb ik grote vooruitgang geboekt.
Het kostte veel moeite om de atmega 2560 werkend te krijgen. Ik had losse chips besteld van AliExpress die compleet leeg waren en dit bleek een grote uitdaging.
Het is nu allemaal gelukt en op het filmpje is een korte demo te zien, slechts om het hardware gedeelte te testen. En het werkt!!!
Te zien is een momentschakelaar die als een permanente schakelaar werkt. Deze laat een led vervagen. Twee functies dus die op een normale brommer onmogelijk zijn.
https://www.youtube.com/watch?v=N5m-gLlfkrU

Mochten nog mensen dit lezen.
Nog meer vooruitgang!
Alles op de PCB werkt nu. Ik heb alles samen proberen te voegen door een kleine app te maken met Blynk. Via Bluetooth kan je iets aansturen tot 7,5A. De stroom die werkelijk wordt gebruikt is ook te zien in de app.
Op een brommer kan je zo makkelijk alles bijhouden zoals bijvoorbeeld of lampen zijn doorgebrand zoals op de derde foto.

Lambiek

Special Member

Leuk dat je nog iets laat horen en zien. :)

Als je haar maar goed zit, GROETEN LAMBIEK.