Doel:€250.00
Donaties:€88.00

Per saldo:€-162.00

Steun ons nu!

Laatst bijgewerkt
op 03-06-2025

Vacature: secretaris bestuur
Algemeen

De stichting

Recente berichten

Ombouw/Pimpen Bolle neuzen door Dave.......
Vandaag om 01:54:23
Raadplaatje door Dave.......
Vandaag om 00:33:43
Veevervoer ss/ ns door Edwin2121992
10 September 2025, 23:52:59
Modelspoorbaan van Einte door Wim Vink
10 September 2025, 23:36:09
Onlangs gespot - gefotografeerd, de foto's door MichielB
10 September 2025, 23:16:30
tandwiel lux modellbau door Olav
10 September 2025, 22:59:14
Rookgenerator wil niet werken, van piko 50652 = BR 93 in Rocrail door MOVisser
10 September 2025, 22:56:39
Mallnitzer Tauernbahnstrecke ÖBB N Spoor door Schachbrett
10 September 2025, 22:51:19
Module vliegveld Jan van Mourik door MOVisser
10 September 2025, 22:47:52
BNLS-Werkspoor - Railhopper SM90 door Joz
10 September 2025, 22:46:29
Mijnbouw Indonesië door MOVisser
10 September 2025, 22:26:28
De IJmuider spoorlijn - korte geschiedenis en plaatjes door Vislijn
10 September 2025, 21:42:40
PWM regelaar Kato 22018 sx standaard controller door Pollux
10 September 2025, 21:36:30
Rondje door Lissabon met Lijn 28 door Peter Soonius
10 September 2025, 21:32:12
Tandwiel 13 tands tbv aandrijfasje door Hasenwald
10 September 2025, 19:28:42
Toon hier je nieuwe (model-) spooraanwinst(en)... door VAM65
10 September 2025, 19:18:35
Koppelingsmechanisme klemt? door Robert vh Prutsert
10 September 2025, 19:12:10
Scandinavië-IG: Skandinavisk bangården. Voor op Scandinavië gerichte spoorzaken door Loki
10 September 2025, 19:06:47
Z21 en het programeren met de Z21App. door Frank 123
10 September 2025, 19:03:41
Da's Daz 2 door NS264
10 September 2025, 18:37:27
Nederland jaren 50 op basis van mijn roots door defender
10 September 2025, 18:29:04
Liliput Onderdeel NS 7851 stoomlok door Bas, Dordrecht
10 September 2025, 18:25:26
Bentheimer Eisenbahn, gisteren, vandaag en morgen. door borotof
10 September 2025, 17:47:49
19 Toen door ES44C4
10 September 2025, 17:20:58
Vijfhuis (v.h. Frotterdam) door Ben
10 September 2025, 17:03:11
Ovaalramer in messing. Schaal 0 door FritsT
10 September 2025, 16:57:23
De bouw van 'Ommelanden' (H0) door phdirk
10 September 2025, 15:57:32
Mijn eerste H0-modeltreinbaan in aanbouw door MOVisser
10 September 2025, 15:03:22
BR-18.6 Schaal-0. door FritsT
10 September 2025, 14:26:11
Swalbenburg, N modulebaan door NS264
10 September 2025, 12:07:16
  

Auteur Topic: Trein langzaam laten optrekken op analoge baan  (gelezen 11821 keer)

bask185

  • Offline Offline
  • Berichten: 5032
Re: Trein langzaam laten optrekken op analoge baan
« Reactie #60 Gepost op: 21 April 2020, 09:29:31 »
Als je al iets van programmeerkennis heb dan kost het je een dag.. max  :police:.

Ik heb overigens een Weistra modulde (software module) geschreven gister. Ik wil hem in de pauze even testen met led pin 13. Dan kan in ieder geval zien of de frequenties ongeveer kloppen.

Deze module is OO geschreven en werkt met Arduino's micros() functie. Je kan er dus meerdere rijregelaars mee programmeren die onafhankelijk van elkaar kunnen werken.

