Auteur Topic: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.  (gelezen 35213 keer)

0 leden en 1 gast bekijken dit topic.

Offline Pierre

  • Super Modelspoorder
  • ******
  • Berichten: 7.918
  • Thanked: 334 times
  • Geslacht: Man
  • Woonplaats: Den Haag (Loosduinen)
    • Haagse Modelbouw Club
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #25 Gepost op: 17 juli 2018, 09:53:17 »
Ik ga er eens mee aan de slag Rob. Dank je wel. Ik hou je op de hoogte. ;)


@Pierre, ga je ook zelf met de software 'oan de geng' na verloop van tijd of laat je dat over aan de programmeurs?

Ik weet het nog niet Jack maar ik denk dat ik dat helemaal niet zo boeiend vind en het lekker overlaat aan de echt handige jongens zoals Rob. Ik leun daar wel een beetje op. ;D Eerst maar eens even kijken wat ik hier van bak. Dit is voor mij volkomen nieuw.
Groet Pierre.

Ik rommel wat met treintjes en bouwwerkjes in H0 (H0e) en ook een klein beetje in N  .... Scratchbuilding, kitbashing en weathering.  ;D Lid van de http://haagsemodelbouwclub.nl/

Offline Pierre

  • Super Modelspoorder
  • ******
  • Berichten: 7.918
  • Thanked: 334 times
  • Geslacht: Man
  • Woonplaats: Den Haag (Loosduinen)
    • Haagse Modelbouw Club
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #26 Gepost op: 17 juli 2018, 19:47:34 »
Ik heb vandaag toch nog even een testopstelling gemaakt met een rollenbankje Rob. Dat werkt net even makkelijker dan op mijn baan.



 Ook de Arduino aangesloten en de waarde gemeten. Als het locje net gaat rijden geeft hij aan pulsbreedte 100% - 611.   Bij "max" snelheid  100% - 2900.

Wat moet ik hier mee? :-\
Groet Pierre.

Ik rommel wat met treintjes en bouwwerkjes in H0 (H0e) en ook een klein beetje in N  .... Scratchbuilding, kitbashing en weathering.  ;D Lid van de http://haagsemodelbouwclub.nl/

Offline Rob

  • Forumbeheerder
  • Super Modelspoorder
  • *****
  • Berichten: 2.743
  • Thanked: 161 times
  • Geslacht: Man
  • Rob zegt: denk aan morgen, doe vandaag.
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #27 Gepost op: 17 juli 2018, 20:29:58 »
Hoi Pierre,

Ik denk dat de spanningsdelers nog niet goed zijn ingeregeld. Ik vermoed dat de spanning van je pulsbreedte hoger is dan 16V...
Als dat zo is dan kan de Arduino de "geen spanning" niet goed meten.
Kun je een voltmeter op de ingangsspanning zetten bij voluit?

Ik vermoed dat de frequentie rond de 3000Hz zit en dat de loc bij 20% pulsbreedte gaat rijden. Nu alleen nog kijken hoe we dat kunnen meten. Je zou kunnen proberen de 470 ohm weerstanden te vergroten tot bijvoorbeeld 1k ohm.
Heb je bij voor- en achteruit hetzelfde resultaat?

Rob
Ergens in (West) Duitsland tussen 1960 en 1970 | gelijkstroom analoog, met geluid | kleine vaste baan en uitbreiding met modulebaan.
Nu vooral bezig met van alles en nog wat...

Offline Pierre

  • Super Modelspoorder
  • ******
  • Berichten: 7.918
  • Thanked: 334 times
  • Geslacht: Man
  • Woonplaats: Den Haag (Loosduinen)
    • Haagse Modelbouw Club
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #28 Gepost op: 17 juli 2018, 21:08:53 »
Je hebt gelijk Rob. De ingangsspanning is bijna 17 volt. Ik zal morgen nog eens een poging wagen met een 13V trafo. Als het goed is moet daar de pulsbreedte voeding ook nog net op werken. Ook de weerstanden neem ik wat hoger.
Groet Pierre.

Ik rommel wat met treintjes en bouwwerkjes in H0 (H0e) en ook een klein beetje in N  .... Scratchbuilding, kitbashing en weathering.  ;D Lid van de http://haagsemodelbouwclub.nl/

Offline Wim Corduwener

  • Forumbeheerder
  • Super Modelspoorder
  • *****
  • Berichten: 10.844
  • Thanked: 300 times
  • Geslacht: Man
  • Enschede (import)
    • Portfolio
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #29 Gepost op: 18 juli 2018, 09:55:48 »
Ondanks dat deze materie ver buiten mijn bevattingsvermogen gaat lees ik toch mee en heb ik een vraagje zodat ik ook meteen weet of ik er ook maar iets van begrijp: een MSF-trafo van bijvoorbeeld Fleischmann, is dat een transformator met pulsbreedtemodulatie waar jullie het hier over hebben?
Trefwoorden:  Mac • Modulebouw • H0, H0e en 0e • Tijdperk III (1950-1960) • Nederlands (H0 en H0e) • Frans (1:45) • Gelijkstroom • Twee rails • Voorlopig nog even analoog • Scratchbuilding en Kitbutchering... en ik maak eigenlijk nooit wat af.

Meest recente projecten: Frans diorama 2.0 (Spoor 0e) en Verbouwing Magic Train (schaal 0e)

Offline Pierre

  • Super Modelspoorder
  • ******
  • Berichten: 7.918
  • Thanked: 334 times
  • Geslacht: Man
  • Woonplaats: Den Haag (Loosduinen)
    • Haagse Modelbouw Club
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #30 Gepost op: 18 juli 2018, 10:42:07 »
Ondanks dat deze materie ver buiten mijn bevattingsvermogen gaat lees ik toch mee en heb ik een vraagje zodat ik ook meteen weet of ik er ook maar iets van begrijp: een MSF-trafo van bijvoorbeeld Fleischmann, is dat een transformator met pulsbreedtemodulatie waar jullie het hier over hebben?

Ik zou je hier geen antwoord op kunnen geven Wim.




