Doel:€250.00
Donaties:€65.00

Per saldo:€-185.00

Steun ons nu!

Laatst bijgewerkt
op 17-03-2020
Algemeen

De stichting

Recente berichten

Jacobs draaistellen maken/ontwerpen door Quinzeedied
Vandaag om 11:27:23
Driemaster in ‘t veen - NS 2900 in h0 door ronald1956
Vandaag om 11:25:59
BNLS-Module: La vie...Cote d'Azur door Edsko Hekman
Vandaag om 11:19:49
NL baan: Frotterdam in h0 door Eric B
Vandaag om 11:11:04
Brugstekkers 8-polig: alle identiek? door henk
Vandaag om 11:08:23
Oersik etsplaat spoor 0 van Erwin, beginnersbouwverslag door Wim Corduwener
Vandaag om 11:07:02
LIMA 149803G Lubeck-Buchener Eisenbahn Digitaal ombouwen door 008200
Vandaag om 10:55:45
Kleine boutjes vastzetten? door ruudns
Vandaag om 10:55:09
The R & J Colliery Ltd. 1:76 Brits. door RobbertJan
Vandaag om 10:54:59
De Hondsrugbaan, H0 door Dion
Vandaag om 10:47:07
Mijn eerste H0-modeltreinbaan in aanbouw door Wim Vink
Vandaag om 10:44:28
BNLS trammodule: “Jewels of the HTM” door ronald1956
Vandaag om 10:38:37
Länderbahn en Reichsbahn locomotieven. door sjoerd74
Vandaag om 10:35:02
Baanbouw Bosje77 door Silver Fox 2512
Vandaag om 10:27:53
Liliput 6400 met 2 motoren, onderdelen gezocht, en hoe aandrijving openen? door 008200
Vandaag om 09:40:09
Vorarlberg (Oostenrijkse treinbaan....n-spoor) door JaJo
Vandaag om 09:25:34
Tips voor een natuurgetrouwe modelbaan door Eric B
Vandaag om 09:21:09
Oeps door Forever Rocofan
Vandaag om 09:17:57
Ombouw/Pimpen Bolle neuzen door bollen neus
Vandaag om 09:15:27
(BNLS modulebaan) BNLS-Forumbaan algemeen door MOVisser
Vandaag om 08:46:57
BNLS trammodule “Centraal Station” door Den Zoeterdam
Vandaag om 08:33:08
Toon hier je nieuwe (model-) spooraanwinst(en)... door Martijn de Kuiper
Vandaag om 07:41:55
Vieze treinen, gebouwen, wegen etc. (tips en plaatjes) door wpinkhof
Vandaag om 07:34:35
Nieuwe baan in schaal nul: station Kloosterp door roadster36
Vandaag om 00:45:00
Update: baan in de tropen door Hans Grasmaijer
29 maart 2020, 23:53:26
ECoS II (ESU), of Central Station (Marklin)? door Jan-Peter
29 maart 2020, 23:44:00
Onlangs gespot - gefotografeerd, de foto's door Modellbahnwagen
29 maart 2020, 23:33:42
NTM goederenwagens in Spoor-0 door FritsT
29 maart 2020, 23:31:07
Heuvelland, een tentoonstellingsbaantje in H0 door Eric B
29 maart 2020, 22:46:56
Flacatlan in N door St00mboy
29 maart 2020, 22:43:16
  

Auteur Topic: PWM met frequentieregeling met Arduino t.b.v. besturing analoge DC-treinbaan  (gelezen 7222 keer)

hepost

  • Offline Offline
  • Berichten: 49
Hallo,

