Arduino schakelt MOSFET of transistor

Lambiek

Special Member

En anders een koellichaam op je print erbij zetten straks. 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. :)

Als je haar maar goed zit, GROETEN LAMBIEK.

De thermometer gaf rond de 60 graden aan, dus dat valt dan nog wel mee als ik dit hoor, vooral met deze hitte buiten.
Ik probeer eest of het met deze spanningsregelaar gaat lukken, maar een geschakelde regelaar zou misschien nog wat zijn voor in de toekomst.
Wat bedoel je met steek? Bedoel je dit als in behuizingsoort?
Bedankt voor je scherpe blik Brandon, ik heb nu inderdaad de arduino al op de 5V van de 7805 staan, ik had dit eerst niet zodat ik een beetje met code kon spelen.
Ook heb ik de IN193 op de 5V gezet, niet met de reden van onstabiliteit, maar omdat hij anders misschien een te hoge spanning voor de ingang van de arduino zou geven. Nu kan hij sowieso maximaal 5V afgeven, waardoor dit niet kan gebeuren.

Lambiek

Special Member

Op 26 juli 2018 13:49:53 schreef JelleB:
De thermometer gaf rond de 60 graden aan, dus dat valt dan nog wel mee als ik dit hoor, vooral met deze hitte buiten.

Als het goed is stopt de regelaar er ook mee als deze te warm wordt.
Zelf gebruik ik vaak de 78S05, 78S12, of de 78S24, die zijn net even beter vindt ik.

Wat bedoel je met steek? Bedoel je dit als in behuizingsoort?

Steek, rastermaat. Dat is de ruimte tussen de pootjes, bij dit type is dat 2.54mm. En bij een geschakeld type is dat het zelfde. Dus als je een print gemaakt heb kun je die altijd nog uitwisselen.

Als je haar maar goed zit, GROETEN LAMBIEK.

Ik ga dan ook de 78S05 proberen, als deze beter is.
Het hele prototype heb ik trouwens een beetje opgeruimd, zag er behoorlijk rommelig uit.
De stroommeter kan ik pas uitproberen als ik de PCB heb gemaakt, aangezien dit een SMD component is.
Ik ga nu aan de slag met een PCB ontwerpen.
Deze zal 5 schakelaars en 5 uitgangen hebben (licht, knipperlichten, remlicht en toeter).

Lambiek

Special Member

Op 26 juli 2018 14:11:49 schreef JelleB:
Ik ga dan ook de 78S05 proberen, als deze beter is.

Als je de datasheets van beide regelaars er bij pakt, kun je de verschillen zien.

Ik ga nu aan de slag met een PCB ontwerpen.

Ben benieuwd, succes in ieder geval. :)

Als je haar maar goed zit, GROETEN LAMBIEK.

Op 26 juli 2018 13:49:53 schreef JelleB:
...maar omdat hij anders misschien een te hoge spanning voor de ingang van de arduino zou geven. Nu kan hij sowieso maximaal 5V afgeven, waardoor dit niet kan gebeuren.

Graag gedaan. Klopt, daarom bracht ik dit ook even naar voren.

Op 26 juli 2018 14:11:49 schreef JelleB:
De stroommeter kan ik pas uitproberen als ik de PCB heb gemaakt, aangezien dit een SMD component is.[bijlage]

Als je het wel wilt gaan testen kan je ook van die adapter printjes gebruiken, zoals dit.

Had je trouwens in je ontwerp ook al nagedacht om het een en andere te beschermen. Door bijvoorbeeld een zekering? Of had je dat al getekend?

Ik ga dan zo’n adapterprintje erbij kopen zodat ik zeker weet dat het hele schema werkt.
Zekeringen zal ik er voor de zekerheid extern bij zetten, maar intern wordt dit geregeld door de stroom metingen, die de toevoer tot een component uitschakelen als die boven een bepaalde waarde komt.
Ik vroeg me alleen nog af of ik voor de shunt resistor ook een SMD component kan nemen van bijvoorbeeld 2 Watt. Bij 10 ampère, met 0.01 Ohm zou dat maar 1 Watt zijn. Of werkt dit niet zo?

Hallo,

Je kan inderdaad een SMD current sense weerstand gebruiken. Zolang hij zijn warmte maar kwijt kan. En je hebt inderdaad minimaal 1 Watt weerstand nodig, maar meer is goed.
Ik had nog even naar de datasheet van de INA193 gekeken. Hoe nauwkeurig wil je je stroom kunnen meten? Bij de lage "stromen" wordt hij namelijk wat minder nauwkeurig, zie "Figure 5. Output Error vs VSENSE" in de datasheet.
En wanneer je met je lay-out begint moet je goed kijken naar de voorbeeld die ze noemen in de datasheet.