Dan nog iets de kortsluitbeveiliging. De H-brug heeft dit niet standaard ingebouwd. Maar met een beetje knutsel werk kunnen we het realiseren.

Die spoortjes in het zwart moet je doorsnijden met een scherp mesje. Deze buitenste pinnen zijn de current sense pinnen. Je moet tussen deze pinnen en de ground 3 parallele weerstanden van 1 ohm solderen. Deze 3 weerstanden hebben een vervangingsweerstand van 0.33ohm.

De motor stroom loopt door deze 3 weerstanden. Als er 2.5 Ampere door vloeit dan staat over deze weerstanden een spanning 2.5 * 0,33 = 0,83V. Deze spanning kunnen we analoog inlezen. 0,83V komt overeen met een ADC waarde van ~170.

Deze maximale spanning mag (en moet) voor max 50ms overschreden kunnen worden. Dit is nodig zodat de aanloopstromen in de treinen kunnen lopen. Je kan bijvoorbeeld elke 5ms ofzo de spanning meten met analogRead en als het resutlaat meer dan 10x aaneengeloten keren boven de 170 (onze grenswaarde) komt, dan moet je in software de spanning afschakelen naar de baan.


Je kan de weerstanden aan deze kant van de H brug solderen maar zolang ze maar tussen de current sense pinnen en de ground gesoldeerd worden, is het prima.

Dit is een functie die je elke programma cyclus kan aanroepen om dit te doen. Je mag geen delays gebruiken in je programma anders klopt de timing niet meer.

Als de baanspanning aan staat, dan lees ik de stroom in elke 5ms. Als die niet boven de grens waarde komt dan forceer ik een counter op 10. Als de stroom wel wordt overschreden, laat ik de counter aftellen naar 0 en als de counter 0 bereikt dan schakel ik de baanspanning af en zet ik de counter op 250 omdat..

.. als de baanspanning is afgeschakeld dan telt de counter ook af naar 0. Nu deze op 250 staat, doet hij er dus 2.5 seconde over. Als de counter dan 0 is, zet ik opnieuw spanning op de baan en we beginnen weer van vooraf aan. Je kan dit laatste ook weggooien en de baanspanning aanzetten met een knop of iets dergelijks. Alleen zo hoef je er nooit zelf over na te denken.

#define currentLimit 150 // Net ff onder de 2.5A
#define sampleInterval 5

#define trackPower 13
#define currentSensePinA A0

void shortCircuit() {
    static byte previousTime = 0;
    static byte shortCircuitCounter = 10; // static variabelen houden hun waardes vast.

    byte currentTime = millis() & 0xff; // we willen alleen de achterste byte van de 4 hebben

    if(currentTime - previousTime >= sampleInterval) {
        previousTime = currentTime;

        if(digitalRead(trackPower) == true) { // if track power is on, monitor the current

            if(analogRead(currentSensePinA) >= currentLimit) { // if current exceeds limit
                if(shortCircuitCounter) {  shortCircuitCounter--; }// start counting down to 0...

                if(shortCircuitCounter == 0) { // and cut of the power
                    digitalWrite(trackPower, LOW);
                    shortCircuitCounter = 250; // we use the same timer to enable track power in 2,5 seconds
                }
            }
            else {                              // if current does not exceed limit, force the counter to 25
                shortCircuitCounter = 10;
            }
        }

        else { // if track power OFF
            if(shortCircuitCounter) { shortCircuitCounter--; } // count down to 0...
               
            if(shortCircuitCounter == 0) { // and re-enable power after 2.5 seonds
                digitalWrite(trackPower, HIGH);
                shortCircuitCounter = 10; // restart timer for short circuit protection.
            }
        }
    }
}
Ik zal proberen om deze ook nog te testen vandaag.

Mvg,

Bas
Train-Science.com
Train-Science github
It ain't rocket science ;-)