Rob,
Ik heb de twee weerstanden vergroot naar 1K. De voeding heb ik teruggebracht naar 13V maar het werkt nog steeds niet lekker.

Als ik (hulpmiddelen - Seriële monitor) start dat geeft hij inderdaad aan Geluidsmodule gestart en dat er gewacht wordt op een herkenbaar signaal. Als ik nu aan de draaiknop een klein stukje draai geeft hij geeft hij aan pin1 of pin2 en een regeltje met Pulsbreedte: 100%  Frequentie: 1602 en Module wacht op herkenbaar signaal. Dit regeltje blijft hij herhalen. Als ik dan aan de knop draai (maakt niet uit hoe hoog en welke kant op ) dan zegt hij: Herkenbaar signaal gevonden op rijpin 1 of 2.  Module wacht op herkenbaar signaal. Gevolgd door een hele zwik lopende puntjes met een ! er achter. Ook deze regel blijft hij maar herhalen. Als ik de knop hoger draai krijg ik steeds meer puntjes.
Groet Pierre.

Ik rommel wat met treintjes en bouwwerkjes in H0 (H0e) en ook een klein beetje in N  .... Scratchbuilding, kitbashing en weathering.  ;D Lid van de http://haagsemodelbouwclub.nl/

Offline Rob

  • Forumbeheerder
  • Super Modelspoorder
  • *****
  • Berichten: 2.743
  • Thanked: 161 times
  • Geslacht: Man
  • Rob zegt: denk aan morgen, doe vandaag.
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #31 Gepost op: 18 juli 2018, 11:40:05 »
Hoi Wim,

Die Fleischmann MSF was even een opzoekvraag.

"MSF“ - Multi Sensible Feinsteuerung - bietet im gekennzeichneten „MSF“-Bereich langsamste Rangierfahrten durch kontinuierlichen Übergang von Halbwellen- über Mischwellen zur Vollwellen-Gleichrichtung. "

Oef.

Als ik het goed begrijp doet deze iets met de gelijkrichting van de (sinus) wisselstroom en afkappen daarvan. Ook hier is het idee dat je beter een hoge spanning kunt geven, maar dan niet de hele tijd. De reden hiervoor is dat een elektromotor meer koppel heeft bij een hoge spanning dan bij een lage. Door steeds kort een hoge spanning te geven is er meer koppel bij lage snelheid, en dus gaat langzaam rijden beter.

Dat lijkt wel op pulsbreedte besturing, maar is niet hetzelfde. Laat ik een uitleg proberen.

"Normale" analoge gelijkstroom is dubbel gelijkgerichte wisselstroom. Je regelt de snelheid door de spanning te varieren, dus de 'golven' worden hoger. Je kunt ook enkele gelijkrichting toepassen, dan gebruik je slechts de helft van de wisselspanning. Gevolg is dat er dus de helft van de tijd geen stroom is, de spanning hoger moet zijn in de tijd dat er wel stroom is en daarmee het koppel in de motor al beter is.
Als ik het goed begrijp, doet MSF enkele geljkrichting (Halbwellen), maar ook nog iets in het 'rangeerbereik'' door halve golven slechts voor een deel te gebruiken.
Dus zoiets als de enkelvoudige deelgolf hieronder.




Pulsbreedte besturing werkt niet met 'ronde' golven, maar met 'hoekige'. Voor het rijden maakt dat niet zo heel veel uit, maar voor de geluidsmodules wel. De meting van de pulsbreedte in de Arduino of DigiSpark werkt door de tijd tussen de 'flanken' van de gollf te meten. Bij een hoekige golf gaat dit lekker digitaal, bij een ronde golf zit je steeds een hele tijd in digitaal niemandsland en is de meting onnauwkeurig of ronduit willekeurig.


Kortom: voor het rijden allemaal hetzelfde principe: koppel van de motor vergroten door steeds kort een hoge spanning te geven. Voor interpreteren van de snelheid op basis van de pulsbreedte is MSF niet geschikt.

Rob
Ergens in (West) Duitsland tussen 1960 en 1970 | gelijkstroom analoog, met geluid | kleine vaste baan en uitbreiding met modulebaan.
Nu vooral bezig met van alles en nog wat...

Offline Dirk T

  • Super Modelspoorder
  • ******
  • Berichten: 1.345
  • Thanked: 98 times
  • Geslacht: Man
  • Tweerail DCC, NL 1950-1975 met ruime blik
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #32 Gepost op: 18 juli 2018, 11:49:40 »
een MSF-trafo van bijvoorbeeld Fleischmann, is dat een transformator met pulsbreedtemodulatie waar jullie het hier over hebben?

Nee. Dat is "gewoon" een analoge trafo, maar met een handigheidje bij lage railspanningen waardoor een motortje eerder in beweging komt en beter trekt. Het is een trafo zonder actieve elektronica. Een PWM regelaar is juist volledig elektronisch.

Wat technischer: MSF doet "op volle snelheid" hetzelfde als een gewone trafo, namelijk volledige gelijkrichting. Bij spanningen onder de 50% gebruikt de MSF enkelvoudige gelijkrichting. Het maximale vermogen is dan wel een stuk lager, maar door maar de helft gelijk te richten moet de andere helft een hogere spanning hebben, en daarmee wordt de zogenaamde ankerkleef veel eerder overwonnen.

Ankerkleef is het verschijnsel dat het anker van de motor een hogere spanning nodig heeft om in beweging te komen, dan om te blijven draaien wanneer hij eenmaal in beweging is.

@Rob: Bij metingen aan mijn eigen MSF trafo heb ik overigens nooit iets van deelgolven kunnen zien.
Het einde van een weg wordt altijd bereikt door hem stap voor stap af te lopen.

Offline Dirk T

  • Super Modelspoorder
  • ******
  • Berichten: 1.345
  • Thanked: 98 times
  • Geslacht: Man
  • Tweerail DCC, NL 1950-1975 met ruime blik
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #33 Gepost op: 18 juli 2018, 11:54:52 »
Pulsbreedte besturing werkt niet met 'ronde' golven, maar met 'hoekige'. Voor het rijden maakt dat niet zo heel veel uit, maar voor de geluidsmodules wel.