Ik hoef mijn stroom niet zo nauwkeurig te meten. Het is vooral bedoeld als elektronische zekering bij de hoge voltages.
Ik heb op dit moment alles aangesloten, inclusief stroommeter. Hij geeft echter alleen nog maar waardes rond de 5V op de analoge pin van de arduino, terwijl ik er nu een ventilator op heb die 0.2 ampere zou moeten gebruiken.
Mijn berekening geeft met een voltage drop van 0.2A*0.01Ohm=0.002V en een gain van 100, een spanning van 0.2 op de analoge ingang. Hoe zou het komen dat dit veel hoger is?
Inderdaad is er door de lage stroom een grote onnauwkeurigheid, maar hij geeft wel constante waardes rond de 900 "punten" op de arduino ingang.

Waarschijnlijk heb je iets verkeerd gedaan in het schema. Voor de mensen die geen zin hebben om de heel historie te gaan doorpluizen met verouderde schemas die het uiteindelijk niet geworden zijn is het handig om even de huidige opstelling te tekenen.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Lambiek

Special Member

Op 1 augustus 2018 21:17:42 schreef JelleB:
Ik hoef mijn stroom niet zo nauwkeurig te meten. Het is vooral bedoeld als elektronische zekering bij de hoge voltages.
Ik heb op dit moment alles aangesloten, inclusief stroommeter. Hij geeft echter alleen nog maar waardes rond de 5V op de analoge pin van de arduino, terwijl ik er nu een ventilator op heb die 0.2 ampere zou moeten gebruiken.

Als de waarde 900 is, zit je dus rond de 4.4V. Klopt dat?

Mijn berekening geeft met een voltage drop van 0.2A*0.01Ohm=0.002V en een gain van 100, een spanning van 0.2 op de analoge ingang. Hoe zou het komen dat dit veel hoger is?

Hoe heb je de versterking gedaan?

Als je haar maar goed zit, GROETEN LAMBIEK.

Op 1 augustus 2018 21:17:42 schreef JelleB:
-- gain van 100, een spanning van 0.2 op de analoge ingang. --.

Je gebruikt nu dus een INA195, aangezien daarvan de gain 100 is. En niet je oorspronkelijke INA193, waarvan de gian 20 is?

Lambiek

Special Member

Op 2 augustus 2018 11:10:50 schreef Brandon:
Je gebruikt nu dus een INA195, aangezien daarvan de gain 100 is. En niet je oorspronkelijke INA193, waarvan de gian 20 is?

Er staat een INA193 in zijn laatste schema, daar zou de gain 20 van zijn.

0.2A X 0.01Ohm = 0.002V X 20 = 0.04V, daar mee kun je dus nooit aan de bijna aan de 5V komen.

0.2A X 0.01Ohm = 0.002V X 100 = 0.2V, en dat zou de TS moeten meten/zien met zijn arduino.

Dus wat er fout gaat weet ik niet, maar iets klopt er niet.

Dus plaats een schema.

Als je haar maar goed zit, GROETEN LAMBIEK.

Sorry, ik heb de datasheet verkeerd gelezen, ik dacht dat de versterking 100 was.
Ik gebruik de INA193, dus de versterking is dan 20.
Ik heb “filter weerstanden” van 50 Ohm gebruikt, zoals aanbevolen in de datasheet.
De 900 zijn inderdaad 4.4 Volt.
Ik zal zo even het huidige schema sturen.

Lambiek

Special Member

Dan moet er dus dit uitkomen (0.2A X 0.01Ohm = 0.002V X 20 = 0.04V) en geen 4.4V zoals je zegt.

Is je voeding stabiel, en waar voed je de INA193 mee?

Als je haar maar goed zit, GROETEN LAMBIEK.

En hoe ziet je code er trouwens uit?

De voeding van de 12V zowel als de 5V is stabiel.
De code is simpel, ziet er zo uit.

c code:


int button = 12;
int led = 5;

void setup() {
  
  // initialize serial communication at 9600 bits per second:
  
  Serial.begin(9600);
  
  pinMode(button, INPUT);
  pinMode(led, OUTPUT);
  
}

void loop(){
  digitalWrite(led, HIGH);
  int sensorValue = analogRead(A1);
  // print out the value you read:
  Serial.println(sensorValue);
  delay(1000);
}

Lambiek

Special Member

Heb je de spanningsval over je shunt al eens gemeten, en hoeveel is die?