Voor mijn analoog smalspoorbaantje heb ik een besturing gemaakt met een arduino nano, een H-brug bordje, aan-uit-aan schakelaar voor de rijrichting en een potmeter voor de snelheid. Bij mijn eerste poging kwam er geen beweging maar wel rook uit het treintje. Wat betreft elektronica en programmeren heb ik nog heel wat te leren. Na wat gepuzzel kwam ik erachter dat de frequentie te hoog was om het treintje op gang te helpen. Ik heb vervolgens de frequentie regelbaar gemaakt. Een frequentie tussen de 20 en 100 hertz lijkt goed te werken. Het rijgedrag is nog niet optimaal, de vraag is of het aan de aansturing ligt of aan het treintje zelf (een tweedehands liliput h0e treintje).

Een tweede vraag is wat ik kan doen om de boel te ontstoren. Ik heb een arduino asar besturing voor de servo's. Zodra het treintje begint te rijden gaan de servo's aardig tekeer. Ik heb wat gelezen over een condensator tussen de rails, draden wikkelen en zilverfolie om de draden van de servo. Wat is effectief? Wat voor condensator en hoe moet ik dit aansluiten? Dit heb ik nog niet kunnen vinden. In het treintje zit geen condensator o.i.d. Hoe kan ik er voor zorgen dat de motorregeling geen storingen op de servo's veroorzaakt?
« Laatst bewerkt op: 05 september 2017, 13:15:15 door Bert van Gelder. Reden: Titel »

hepost

  • Offline Offline
  • Berichten: 49
Re: pwm met frequentieregeling met arduino t.b.v. besturing analoge dc treinbaan
« Reactie #1 Gepost op: 05 september 2017, 09:18:36 »
Hierbij de code voor mijn treinbesturing.

#include <Bounce2.h>

//Deze code werkt op een Arduino Uno/nano rev.3 met een L298n h-brug board.
//Hardware: 4 aan-uit-aan schakelaars, 3 potmeters
//frequentieregeling gebaseerd op code van http://www.oxgadgets.com/2011/04/creating-a-variable-frequency-pwm-output-on-arduino-uno.html

//pin setup
int P_SPEEDA = 14; //potmeter A
int P_SPEEDB = 15; //potmeter B
int freq = 16; //potmeter voor frequentieregeling
const byte enA = 9; //enable A op h-brug
const byte enB = 10; //enable B op h-brug
const byte in1 = 3;
const byte in2 = 4;
const byte in3 = 5;
const byte in4 = 6;
#define dirA_F 7 //pin schakelaar A vooruit
#define dirA_R 8 //pin schakelaar A achteruit
#define dirB_F 11 //pin schakelaar B vooruit
#define dirB_R 12 //pin schakelaar B achteruit


// debounce voor de schakelaars
Bounce debouncer1 = Bounce();
Bounce debouncer2 = Bounce();
Bounce debouncer3 = Bounce();
Bounce debouncer4 = Bounce();

unsigned long duty1,duty2; // Duty Cycle in percentage.
unsigned long pwm1; // Value read from A0 and A2 to give PWM duty cycle output in terms // of 0-5V
unsigned long pwm2;
float xxx; // Float numbers to calculate duty for PWM 1 and PWM 2
float yyy;
int freqmap = 0;

//SETUP-----------SETUP-----------SETUP-----------SETUP-----------SETUP-----------SETUP

void setup(){
Serial.begin(9600);
delay(100);

TCCR1A = _BV(COM1A1) | _BV(COM1B1) ; // phase and frequency correct mode. NON-inverted mode
// TCCR1A = _BV(COM1A1) | _BV(COM1B1) | _BV(COM1A0) | _BV(COM1B0) ;
//phase/frequency correct mode. SELECT THIS FOR INVERTED OUTPUTS.
TCCR1B = _BV(WGM13) | _BV(CS11);
// Select mode 8 and select divide by 8 on main clock.

pinMode(enA,OUTPUT);
pinMode(enB,OUTPUT);
pinMode(in1,OUTPUT);
pinMode(in2,OUTPUT);
pinMode(in3,OUTPUT);
pinMode(in4,OUTPUT);
pinMode(dirA_F,INPUT);
pinMode(dirA_R,INPUT);
pinMode(dirB_F,INPUT);
pinMode(dirB_R,INPUT);

debouncer1.attach(dirA_F);
  debouncer1.interval(5); // interval in ms
debouncer2.attach(dirA_R);
  debouncer2.interval(5); // interval in ms
debouncer3.attach(dirB_F);
  debouncer3.interval(5); // interval in ms
debouncer4.attach(dirB_R);
  debouncer4.interval(5); // interval in ms
}