De frequentie bij PWM is gewoonlijk ook beduidend hoger. Is een gelijkgerichte wisselspanning een signaal van 100Hz, de meeste PWM regelaars gaan daar ruim boven zitten, tot 20.000Hz. Voor de geluidsmodule kan dat ook een groot verschil uitmaken: bij hogere frequenties zijn alle pulsen veel smaller, maar er zijn er ook veel meer in dezelfde tijd.
Het einde van een weg wordt altijd bereikt door hem stap voor stap af te lopen.

Offline Rob

  • Forumbeheerder
  • Super Modelspoorder
  • *****
  • Berichten: 2.743
  • Thanked: 161 times
  • Geslacht: Man
  • Rob zegt: denk aan morgen, doe vandaag.
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #34 Gepost op: 18 juli 2018, 11:56:15 »
Hoi Pierre.

Tsja, in dit soort uitdagingen raak je snel verzeild... Gelukkig nog niets in elkaar gesoldeerd.
We komen er vast wel uit, hoor.

Ik heb de twee weerstanden vergroot naar 1K. De voeding heb ik teruggebracht naar 13V maar het werkt nog steeds niet lekker.

Als ik (hulpmiddelen - Seriële monitor) start dat geeft hij inderdaad aan Geluidsmodule gestart en dat er gewacht wordt op een herkenbaar signaal. Als ik nu aan de draaiknop een klein stukje draai geeft hij geeft hij aan pin1 of pin2 en een regeltje met Pulsbreedte: 100%  Frequentie: 1602 en Module wacht op herkenbaar signaal. Dit regeltje blijft hij herhalen. Als ik dan aan de knop draai (maakt niet uit hoe hoog en welke kant op ) dan zegt hij: Herkenbaar signaal gevonden op rijpin 1 of 2.  Module wacht op herkenbaar signaal. Gevolgd door een hele zwik lopende puntjes met een ! er achter. Ook deze regel blijft hij maar herhalen. Als ik de knop hoger draai krijg ik steeds meer puntjes.
Dat is in ieder geval een verandering ten opzichte van gisteren....
Nu moet ik even denken, hoor....
Heb je ook al een meting gedaan zonder de loc op de rollerbank?
En je had 2 pusbreedte besturingen, toch? Heb je die andere ook al geprobeerd?

Ik heb nog ergens een programma'tje die precies laat zien wat er gemeten wordt. Die zoek ik even op. Dan is het misschient iets makkelijker te duiden wat er nu gebeurt....

Rob
Ergens in (West) Duitsland tussen 1960 en 1970 | gelijkstroom analoog, met geluid | kleine vaste baan en uitbreiding met modulebaan.
Nu vooral bezig met van alles en nog wat...

Offline Rob

  • Forumbeheerder
  • Super Modelspoorder
  • *****
  • Berichten: 2.743
  • Thanked: 161 times
  • Geslacht: Man
  • Rob zegt: denk aan morgen, doe vandaag.
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #35 Gepost op: 18 juli 2018, 11:59:43 »
Hoi Dirk.

Duidelijke uitleg, die "ankerkleef".

Bij metingen aan mijn eigen MSF trafo heb ik overigens nooit iets van deelgolven kunnen zien.
Ah, ik probeerde de term "Mischwellen" te interpreteren. Blijkbaar is dat iets anders...

Rob
Ergens in (West) Duitsland tussen 1960 en 1970 | gelijkstroom analoog, met geluid | kleine vaste baan en uitbreiding met modulebaan.
Nu vooral bezig met van alles en nog wat...

Offline Rob

  • Forumbeheerder
  • Super Modelspoorder
  • *****
  • Berichten: 2.743
  • Thanked: 161 times
  • Geslacht: Man
  • Rob zegt: denk aan morgen, doe vandaag.
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #36 Gepost op: 18 juli 2018, 12:10:58 »
Pierre,

Hierbij een ander pulsbreedte testprogramma'tje.

Deze laat op de seriële monitor zien wat de gemeten tijdsduur is van "hoog" en "laag" op elk van de pinnen.

/* PULS METEN
 * Hulpprogramma bij geluidsmodules voor analoge h0 trein.
 * Meet de puls op 2 pinnen waarmee de rijstroom wordt gemeten
 * en print deze op de seriële poort, en daarme op de USB poort.
 * Waarden zijn uit te lezen met de serial monitor op de computer.
 */
 // Geef de 2 pinnen op waar de rijstroom wordt gemeten
#define rijpin1 11
#define rijpin2 12

#define pullup false

// --- variabelen ---
double channel1;
double channel2;
double channel3;
double channel4;
double frequentie1;
double frequentie2;


void setup() {
  // rijpinnen initialiseren: input en interne pullup weerstand gebruiken
  pinMode(rijpin1,INPUT);
  pinMode(rijpin2,INPUT);
  digitalWrite(rijpin1,pullup);
  digitalWrite(rijpin2,pullup);
  // start de seriele communicatie (USB)
  Serial.begin(9600);
  Serial.println("Pulsmeting gestart. Alle waarden in micro seconden (us)");
}

void loop() {
  // meet de tijdspanne voor "hoog" en "laag" op beide pinnen
  channel1 = pulseIn(rijpin1,HIGH);
  channel2 = pulseIn(rijpin1,LOW);
  channel3 = pulseIn(rijpin2,HIGH);
  channel4 = pulseIn(rijpin2,LOW);

  // geef de meetwaarden weer
  Serial.print("Pin 1 periode: ");
  Serial.print(channel1 + channel2);
  Serial.print(" - hoog/laag: ");
  Serial.print(channel1);
  Serial.print(" / ");
  Serial.print(channel2);
  Serial.print("  || Pin 2 periode: ");
  Serial.print(channel3 + channel4);
  Serial.print(" - hoog/laag: ");
  Serial.print(channel3);
  Serial.print(" / ");
  Serial.println(channel4);
 
  delay (200);                       // even wachten...
}
// --- einde ---