Is je shunt wel 0.01 Ohm?

En moet je in de software het aantal bits niet opgeven voor je A/D converter? Ik ken die Arduino dingen niet zo.

Als je haar maar goed zit, GROETEN LAMBIEK.

Klopt het dat je in je code de MOSFET niet bestuurd? Aangezien je in het schema pin 10 gebruikt en in je software pin 5.
Verder klopt de code functioneel wel.

Hoe heb je het opgebouwd. Met name het gedeelte rondom je INA193, foto?

De shunt is precies 0.01 Ohm en de spanningsval is 0.0017V. Alles precies zoals het hoort dus.
Foto’s zijn foto’s van hoe het eruit ziet.
Het probleem is al opgelost, het betrof een slecht aangesloten ground van de INA193, waardoor alle uitgangen op 5V bleven staan.

Lambiek

Special Member

Dus nu krijg je de juiste waarde?

Als je haar maar goed zit, GROETEN LAMBIEK.

Kijk dat is mooi om te horen. Let wel op dat de lange sense draden je meting kunnen nadelig kunnen beïnvloeden. Als je een redelijke belasting aan je schakeling hangt. Let dan wel even op of die dunne draadjes die belasting aan kan, zodat je daarin niet al te veel verliest.

Ik zat nog te denken dat je nog een aantal componenten aan je schakeling toevoegt. Je maximale spanning dat uit je INA193 zal rond de 2V, als ik zo snel na de datasheet kijkt. Dit betekent dat je nu ruim 3V aan resolutie weg gooit van je 10bit ADC en dat is zonder.
Dus 1bit van je ADC (sensorValue) vertegenwoordigt (maar) 4.88mV. Als je nu een andere referentie spanning aanbied aan de AREF pin van je arduino, plus de code wat hier bij hoort. Dan kan je je nauwkeurigheid vergroten. Bijvoorbeeld: Als je 2V op de AREF aanbied, mitst je uitgang van je INA193 daar niet boven komt. Dan vertegenwoordigt 1bit van je ADC ineens 1.92mV.

Op 2 augustus 2018 22:28:40 schreef Brandon:
Als je nu een andere referentie spanning aanbied aan de AREF pin van je arduino,

Ik weet niet zeker of dat zomaar kan. De CPU van de arduino heeft een analoge switch tussen de interne reference, en AREF alsmede tussen 5V en AREF. Als de arduino software standaard die laatste aanzet en jij forceert die AREF pin op 2.0V kan het zijn dat je die schakelaar opblaast. Dan kan je je voornemen om dat niet te doen, maar ik kan me goed voorstellen dat de arduino software dat helemaal vanzelf WEL doet.....

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

@rew
Je kunt inderdaad niet zomaar een andere spanning aanbieden aan die pin. Daarvoor moet je eerst een regeltje code toevoegen.

Bijvoorbeeld:

c code:

analogReference(EXTERNAL)

Daar zal ik later nog even naar kijken, wat ik natuurlijk ook kan doen is een current sensor nemen met een hogere versterking. Op dit moment neem ik het gemiddelde van 10 metingen, om de precisie te verhogen.
https://youtu.be/UFuvfiqyBqs

c code:


int button = 12;
int led = 5;

const int numReadings = 10;

float readings[numReadings];      // the readings from the analog input
int readIndex = 0;              // the index of the current reading
float total = 0;                  // the running total
float average = 0;                // the average

void setup() {
  
  // initialize serial communication at 9600 bits per second:
  
  Serial.begin(9600);
  
  pinMode(button, INPUT);
  pinMode(led, OUTPUT);
  digitalWrite(led, HIGH);
  
  for (int thisReading = 0; thisReading < numReadings; thisReading++) {
    readings[thisReading] = 0;
  }
  
}

void loop(){
  int buttonState = digitalRead(button);
  int sensorValue = analogRead(A0)
  float voltage = sensorValue * (5.0 / 1023.0);
  float current = (voltage/20)/0.01;
  
  total = total - readings[readIndex];
  // read from the sensor:
  readings[readIndex] = current;
  // add the reading to the total:
  total = total + readings[readIndex];
  // advance to the next position in the array:
  readIndex = readIndex + 1;

  // if we're at the end of the array...
  if (readIndex >= numReadings) {
    // ...wrap around to the beginning:
    readIndex = 0;
  }

  // calculate the average:
  average = total / numReadings;
  Serial.println(average);
  if(current > 1.5){
    digitalWrite(led, LOW);
  }else{
    digitalWrite(led, HIGH);
  }
  delay(500);
}