//LOOP-----------LOOP-----------LOOP-----------LOOP-----------LOOP
void loop() {

debouncer1.update();
debouncer2.update();
debouncer3.update();
debouncer4.update();

// Get the updated value:
  int value1 = debouncer1.read();
  int value2 = debouncer2.read();
  int value3 = debouncer2.read();
  int value4 = debouncer2.read();

//bepalen van de rijrichting regelaar A
if(value1==HIGH){
  digitalWrite(in1,LOW);
  digitalWrite(in2,HIGH);
  Serial.println("A vooruit");
  }
else if(value2==HIGH){
  digitalWrite(in1,HIGH);
  digitalWrite(in2,LOW);
  Serial.println("A achteruit");
  }
else{
  digitalWrite(in1,LOW);
  digitalWrite(in2,LOW);
  Serial.println("A stop");
  }

//bepalen van de rijrichting regelaar B
if(value3==HIGH){
  digitalWrite(in3,LOW);
  digitalWrite(in4,HIGH);
  Serial.println("B vooruit");
  }
else if(value4==HIGH){
  digitalWrite(in3,HIGH);
  digitalWrite(in4,LOW);
  Serial.println("B achteruit");
  }
else{
  digitalWrite(in3,LOW);
  digitalWrite(in4,LOW);
  Serial.println("B stop");
  }

//frequentieregeling en snelheid
freqmap = analogRead(freq);
ICR1 = map(freqmap, 0, 1023, 15000 , 5000); // 50000 = 20Hz en 10000 = 100Hz
//Serial.println(ICR1);           


pwm1 = analogRead(P_SPEEDA);
pwm2 = analogRead(P_SPEEDB);
xxx = float(pwm1);
// Turn read values from the POTs to float for mathematical
// adjustment.
yyy = float(pwm2);
xxx = xxx * ICR1;
// Multiply with ICR1 and divide by 1023 to give required percentage
yyy = yyy * ICR1;
xxx = xxx / 1023;
yyy = yyy / 1023;
//Assign values to OCR Registers, which output the PWM duty cycle.
OCR1A = int(xxx);
OCR1B = int(yyy);
}

Menno

  • Offline Offline
  • Berichten: 2727
    • Mijn van-alles website
Re: PWM met frequentieregeling met Arduino t.b.v. besturing analoge DC-treinbaan
« Reactie #2 Gepost op: 05 september 2017, 19:15:36 »
Bij mijn eerste poging kwam er geen beweging maar wel rook uit het treintje. Wat betreft elektronica en programmeren heb ik nog heel wat te leren. Na wat gepuzzel kwam ik erachter dat de frequentie te hoog was om het treintje op gang te helpen. Ik heb vervolgens de frequentie regelbaar gemaakt. Een frequentie tussen de 20 en 100 hertz lijkt goed te werken.
Dat is voor PWM-begrippen heel erg laag. In decoders wordt niet voor niets al jaren met 22 kiloHertz en (inmiddels) hoger gewerkt.
Wat wél kan: als je te lang hoogfrequente spanning op de baan zet met een te lage spanning om de motor aan te laten lopen, dan zal de motor wel opwarmen maar omdat die verder niet beweegt, wordt 'ie daar niet beter van. De truc van PWM is dat de spanning altijd maximaal is (bij een hele kleine dutycycle kan die zelfs nog hoger worden) maar dat je de dutycycle gaat variëren.
Een tweede vraag is wat ik kan doen om de boel te ontstoren. Ik heb een arduino asar besturing voor de servo's. Zodra het treintje begint te rijden gaan de servo's aardig tekeer. Ik heb wat gelezen over een condensator tussen de rails, draden wikkelen en zilverfolie om de draden van de servo. Wat is effectief? Wat voor condensator en hoe moet ik dit aansluiten? Dit heb ik nog niet kunnen vinden. In het treintje zit geen condensator o.i.d. Hoe kan ik er voor zorgen dat de motorregeling geen storingen op de servo's veroorzaakt?
Allereerst uitleggen hoe je de voeding regelt (los, uit 1 voeding?): bij dit soort zaken moet je hoge piekstromen gescheiden houden van stuurstromen, ook al delen die dezelfde massa. Zie het maar als een snelweg met een parallel-lopend fietspad: zowel auto's als fietsers kunnen dezelfde kant op, maar omdat de fietsers (de stuurstromen) zich ook vrijelijk op de snelweg kunnen begeven, gaat dat al snel mis.
Met een afgescheiden fietspad, is het probleem opgelost en kunnen zowel auto's als fietsers nog steeds dezelfde kant op.