Daar kun jij misschien niets mee, maar ik hoop dat ik er chocola van kan maken.
Ik hoor het wel.

Rob
Ergens in (West) Duitsland tussen 1960 en 1970 | gelijkstroom analoog, met geluid | kleine vaste baan en uitbreiding met modulebaan.
Nu vooral bezig met van alles en nog wat...

Offline Rob

  • Forumbeheerder
  • Super Modelspoorder
  • *****
  • Berichten: 2.743
  • Thanked: 161 times
  • Geslacht: Man
  • Rob zegt: denk aan morgen, doe vandaag.
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #37 Gepost op: 18 juli 2018, 12:16:25 »
En eventueel kun je de uitvoer van de seriële monitor hier even posten.
Oh, en ik denk dat de 470 ohm in de spanningsdelers beter was dan de 1k. Het lijkt er op dat de "hoog" met 1k niet meer goed wordt gemeten.
 
Ergens in (West) Duitsland tussen 1960 en 1970 | gelijkstroom analoog, met geluid | kleine vaste baan en uitbreiding met modulebaan.
Nu vooral bezig met van alles en nog wat...

Offline Dirk T

  • Super Modelspoorder
  • ******
  • Berichten: 1.345
  • Thanked: 98 times
  • Geslacht: Man
  • Tweerail DCC, NL 1950-1975 met ruime blik
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #38 Gepost op: 18 juli 2018, 12:25:39 »
eerde de term "Mischwellen" te interpreteren. Blijkbaar is dat iets anders...

Tja, het is dan ook geen technische term maar een Fleischmann term. Volgens mij bedoelen ze met "gemengde golven" de situatie tussen 50% spanning en 100% spanning. Het is jaren geleden dat ik het met een scoop gemeten heb, dus ik moet even diep graven in mijn geheugen. Maar dit is wat ik me herinner.

Tussen 0% en 50% is alleen de "eerste helft" van de sinusgolf aanwezig. Oftewel, om de spanning van 0% tot 50% te regelen wordt de eerste helft van de sinus van 0% tot 100% geregeld.  Vanaf 50% trafospanning blijft die eerste helft van de sinus op 100% maximaal, maar nu komt de andere helft van de sinus erbij. Ook die begint bij 0% (voor trafospanning=50%) en loopt op tot 100% voor trafospanning = 100%.

Een uitgangsspanning van 75% bestaat dan uit eerste helften op 100% en tweede helften op 50%. Dat ziet er op de scoop een beetje bijzonder uit: hoge toppen en lage toppen wisselen elkaar af. Ik vermoed dat Fleischmann dat bedoelt met Mischwellen of gemengde golven.
Het einde van een weg wordt altijd bereikt door hem stap voor stap af te lopen.

Offline Rob

  • Forumbeheerder
  • Super Modelspoorder
  • *****
  • Berichten: 2.743
  • Thanked: 161 times
  • Geslacht: Man
  • Rob zegt: denk aan morgen, doe vandaag.
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #39 Gepost op: 18 juli 2018, 12:30:56 »
Dirk,
Ik vind deze Mischwellen beschrijving heel erg plausibel. Maar ik laat mijn tekeningetje even voor wat het is  :D
Rob
Ergens in (West) Duitsland tussen 1960 en 1970 | gelijkstroom analoog, met geluid | kleine vaste baan en uitbreiding met modulebaan.
Nu vooral bezig met van alles en nog wat...

Offline Anne W

  • Super Modelspoorder
  • ******
  • Berichten: 1.911
  • Thanked: 31 times
  • Geslacht: Man
  • Elk vogeltje zingt zoals het gebekt is
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #40 Gepost op: 18 juli 2018, 23:28:40 »
Geen geheimpje: elke digitale decoder levert een pulsbreedte gestuurde gelijkspanning aan de motor.

Groet, Anne W
Voorheen: Raptor, Edits booster 10A, 20 digitale loks, automatisch bedrijf (Raptor), voor het volgen van de bouw en de ontmanteling van mijn baan, google \"mochten jullie denken dat ik alleen met\"

Offline Rob

  • Forumbeheerder
  • Super Modelspoorder
  • *****
  • Berichten: 2.743
  • Thanked: 161 times
  • Geslacht: Man
  • Rob zegt: denk aan morgen, doe vandaag.
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #41 Gepost op: 26 juli 2018, 22:08:33 »
Hoi Pierre,

Ik ben wel benieuwd... Heb je al iets aan de pulsbreedte kunnen meten met het laatste programma'tje en dat weer met de 470/220 ohm spanningsdeler?

Rob
Ergens in (West) Duitsland tussen 1960 en 1970 | gelijkstroom analoog, met geluid | kleine vaste baan en uitbreiding met modulebaan.
Nu vooral bezig met van alles en nog wat...

Offline Pierre

  • Super Modelspoorder
  • ******
  • Berichten: 7.918
  • Thanked: 334 times
  • Geslacht: Man
  • Woonplaats: Den Haag (Loosduinen)
    • Haagse Modelbouw Club
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #42 Gepost op: 27 juli 2018, 11:23:45 »
Ha Rob ... weer thuis van de daagjes lekker kanoën.

Ik had een beetje een dipje laten we maar zeggen. Bij het opstarten van de pulsbreedte voeding ... poef! ... veel rook en stank en een stuk print weggeslagen. Overleden dus! Er bleek een moertje onder de print te liggen die de sluiting veroorzaakte. Eigen schuld .. dikke bult. ;D Moet je de rotzooi maar opruimen. ::)

De andere pulsbreedte besturingen zitten zover ingebouwd dat ik het niet zag zitten die te demonteren. Ik heb een beetje gezocht  in mijn eigen winkeltje (was helemaal vergeten dat ik dit nog had) en ben nog wat tegen gekomen. Een keurig bouwpakketje van meneer Conrad.



Op een "koele" avond maar eens even in elkaar gesoldeerd.





De trafo met de laagste spanning die ik had waar toch de pulsbreedte regelaar nog op werkt gaf gelijkgericht 12,9 volt. Lager werkt niet. Ik heb goede hoop dat we met deze pulsbreedte regelaar wat meer succes hebben dan met de vorige. Ik denk dat de vorige wat problemen gaf omdat er ook een rem en optrek regeling op zat die de boel aan het foppen was.



Ik heb verder nog niets gedaan met de Arduino maar dat komt wel. Ik ga over een uurtje of zo ook op stap voor een paar dagen maar neem mijn laptop mee.

Ook nog een vraagje Rob. Als je iets nieuws op een Arduino gaat zetten moet je dan het oude er af halen of kan je hem gewoon overschrijven met een nieuwe code?





Groet Pierre.

Ik rommel wat met treintjes en bouwwerkjes in H0 (H0e) en ook een klein beetje in N  .... Scratchbuilding, kitbashing en weathering.  ;D Lid van de http://haagsemodelbouwclub.nl/

Offline Rob

  • Forumbeheerder
  • Super Modelspoorder
  • *****
  • Berichten: 2.743
  • Thanked: 161 times
  • Geslacht: Man
  • Rob zegt: denk aan morgen, doe vandaag.
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #43 Gepost op: 27 juli 2018, 13:24:10 »
Hoi Pierre,

Jammer van die oude pulsbreedte besturing. Maar bij mij doet ook wel eens iets "poef". Alles dubbel controleren en dan alsnog verkeerd aansluiten omdat je tussendoor wordt afgeleid. Dat overkomt mij af en toe. En dan inderdaad weer even tijd nodig om te herpakken...
Maar deze nieuwe pulsbreedtebesturing ziet er wel solide uit en met 5A output heb je ruim voldoende vermogen. De uitgangsspanning zal wel ergens rond de 12V liggen (ik neem aan dat deze bedoeld was voor 12V halogeenlampen). Ben wel benieuwd of/hoe de richting geregeld wordt.

Op de Arduino kun je gewoon nieuwe software laden: de oude hoeft er niet eerst af.

Goede reis!

Rob
Ergens in (West) Duitsland tussen 1960 en 1970 | gelijkstroom analoog, met geluid | kleine vaste baan en uitbreiding met modulebaan.
Nu vooral bezig met van alles en nog wat...

Offline Pierre

  • Super Modelspoorder
  • ******
  • Berichten: 7.918
  • Thanked: 334 times
  • Geslacht: Man
  • Woonplaats: Den Haag (Loosduinen)
    • Haagse Modelbouw Club
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #44 Gepost op: 27 juli 2018, 15:00:00 »
deze nieuwe pulsbreedtebesturing ziet er wel solide uit en met 5A output heb je ruim voldoende vermogen. De uitgangsspanning zal wel ergens rond de 12V liggen (ik neem aan dat deze bedoeld was voor 12V halogeenlampen).

Ben wel benieuwd of/hoe de richting geregeld wordt.

Er stond geloof ik ergens in de beschrijving dat de schakeling was om kleine boormachines traploos te laten draaien. Maar echt zeker weten doe ik dat niet.

In principe rijden alle treinen bij mij gewoon vooruit dus over de rijrichting maak ik me niet zo druk. De enige plek waar de treinen beide kanten op rijden is bij de draaischijf en locloods. Maar dit hele gebied staat op een heel andere trafo.

Is de draairichting niet te regelen door gewoon de draden om te wisselen met b.v. een schakelaar?  Het blijft toch gelijkstroom?

Op de Arduino kun je gewoon nieuwe software laden: de oude hoeft er niet eerst af.

Mooi ... da's dan simpel.
Groet Pierre.

Ik rommel wat met treintjes en bouwwerkjes in H0 (H0e) en ook een klein beetje in N  .... Scratchbuilding, kitbashing en weathering.  ;D Lid van de http://haagsemodelbouwclub.nl/

Offline Rob

  • Forumbeheerder
  • Super Modelspoorder
  • *****
  • Berichten: 2.743
  • Thanked: 161 times
  • Geslacht: Man
  • Rob zegt: denk aan morgen, doe vandaag.
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #45 Gepost op: 27 juli 2018, 15:21:45 »
Is de draairichting niet te regelen door gewoon de draden om te wisselen met b.v. een schakelaar?  Het blijft toch gelijkstroom?
Dat werkt ook. Voor het geluid in beide richtingen is een rijrichting wissel wel nodig om te testen.

Rob
Ergens in (West) Duitsland tussen 1960 en 1970 | gelijkstroom analoog, met geluid | kleine vaste baan en uitbreiding met modulebaan.
Nu vooral bezig met van alles en nog wat...

Offline Pierre

  • Super Modelspoorder
  • ******
  • Berichten: 7.918
  • Thanked: 334 times
  • Geslacht: Man
  • Woonplaats: Den Haag (Loosduinen)
    • Haagse Modelbouw Club
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #46 Gepost op: 27 juli 2018, 16:57:11 »
Als ik weer thuis ben ga ik aan de slag  ;D
Groet Pierre.

Ik rommel wat met treintjes en bouwwerkjes in H0 (H0e) en ook een klein beetje in N  .... Scratchbuilding, kitbashing en weathering.  ;D Lid van de http://haagsemodelbouwclub.nl/

Offline Pierre

  • Super Modelspoorder
  • ******
  • Berichten: 7.918
  • Thanked: 334 times
  • Geslacht: Man
  • Woonplaats: Den Haag (Loosduinen)
    • Haagse Modelbouw Club
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #47 Gepost op: 30 juli 2018, 17:40:42 »
Vandaag weer thuis en ik ben gelijk in mijn Arduino verhaal gekropen. Even vanaf 0 weer begonnen. De Arduino schakeling opnieuw opgezet (met de 470 ohm weerstanden) en de voeding voorzien van een omkeerschakelaar zodat nu alles getest moet kunnen worden. Een nieuwe testopstelling met de nieuwe voeding gemaakt en ....



... potverdorie ... 't werkt! :o

Even kijken of je wat kan met deze gegevens Rob.