Dat zal je ook moeten doen: scheid de voedingsspanningen zo snel mogelijk zodat de servo's zo min mogelijk meekrijgen van andere zaken. Ontkoppelen heet dat. Daarnaast kan een condensator hier en daar vaak niet zoveel kwaad om te proberen.
Draden van servo's en railspanning twisten is ook altijd een goed idee.

Nog mooier is een scoop: dan kan je kijken of je storing puur hardwarematig is (en veroorzaakt wordt door een rijdende trein) of dat de programmatuur rammelt, maar daar heb ik te weinig verstand van bij Arduino's.
Sowieso zie ik in die code (waarvan het fijn zou zijn als je het te lange commentaar even inkort) 4 schakelaars staan: ik weet dus niet wat er op een Arduino Uno of Nano gebeurt met ingangen die niet aangesloten zijn. Digitale ingangen die geen gedefiniëerd niveau hebben omdat ze niet aangesloten zijn maar wél aangeroepen worden als zijnde een ingang, moeten vaak een status krijgen om duidelijk te maken (voor de software) wat het niveau is. Dat kan dus betekenen dat je de ingang aan massa of voedingsspanning moet leggen (maar let op: zoek dat uit, ik heb geen idee hoe Atmel dat oplost (Atmel = fabrikant van de microcontrollers op Arduino's)

Klaas Zondervan

  • Offline Offline
  • Berichten: 18488
    • Pagina van klaas
Re: PWM met frequentieregeling met Arduino t.b.v. besturing analoge DC-treinbaan
« Reactie #3 Gepost op: 05 september 2017, 19:44:12 »
Dat is voor PWM-begrippen heel erg laag. In decoders wordt niet voor niets al jaren met 22 kiloHertz en (inmiddels) hoger gewerkt.
In de analoge wereld is een lage frequentie heel gewoon. De befaamde Weistra regelaar werkt met een frequentie tussen 30 en 100 Hz, variërend met de duty cycle. Die hele hoge frequenties in het kilohertz bereik werken alleen maar goed in combinatie met lastregeling.
"Without" wordt omgebouwd tot "Heuvelland"
Het werk aan "Uit en Thuis" ligt daardoor stil.

David Hoogvorst

  • Offline Offline
  • Berichten: 339
    • AnyRail
Re: PWM met frequentieregeling met Arduino t.b.v. besturing analoge DC-treinbaan
« Reactie #4 Gepost op: 05 september 2017, 19:46:06 »
Standaard zet je voor 'zwevende' ingangen, die dus een losse draad kunnen hebben, de pinMode op INPUT_PULLUP.
De waarde die je dan uitleest is HIGH.

Als je de schakelaar sluit, moet deze aan aarde worden verbonden, dus niet aan de 5V, maar aan GND.
De waarde die je dan uitleest is LOW.

De logica is dan:
waarde HIGH: schakelaar is uit
waarde LOW: schakelaar is aan

Dit alles om te voorkomen dat je willekeurige waarden uitleest omdat de zwevende draad als antenne werkt.
De elektronica voor dit Pull up-gedrag is in de Arduino ingebouwd, je hoeft verder niets te doen.

Succes!

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4639
Re: PWM met frequentieregeling met Arduino t.b.v. besturing analoge DC-treinbaan
« Reactie #5 Gepost op: 05 september 2017, 21:23:51 »
Voor PWM zou hoog prima moeten werken. Nouwja, prima als in "geen rook" :angel: Maar zeker op lage snelheden is een loc niet echt willend om weg te rijden, zeker oude motoren niet. Vandaar dat ik toen ik een analoge regeling had gemaakt met een microcontroller 30kHz hardware PWM en daar dan 80Hz software PWM (met lage duty) bovenop. Dat laatste overkwam de "motorkleef" waarna de 30kHz de loc prima kon regelen.

En voor voeding en klapperende servo's, de boel inderdaad ontkoppelen etc. Anders even een schema plaatsen van hoe je alles hebt aangesloten nu.


Timo
Verzonden vanaf mijn desktop met Firefox

hepost

  • Offline Offline
  • Berichten: 49
Re: PWM met frequentieregeling met Arduino t.b.v. besturing analoge DC-treinbaan
« Reactie #6 Gepost op: 05 september 2017, 22:41:30 »
Hierbij het huidige schema. De voeding voor de baan is een gestabiliseerde 12v netvoeding van 2A (geaard). De voeding voor de arduino's is een 9v netadapter, 2A. De voeding voor de servo's is een gestabiliseerde netvoeding van 5v, max. 10A (geaard). Er zijn 2 arduino Nano's, een voor de asar servobesturing en een voor de rijregelaar.

De aan-uit-aan schakelaars werken goed, geen storing op de rijrichting. Wat ik echter begrijp van David is dat het toch verstandiger is om de weerstanden verwijderen van de schakelaars, rechtstreeks aan de arduino aansluiten en in de code de pinMode op INPUT_PULLUP zetten voor de desbetreffende pinnen.

Voor de asar servobesturing weet ik niet zeker of hier ook sprake is van zwevende ingangen. Het werkt met drukknoppen en een weerstandsladder.

Het is inderdaad mijn bedoeling om een soort Weistra regelaar te maken met behulp van een Arduino. Mijn idee is om de frequentie op te laten lopen tijdens het vermeerderen van de snelheid. Eerst een snelheidspuls om de kleef te overwinnen lijkt ook te helpen. Hoe ik dit allemaal nog in mijn code moet verwerken weet ik nog niet. Of ik iets met lastregeling kan/moet doen is mij ook nog niet duidelijk. Eerst maar eens wat meer te weten komen over dat onderwerp.

Hierbij het schema voor mijn rijregelaar. In het schema heb ik een Uno bord geplaatst maar ik maak gebruik van een nano. Ook het motorbord komt niet helemaal overeen maar de aansluitingen zijn praktisch hetzelfde.




Klaas Zondervan

  • Offline Offline
  • Berichten: 18488
    • Pagina van klaas
Re: PWM met frequentieregeling met Arduino t.b.v. besturing analoge DC-treinbaan
« Reactie #7 Gepost op: 05 september 2017, 23:24:06 »
Vandaar dat ik toen ik een analoge regeling had gemaakt met een microcontroller 30kHz hardware PWM en daar dan 80Hz software PWM (met lage duty) bovenop. Dat laatste overkwam de "motorkleef" waarna de 30kHz de loc prima kon regelen.
Precies, je moet met een lage frequentie beginnen om de motorkleef te overwinnen. Een decoder met lastregeling doet dat door in eerste instantie "volle bak" te gaan en direct in te binden zodra hij constateert dat de motor draait.
"Without" wordt omgebouwd tot "Heuvelland"
Het werk aan "Uit en Thuis" ligt daardoor stil.

David Hoogvorst

  • Offline Offline
  • Berichten: 339
    • AnyRail
Re: PWM met frequentieregeling met Arduino t.b.v. besturing analoge DC-treinbaan
« Reactie #8 Gepost op: 06 september 2017, 09:54:30 »
Over de schakelaars: dit is niet per se verstandiger, maar wel veel eenvoudiger. Het scheelt 4 draden en weerstanden.

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4639
Re: PWM met frequentieregeling met Arduino t.b.v. besturing analoge DC-treinbaan
« Reactie #9 Gepost op: 06 september 2017, 19:44:17 »
@Klaas Zondervan, inderdaad :)

@David Hoogvorst, wat bedoel je met "niet verstandig"?


Timo
Verzonden vanaf mijn desktop met Firefox

David Hoogvorst

  • Offline Offline
  • Berichten: 339
    • AnyRail
Re: PWM met frequentieregeling met Arduino t.b.v. besturing analoge DC-treinbaan
« Reactie #10 Gepost op: 07 september 2017, 09:15:20 »
@Timo: 'hepost' suggereerde dat mijn suggestie 'verstandiger' zou zijn. Ik bedoelde te zeggen dat het niet verstandiger is, maar wel eenvoudiger om het Pull up mechanisme van de Arduino te gebruiken, omdat dit bedrading en weerstanden scheelt.

Hansepansje

  • Offline Offline
  • Berichten: 658
    • Perrongeluk - van de regen uit de drup
Re: PWM met frequentieregeling met Arduino t.b.v. besturing analoge DC-treinbaan
« Reactie #11 Gepost op: 07 september 2017, 11:40:39 »
Als we toch gaan vereenvoudigen qua hardware: laat dan ook de aparte potmeter voor de frequentie vervallen.
In plaats hiervan: regel softwarematig (voor A en B apart) dat (net als bij de Weistra regelaar) de frequentie aangepast wordt aan de ingestelde snelheid. Dan krijg je ook een beter rijgedrag.

Groets, Hans
Dachbodenheim: N-spoor, Fleischmann Piccolo, HCCM elektronica, eigen software

Klaas Zondervan

  • Offline Offline
  • Berichten: 18488
    • Pagina van klaas
Re: PWM met frequentieregeling met Arduino t.b.v. besturing analoge DC-treinbaan
« Reactie #12 Gepost op: 07 september 2017, 13:24:44 »
En gewoon de Weistra regelaar nabouwen, is dat een optie? Of zeg ik nou iets heel raars?  ;D
"Without" wordt omgebouwd tot "Heuvelland"
Het werk aan "Uit en Thuis" ligt daardoor stil.

72sonett

  • Team encyclopedie
  • Offline Offline
  • Berichten: 1510
    • El Carrilet
Re: PWM met frequentieregeling met Arduino t.b.v. besturing analoge DC-treinbaan
« Reactie #13 Gepost op: 07 september 2017, 13:56:03 »
Of een  kant-en-klare kopen bij Aliexpress. Voor dat geld kun je ze niet zelf maken.

El Carrilet

Not sent from my Pocketline Swing 380, Xperia Z2, iPhone, C5503, ALE-L21 or SM-G900F using Tapatalk.

MH

Klaas Zondervan

  • Offline Offline
  • Berichten: 18488
    • Pagina van klaas
Re: PWM met frequentieregeling met Arduino t.b.v. besturing analoge DC-treinbaan
« Reactie #14 Gepost op: 07 september 2017, 14:30:11 »
Dat is een ding wat op 10 kHz draait. Dus heel wat anders dan een Weistra regelaar.
"Without" wordt omgebouwd tot "Heuvelland"
Het werk aan "Uit en Thuis" ligt daardoor stil.