De Arduino leest af dat de voeding werkt met ongeveer 2900 Hz.

Bij 42% gaat mijn locje pas lopen

Bij 95% krijg ik de kreet "wacht op bruikbaar signaal" en als ik iets terug ga pakt hij de draad weer op.

Deze gegevens zijn beide kanten op het zelfde en de wisseling van de pinnen wordt keurig aangegeven.

Groet Pierre.

Ik rommel wat met treintjes en bouwwerkjes in H0 (H0e) en ook een klein beetje in N  .... Scratchbuilding, kitbashing en weathering.  ;D Lid van de http://haagsemodelbouwclub.nl/

Offline Rob

  • Forumbeheerder
  • Super Modelspoorder
  • *****
  • Berichten: 2.743
  • Thanked: 161 times
  • Geslacht: Man
  • Rob zegt: denk aan morgen, doe vandaag.
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #48 Gepost op: 30 juli 2018, 18:16:47 »
Kijk, dat is een bruikbaar resultaat!
Soms is het niet verkeerd om weer even van vooraf aan te beginnen (het is alleen niet zo leuk als dat voor je wordt bepaald).

Dat er vanaf 95% geen signaal meer is te lezen, komt omdat de 'laag' dan te kort wordt, denk ik. Dat hoeft geen probleem te zijn als je niet helemaal voluit rijdt (meestal racen de locs dan toch al sneller dan Max).

Dan wordt het nu tijd om rijstroom afhankelijk geluid te gaan maken. Eerst maar gewoon op de Arduino. Ik zoek even een programma'tje op....

Aansluitschema wordt de combinatie van de eerste en de tweede, dus de rijstroom op pinnen 11 en 12 (die kun je gewoon laten zitten), en de transistor op pin 13 (basis met weerstand van 220 of 470 ohm).

Bij welke pulsbreedte heeft de loc een redelijke schaal topsnelheid?

Rob
Ergens in (West) Duitsland tussen 1960 en 1970 | gelijkstroom analoog, met geluid | kleine vaste baan en uitbreiding met modulebaan.
Nu vooral bezig met van alles en nog wat...

Offline Rob

  • Forumbeheerder
  • Super Modelspoorder
  • *****
  • Berichten: 2.743
  • Thanked: 161 times
  • Geslacht: Man
  • Rob zegt: denk aan morgen, doe vandaag.
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #49 Gepost op: 30 juli 2018, 18:56:16 »
Hoi Pierre.

Hier het programma'tje. Ik heb even de geluiden voor m'n verse BR64 als basis genomen. Geluid start bij 42% en bereikt maximale puf-snelheid bij 90%. Als het goed is kun je gewoonweg de snelheidsregelaar helemaal voluit draaien en zakt de tsjoek-tsjoek snelheid weer als je onder de 90% komt....


  /*
 * RUISGENERATOR STOOMTREIN
 * Stoomtrein geluiden met rijstroom afhankelijk "puffen" van ruis. Voor analoog rijden met geluid.
 * Rijstroom met pulsbreedtebesturing is nodig: de pulsbreedte wordt omgerekend naar puf-snelheid.
 *
 * Eenvoudige extra geluidsfuncties:
 * 1: fluitje (lijkt meer op een telefoon)
 * 2: sissen
 * 3: remmen
 * 4: stilte (vrijloop)
 * Functies werken redelijk bij langzaam rijden en goed bij stilstand en snel rijden
 *
 * versie 1.1 - 29 jul 2018
 */


// --- DEFINITIES ----

// kies de loc om te compileren: zet precies één definitie op 'true'
#define LocPierre true
#define BR64      false
#define BR70      false
#define BR91      false

#define Ruispin       13               // pin voor aansturen van speaker: pin 1 of 0 (0 = 5 sec. vertraging)
#define rijpin1       12               // rijstroom meting
#define rijpin2       11               // rijstroom meting

//geluidsdefinities per type loc

#if LocPierre
  // definities voor slagen BR64. ("paa tsjie paa tsjoe...")
  #define Startfreq1  1000             // laagste frequentie ruis slag 1
  #define Eindfreq1   3000             // hoogste frequentie ruis slag 1
  #define Startfreq2  1300             // laagste frequentie ruis slag 2
  #define Eindfreq2   5500             // hoogste frequentie ruis slag 2
  #define Startfreq3  1000             // laagste frequentie ruis slag 3
  #define Eindfreq3   3000             // hoogste frequentie ruis slag 3 
  #define Startfreq4   940             // laagste frequentie ruis slag 4
  #define Eindfreq4   2500             // hoogste frequentie ruis slag 4
  // berekening snelheid
  #define pulsbreedtestil   42         // pulsbreedte in % waaronder loc stil staat
  #define pulsbreedtemax    90         // pulsbreedte waar de maximum snelheid (pufritme) wordt bereikt 
  #define langstePuf       190         // langste puf (in ms) - langzaam rijden
  #define kortstePuf        60         // kortste puf (in ms) - topsnelheid (minimum ligt rond 50ms)
  // opstart geluid
  #define BeginSis         930         // lengte van het sisgeluid bij starten (en korte stroomonderbrekingen)
#endif

#if BR64
  // definities voor slagen BR64. ("paa tsjie paa tsjoe...")
  #define Startfreq1  1000             // laagste frequentie ruis slag 1
  #define Eindfreq1   3000             // hoogste frequentie ruis slag 1
  #define Startfreq2  1300             // laagste frequentie ruis slag 2
  #define Eindfreq2   5500             // hoogste frequentie ruis slag 2
  #define Startfreq3  1000             // laagste frequentie ruis slag 3
  #define Eindfreq3   3000             // hoogste frequentie ruis slag 3 
  #define Startfreq4   940             // laagste frequentie ruis slag 4
  #define Eindfreq4   2500             // hoogste frequentie ruis slag 4
  // berekening snelheid
  #define pulsbreedtestil   32         // pulsbreedte in % waaronder loc stil staat
  #define pulsbreedtemax    56         // pulsbreedte waar de maximum snelheid (pufritme) wordt bereikt 
  #define langstePuf       190         // langste puf (in ms) - langzaam rijden
  #define kortstePuf        60         // kortste puf (in ms) - topsnelheid (minimum ligt rond 50ms)
  // opstart geluid
  #define BeginSis        3530         // lengte van het sisgeluid bij starten (en korte stroomonderbrekingen)
#endif

#if BR70
  // definities voor slagen BR70 ("tsjoe, tsjie, tsjoe, tsjie")
  #define Startfreq1  1700             // laagste frequentie ruis slag 1
  #define Eindfreq1   3900             // hoogste frequentie ruis slag 1
  #define Startfreq2  2000             // laagste frequentie ruis slag 2
  #define Eindfreq2   4100             // hoogste frequentie ruis slag 2
  #define Startfreq3  1720             // laagste frequentie ruis slag 3
  #define Eindfreq3   3930             // hoogste frequentie ruis slag 3 
  #define Startfreq4  1980             // laagste frequentie ruis slag 4
  #define Eindfreq4   4050             // hoogste frequentie ruis slag 4
  // berekening snelheid
  #define pulsbreedtestil   28         // pulsbreedte in % waaronder loc stil staat
  #define pulsbreedtemax    65         // pulsbreedte waar de maximum snelheid (pufritme) wordt bereikt 
  #define langstePuf       375         // langste puf (in ms) - langzaam rijden
  #define kortstePuf        50         // kortste puf (in ms) - topsnelheid (minimum ligt rond 50ms)
  // opstart geluid
  #define BeginSis        1150         // lengte van het sisgeluid bij starten (en korte stroomonderbrekingen)
#endif

#if BR91
  // definities voor slagen BR91: 1e wat hoger, laatste wat lager dan de 2 middelste slagen ("tsjie, tsja, tsja, tsjoe")
  #define Startfreq1  1950             // laagste frequentie ruis slag 1
  #define Eindfreq1   4350             // hoogste frequentie ruis slag 1
  #define Startfreq2  1800             // laagste frequentie ruis slag 2
  #define Eindfreq2   4000             // hoogste frequentie ruis slag 2
  #define Startfreq3  1800             // laagste frequentie ruis slag 3
  #define Eindfreq3   4000             // hoogste frequentie ruis slag 3 
  #define Startfreq4  1750             // laagste frequentie ruis slag 4
  #define Eindfreq4   3900             // hoogste frequentie ruis slag 4
  // berekening snelheid
  #define pulsbreedtestil   26         // pulsbreedte in % waaronder loc stil staat
  #define pulsbreedtemax    84         // pulsbreedte waar de maximum snelheid (pufritme) wordt bereikt 
  #define langstePuf       800         // langste puf (in ms) - langzaam rijden
  #define kortstePuf        71         // kortste puf (in ms) - topsnelheid (minimum ligt rond 50ms)
  // opstart geluid
  #define BeginSis        1750         // lengte van het sisgeluid bij starten (en korte stroomonderbrekingen)
#endif

// algemene geluidsdefinities
#define pauze         0.33             // factor puf/pauze (elke slag heeft voor een deel stilte)
#define RemLaag    3200                // frequentiebereik voor remgeluid
#define RemHoog    3800
#define SisLaag    3000                // frequentiebereik voor sisgeluid
#define SisHoog    5500

// definities voor de meting van de rijstroom
#define pullup               false     // geeft aan of de interne pullup weerstand gebruikt moet worden
#define maxpulsperiode       5000      // hoe lang wachten (minimaal 2x periode rijstroom PWM)

// Frequenties (Periodes) op de rijstroom
#define rijPeriode            2020     // rijstroom puls in us
#define functie_01_Periode    1500     // Periode (freq.) functie 1
#define functie_02_Periode    1250     // Periode (freq.) functie 2
#define functie_03_Periode     990     // Periode (freq.) functie 3
#define functie_04_Periode     790     // Periode (freq.) functie 4
#define functie_05_Periode     590     // Periode (freq.) functie 5 - niet gebruikt
#define functie_06_Periode     490     // Periode (freq.) functie 6 - niet gebruikt
#define pulsruis               100     // maximaal verschil in gemeten Periodes (ruis)
#define minhoog                200     // minimaal "hoog" signaal

// --- CONSTANTES ---

const float sqrtpbstil = 100*sqrt(10);
const float sqrtpbmax  = 100*sqrt(10+pulsbreedtemax-pulsbreedtestil);


// ---- VARIABLEN ----

// puf-geluid variabelen: 4 slagen (is tweezijdige tweecylinder loc)
unsigned int ruisStartFreq[] {Startfreq1, Startfreq2, Startfreq3, Startfreq4};  // hoogste frequentie puf-ruis per slag
unsigned int ruisEindFreq[]  {Eindfreq1,  Eindfreq2,  Eindfreq3,  Eindfreq4 };  // laagste frequentie puf-ruis per slag
int slag = 0;

// rijstroom variabelen
int rijpin[] {rijpin1, rijpin2};
int vooruit = 1;                      // richting: bepaalt welke pin wordt uitgelezen voor de rijstroom puls
double pulsbreedteHoog;
double pulsbreedteLaag;
double pulsPeriode;
float pulsbreedte = 0;                // pulsbreedte in %
int functie = 0;                      // speciale functie frequentie gemeten

unsigned int  puf;                    // lengte puf-slag (ms)
unsigned long pze;                    // pauze tot aan klok stand(ms)


// --- FUNCTIES ---

// Functie: maak puf geluid (één slag)
// Geeft ruis voor een deel van de opgegeven lengte en stil voor de resterende tijd (factor definitie)
// De ruisfrequentie neemt langzaam af om enigszins de volume afname te simuleren.
// input: lengte van de slag (in ms)
//        laagste frequentie van de ruis
//        hoogste frequentie van de ruis
// output: tijd tot einde pauze van de puf
unsigned long maakPuf(int lengte, unsigned int laag, unsigned int hoog) {
  unsigned int  freq;
  unsigned long mils;
  float factor = 1 - (0.09/lengte);
  mils = millis() + (1-pauze) * lengte;
  while (millis() < mils) {
    freq = random (laag, hoog);
    tone (Ruispin,freq);
    laag = laag*factor;
    hoog = hoog*factor;
  }
  noTone(Ruispin);
  return millis() + (lengte * pauze);                         // pauze tijd tussen de puffen
}

// Functie: Afspelen van ruis.
// Gebruikt voor sissen en remgeluid. Constant ruis-geluid gedurende de opgegeven lengte (in ms).
// input: lengte van de slag (in ms)
//        laagste frequentie van de ruis
//        hoogste frequentie van de ruis
void speelRuis(unsigned int lengte, unsigned int laag, unsigned int hoog) {
  unsigned int  freq;
  unsigned long mils;
  mils = millis() + lengte;
  while (millis() < mils) {
    freq = random (laag, hoog);   
    tone (Ruispin,freq);
  }
  noTone(Ruispin);
}

// Functie: Afspelen van een 'fluitje'
// Afwisselend een hoge en lage frequentie met een kleine frequentie variatie.
// input: lengte (in ms)
void speelFluitje(unsigned int lengte) {
  unsigned int  freq;
  unsigned long mils;

  mils = millis() + lengte;
  while (millis() < mils) {
    tone (Ruispin,random (2100,2120));
    delay (20);
    tone (Ruispin,random (2400,2430));
    delay (18);
  }
  noTone(Ruispin);
}

void meetPuls() {
  // puls meting variabelen: lengte 'hoog', 'laag' en trillingstijd (periode). Alle tijden in us.
  pulsbreedteHoog = pulseIn(rijpin[vooruit], HIGH, maxpulsperiode);
  pulsbreedteLaag = pulseIn(rijpin[vooruit], LOW, maxpulsperiode );
  pulsPeriode = pulsbreedteHoog + pulsbreedteLaag;
}

// HERKEN FUNCTIE-FREQUENTIE
// functie voor het checken van functie-frequenties
// op de puls (functietoets).
int getFunctie () {
  int f = 0;
 
  if (abs (pulsPeriode - functie_01_Periode) < pulsruis) { f = 1;}
  if (abs (pulsPeriode - functie_02_Periode) < pulsruis) { f = 2;}
  if (abs (pulsPeriode - functie_03_Periode) < pulsruis) { f = 3;}
  if (abs (pulsPeriode - functie_04_Periode) < pulsruis) { f = 4;}

  return f;
}

void setup() {
  pinMode     (Ruispin,OUTPUT);
 
  pinMode     (rijpin[0],INPUT);
  digitalWrite(rijpin[0],pullup);
  pinMode     (rijpin[1],INPUT);
  digitalWrite(rijpin[1],pullup);
  speelRuis (BeginSis, SisLaag,SisHoog);               // sissen bij opstarten
}

void loop() {
  // Pulsbreedte bepalen
  vooruit = !vooruit;                             // wissel de pin waarop de rijstroom wordt gemeten
  meetPuls(); 
  pulsbreedte = 100 * pulsbreedteHoog / pulsPeriode;
/* 
  functie = getFunctie();
 
  // speciale geluidsfunctie gevonden
  if (functie) {
    // als speciale functie is gevonden, controleer de functie frequentie nogmaals.
    // Hiermee wordt onterecht meten voorkomen (door bijvoorbeeld storing op de stroomopname).
    meetPuls();
    if (functie == getFunctie()) {                     // nog steeds dezelfde funtie op de rijstrrom
      switch (functie) {                               // speel functie 1, 2, 3 of 4.
        case 1:
          speelFluitje(1800);                          // fluitje afspelen, 1,8 sec.
        break;
        case 2:
          speelRuis (3000, SisLaag,SisHoog);           // sissen, 3 sec.
        break;
         case 3:
          speelRuis (3600, RemLaag,RemHoog);           // remgeluid 3,6 sec.
        break;
         case 4:
          pze = millis()+ 4500;                        // 4,5 sec. stilte = vrijloop
        break;
      }
    }
  }
  else {                                               // geen speciale functie, dan rij-geluid
*/
    // rijgeluid
    // tweecylinder = 4 puf slagen met verschil in de slagen (volgens definities van de loc)
    if (pulsbreedte > pulsbreedtestil && millis() > pze) {                   // lok rijdt en er is nu geen puf-pauze of vrijloop
      // puf slag berekenen
      if (pulsbreedte > pulsbreedtemax) {
        pulsbreedte = pulsbreedtemax;
      }
      puf = map(100 * sqrt (10+pulsbreedte-pulsbreedtestil), sqrtpbstil, sqrtpbmax, langstePuf, kortstePuf);  // reken pulssbreedte % om naar puf-tijd
      pze = maakPuf(puf, ruisStartFreq [slag], ruisEindFreq [slag]);         // maak puf-ruis. Functie geeft resterende pauze-tijd terug
      // volgende puf-slag (volgnummer 0-3)
      if (slag < 3) {
        slag++;
      }
      else {
        slag = 0;
      }
    }
//  }                                                     // einde functie spelen / rijgeluid
}                                                       // einde hoofd-lus

Hierbij ook het volledige aansluitschema. Na het laden van het programma kun je eventueel de Arduino van de computer loskoppelen. Als het goed is haalt de Arduino dan voldoende uit de rijstroom zelf.




Belangrijk aan de voeding: de Elco van 47uF of meer over de + en - van de gelijkrichter. De + gaat op de VIN (ingang spanning van de Arduino, deze maakt daar zelf 5V van). De collector van de transistor gaat ook op de + van de gelijkrichter: dan heeft de speaker wat meer vermogen.

Het geluid begint met een sis van bijna een seconde zodra de Arduino is opgestart. De tsjoek-tsjoek begint vanaf 42% pulsbreedte.

Succes!

Rob
Ergens in (West) Duitsland tussen 1960 en 1970 | gelijkstroom analoog, met geluid | kleine vaste baan en uitbreiding met modulebaan.
Nu vooral bezig met van alles en nog wat...