Doel:€250.00
Donaties:€65.00

Per saldo:€-185.00

Steun ons nu!

Laatst bijgewerkt
op 17-03-2020
Algemeen

De stichting

Recente berichten

Mijn eerste H0-modeltreinbaan in aanbouw door Wim Vink
Vandaag om 12:10:06
Jacobs draaistellen maken/ontwerpen door Mark D.
Vandaag om 12:06:02
NL baan: Frotterdam in h0 door Ben
Vandaag om 12:04:48
The R & J Colliery Ltd. 1:76 Brits. door GD
Vandaag om 11:59:05
(BNLS modulebaan) BNLS-Forumbaan algemeen door Ad Cleijsen
Vandaag om 11:54:59
Länderbahn en Reichsbahn locomotieven. door Rondje_HO
Vandaag om 11:53:17
ECoS II (ESU), of Central Station (Marklin)? door ruben derks
Vandaag om 11:37:24
Frans diorama 1:48 door Wim Corduwener
Vandaag om 11:33:14
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
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
De Hondsrugbaan, H0 door Dion
Vandaag om 10:47:07
BNLS trammodule: “Jewels of the HTM” door ronald1956
Vandaag om 10:38:37
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 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
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
  

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

Klaas Zondervan

  • Offline Offline
  • Berichten: 18488
    • Pagina van klaas
Re: PWM met frequentieregeling met Arduino t.b.v. besturing analoge DC-treinbaan
« Reactie #30 Gepost op: 14 september 2017, 14:21:48 »
Voor wie er nog interesse in heeft hier de grafieken die ik heb opgenomen van de Weistra regelaar.

De eerste grafiek geeft het verband tussen de potmeterstand enerzijds en de pulsfrequentie en duty-cycle anderzijds.



De tweede grafiek geeft het verband tussen potmeterstand en baanspanning/snelheid.



Wat opvalt is dat de frequentie redelijk lineair verloopt. De grafiek van de duty-cycle is enigszins hol, terwijl baanspanning en snelheid juist bol verlopen. Strikt genomen klopt dat niet, duty-cycle en baanspanning zouden theoretisch dezelfde vorm moeten hebben.
In de eerste 20% van de potmeter gebeurt er niks terwijl boven 70% de snelheid aardig uit de hand loopt. Ik overweeg dan ook om aan de onderkant en de bovenkant van de potmeter vaste weerstanden toe te voegen, zodat de potmeter zelf alleen het bereik tussen 20 en 70% bestrijkt.

De snelheidsproef is gedaan met een Roco TEE treinstel dat is omgebouwd naar analoog (af fabriek zit er standaard een decoder in).
Verder is het treinstel voorzien van andere wormsets. Waar het eerst een slak was is het nu een racemonster geworden.
"Without" wordt omgebouwd tot "Heuvelland"
Het werk aan "Uit en Thuis" ligt daardoor stil.

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4639
Re: PWM met frequentieregeling met Arduino t.b.v. besturing analoge DC-treinbaan
« Reactie #31 Gepost op: 15 september 2017, 09:39:08 »
Hoi Klaas,

Interessante meting :) Frequentie is inderdaad aardig lineair met de potmeter maar de duty iets minder. Maar denk dat een lineaire interpretatie wel goed te maken is. Maar liever zou je natuurlijk de boel lineair maken met de snelheid of baanspanning. Hoe heb je dat laatste gemeten? Gemiddelde of RMS?


Timo
Verzonden vanaf mijn desktop met Firefox

Klaas Zondervan

  • Offline Offline
  • Berichten: 18488
    • Pagina van klaas
Re: PWM met frequentieregeling met Arduino t.b.v. besturing analoge DC-treinbaan
« Reactie #32 Gepost op: 15 september 2017, 09:42:22 »
De baanspanning heb ik gemeten op het gelijkspanningsbereik. Dan meet je vanzelf de gemiddelde waarde.
"Without" wordt omgebouwd tot "Heuvelland"
Het werk aan "Uit en Thuis" ligt daardoor stil.

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 #33 Gepost op: 03 oktober 2017, 17:56:01 »
Leuk topic!
Omdat ik zowel treintjes als Arduino's leuk vind, ben ik maar eens begonnen om te kijken of ik een 'Weistrarduino regelaar' kan maken.

Inmiddels ben ik op een proefbordje met Arduino, potmeter, L293D, motortje en LCD display zover dat ik de motor heen en weer kan laten draaien o.b.v. de stand van de potmeter, en wat info op het display tonen.
Nu ben ik aan het kijken of ik de PWM frequentie van de Arduino aangepast kan krijgen. Als dat ook lukt, dan liggen de ingredienten voor de 'Weistrarduino regelaar' voor het oprapen om er wat leuks van te bakken.  ::)

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

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4639
Re: PWM met frequentieregeling met Arduino t.b.v. besturing analoge DC-treinbaan
« Reactie #34 Gepost op: 03 oktober 2017, 21:58:37 »
De frequenties van de Weistra regelaar zijn erg laag. Ook is deze steeds iets anders per stand. De hardware PWM is dan alleen maar lastig. Denk dat je naar software PWM moet en deze maken op basis van een timer interrupt. Verder alleen geen tijd gehad dit verder uit te werken... ::)


Timo
Verzonden vanaf mijn desktop met Firefox

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 #35 Gepost op: 04 oktober 2017, 08:15:24 »
Timo,

De frequentie van de 'standaard PWM' is inderdaad te hoog. Maar de frequentie en duty cycle van een timer is softwarematig aangepast.
Gisteravond een eerste poging gedaan en er zit schot in: Het aangesloten testmotortje komt in beweging, nog beter zelfs als de startfrequentie bij lage duty cycle onder de 30 Hz zakt, bijv 15 Hz.
Nu dit in de basis lijkt te werken, wil ik verdergaan en er een lokmotortje op aansluiten. Ik heb ook een Weistra regelaar, dus indien nodig kan ik mooi vergelijken. Alleen heb ik geen scope, dus precies meten van frequenties en duty cycles gaat lastig worden.

Wordt vervolgd.

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

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4639
Re: PWM met frequentieregeling met Arduino t.b.v. besturing analoge DC-treinbaan
« Reactie #36 Gepost op: 04 oktober 2017, 11:05:52 »
Je kan het inderdaad wijzigen. Maar niet onafhankelijk ;) De PWM frequentie kan je maar instellen op een paar waardes met behoudt van de volle range voor de duty cycle. Bij benadering zijn dat 30Hz, 60Hz, 122Hz, 244Hz, 490Hz, 980Hz, 3,9kHz, 7,8kHz, 31kHz en 62kHz. Alle andere frequenties beïnvloed de resolutie van de duty cycle.


Timo
Verzonden vanaf mijn desktop met Firefox

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 #37 Gepost op: 04 oktober 2017, 17:31:05 »
Ja Timo, dat heb ik gezien, maar me bij de eerste pogingen niet teveel in verdiept. Ga ik zeker nog doen.
Even kort door de bocht: Als ik van 30 Hz met 255 stappen 'terug' ga naar 90 Hz, dan zou ik nog zo'n 85 stappen overhouden. Of misschien zelfs van 511 stappen terug naar 170. Dat lijkt me een voldoende range om daarmee de duty cycle nog genuanceerd te kunnen regelen.

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

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4639
Re: PWM met frequentieregeling met Arduino t.b.v. besturing analoge DC-treinbaan
« Reactie #38 Gepost op: 04 oktober 2017, 22:12:59 »
85 stappen is niet zo veel voor gladde overgangen en als je de verschillen tussen de stappen een beetje gelijk wilt hebben. En bedenk dat je vaak niet tot 100% duty wilt omdat het anders een TGV is.

Maar lastiger is het rekenwerk om steeds de juiste duty en freqenctie te bepalen. Toegegeven, dit kan in een lookup. Maar ik denk dat je een vloeiendere lijn krijgt als je zelf aan de slag gaat met een timer :)


Timo
Verzonden vanaf mijn desktop met Firefox

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 #39 Gepost op: 20 oktober 2017, 11:45:19 »
Een eerste versie is gelukt! Zie hier  8)
(M'n excuses voor de matige beeldkwaliteit van het filmpje)

Benodigdheden voor deze pilot zijn minimaal: 12 volt voeding, Arduino, L293D regelaar, wat draadjes en voor de liefhebbers die 'binnenin' willen kijken een LCD display.
Op het filmpje is te zien dat de loksnelheid mooi te regelen is. De hierbij gebruikte instellingen zijn als volgt:
- frequentie bereik: 30-100 Hz
- duty cycle bereik: 0-75%
- aantal stappen: 64

Het idee achter deze pilot (net als bij de Weistra regelaar): de stand van de potmeter wordt (in beginsel zo lineair mogelijk) omgezet in frequentie en duty cycle van het Arduino PWM signaal.
Het rekenwerk voor de omzettingen (van potmeterstand naar frequency/duty cycle naar timer trigger levels valt reuze mee.
Maar om snel wat waarden in te kunnen stellen/veranderen (nulstand potmeter, start/stop waarde van frequentie en max. duty cycle gebruik ik een paar hashing tabellen. Om bij het programmeren me niet te verslikken in alle getalletjes op een rij, heb ik een spreadsheet gemaakt. Hiervandaan kan ik de definities van de verschillende hashing tabellen zo in de code kopieren.

Als toelichting op wat je op het filmpje ziet, op het LCD display:
  162[10] 193/21
  41Hz, 12%
dan betekent dit:
  162: ingelezen stand van de potmeter [bereik: 0-1023]
  [10]: hieruit afgeleide stap [bereik: 0-64]
  193: bovenste timer trigger level (OCnA, bepaalt frequentie)
  21: onderste timer trigger level (OCnB, bepaalt samen met OCnA de duty cycle)
  41Hz: frequentie van PWM signaal
  12%: duty cycle van PWM signaal

Vanuit stilstand heel langzaam optrekken en vloeiend versnellen lijkt hiermee prima mogelijk.
Binnenkort de boel maar eens aansluiten op een railovaal, zodat het rijgedrag over de hele range goed te bestuderen is. De eerste indruk op een stuk flexrail is in ieder geval bemoedigend.  ::)

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

Daan Neijenhuis

  • Offline Offline
  • Berichten: 1384
  • HCC!m-IG
Re: PWM met frequentieregeling met Arduino t.b.v. besturing analoge DC-treinbaan
« Reactie #40 Gepost op: 20 oktober 2017, 12:11:21 »
Cool !   (y)
Terug van weggeweest...

dickkoning

  • Offline Offline
  • Berichten: 140
Re: PWM met frequentieregeling met Arduino t.b.v. besturing analoge DC-treinbaan
« Reactie #41 Gepost op: 20 oktober 2017, 12:31:02 »
Leuk gedaan
Kun je een schema en je code eens posten
Dick

hepost

  • Offline Offline
  • Berichten: 49
Re: PWM met frequentieregeling met Arduino t.b.v. besturing analoge DC-treinbaan
« Reactie #42 Gepost op: 20 oktober 2017, 15:38:35 »
Mooi! Die trein kruipt echt weg. Ik ben benieuwd of het voor mijn treintje ook zo goed zal werken.

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 #43 Gepost op: 21 oktober 2017, 20:27:33 »
Op verzoek, hierbij wat meer info van m'n pilot.

Het schema ziet er als volgt uit:


De motorspanning die op pen 8 van de L293D wordt aangeboden heb ik afgetakt van de inkomende externe voeding van de Arduino, die ik voor deze pilot op 12 volt heb aangesloten.

De code voor de Arduino is als volgt:
// PWM-test-2
// Translate potmeter position into frequence and duty cycle of PWM signal

/*-----( Import needed libraries )-----*/
#include <Wire.h>  // Comes with Arduino IDE
#include <LCD.h>
// Get the LCD I2C Library here: https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
#include <LiquidCrystal_I2C.h>
// set the LCD address to 0x27 for a 16 chars 2 line display
// Set the pins on the I2C chip used for LCD connections:
//                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address

/*-----( Define constants and variables )------*/
unsigned long pwm1;        // Value read from A03 to give PWM duty cycle output in terms // of 0-5V
unsigned long potMeter;

const byte pinPotmeter = 3;
const byte pinMotor1    = 4;
const byte pinMotor2    = 5;
const byte pinTimer2a  = 3;
const byte pinTimer2b  = 11;
const byte MaxStep      = 64;
int potmeterLimits[] = {10, 26, 42, 57, 73, 89, 105, 121, 137, 152, 168, 184, 200, 216, 232, 247, 263,
279, 295, 311, 327, 342, 358, 374, 390, 406, 422, 437, 453, 469, 485, 501, 517, 532, 548, 564, 580,
596, 611, 627, 643, 659, 675, 691, 706, 722, 738, 754, 770, 786, 801, 817, 833, 849, 865, 881, 896,
912, 928, 944, 960, 976, 991, 1007, 1023};
// For display purpose only, required values for PWM Frequency and Duty Cycle.
int Freq_Hashing[] = {31, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52,
53, 54, 55, 56, 57, 58, 59, 60, 61, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 74, 75, 76, 77, 78, 79, 80, 81,
82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96, 97, 98, 99, 100};
int DC_Hashing[] = {0, 1, 2, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 25, 26, 27,
28, 29, 30, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42, 43, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 57, 59,
60, 61, 62, 63, 64, 66, 67, 68, 69, 70, 71, 73, 74, 75};
// Values for OCnA and OCnB, calculated from PWM Frequency and Duty Cycle.
int OCnA_Hashing[] = {255, 255, 247, 238, 231, 223, 217, 210, 204, 199, 193, 188, 183, 179, 174, 170,
166, 162, 159, 155, 152, 149, 146, 143, 140, 137, 135, 132, 130, 128, 125, 123, 121, 119, 117, 115, 113,
112, 110, 108, 107, 105, 104, 102, 101, 99, 98, 97, 95, 94, 93, 92, 91, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, 79, 79};
int OCnB_Hashing[] = {0, 2, 4, 7, 9, 12, 14, 16, 18, 20, 21, 23, 24, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36,
37, 38, 39, 40, 41, 41, 42, 43, 44, 44, 45, 46, 46, 47, 47, 48, 48, 49, 49, 50, 50, 51, 51, 52, 52, 53, 53, 54,
54, 55, 54, 55, 55, 56, 56, 56, 57, 57, 57, 57, 58, 59};

void setup()
{
  // Initialize motor pins
  pinMode(pinMotor1, OUTPUT);
  pinMode(pinMotor2, OUTPUT);

  // Set motor pins unequal to ensure movement controlled by enable
  digitalWrite(pinMotor1, HIGH);
  digitalWrite(pinMotor2, LOW);

  // Set timer 2 op phase-correct PWM with OCRA controlling top limit, prescaler 1024
  pinMode(pinTimer2a, OUTPUT);
  pinMode(pinTimer2b, OUTPUT);
  TCCR2A = _BV(COM2A0) | _BV(COM2B1) | _BV(WGM20);
  TCCR2B = _BV(WGM22)  | _BV(CS22)   | _BV(CS21) | _BV(CS20);  // Prescaler Value is 1024

  // Initialize lcd screen
  lcd.begin(16, 2);  // initialize the lcd for 16 chars 2 lines
  lcd.backlight();    // Turn backlight on
}

byte getPotmeterSetting()
{
  byte iCheck = 0;
  // Read potmeter value;
  potMeter = analogRead(pinPotmeter);

  // Determine matching index value and return it
  while ((potMeter > potmeterLimits[iCheck]) && (iCheck < MaxStep)) { iCheck++; }
  return iCheck;
}

void setTimer2(int iIndex)
{
  //Assign values to OCR Registers, which determine PWM frequency and duty cycle.
  OCR2A = OCnA_Hashing[iIndex];
  OCR2B = OCnB_Hashing[iIndex];

  // Display various variables on LCD screen
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(potMeter); lcd.print("["); lcd.print(iIndex); lcd.print("] ");
  lcd.print(OCnA_Hashing[iIndex]); lcd.print("/"); lcd.print(OCnB_Hashing[iIndex]);
  lcd.setCursor(0, 1);
  lcd.print(Freq_Hashing[iIndex]);
  lcd.print("Hz, "); lcd.print(DC_Hashing[iIndex]); lcd.print("%");
}

void loop()
{
  // Check potmeter value and set frequency and duty cycle accordingly
  setTimer2(getPotmeterSetting());
  // Wait half a second
  delay(500);
}

Vragen of opmerkingen zijn welkom.

Groets, Hans
« Laatst bewerkt op: 21 oktober 2017, 21:49:37 door Hansepansje »
Dachbodenheim: N-spoor, Fleischmann Piccolo, HCCM elektronica, eigen software

72sonett

  • Team encyclopedie
  • Offline Offline
  • Berichten: 1510
    • El Carrilet
Re: PWM met frequentieregeling met Arduino t.b.v. besturing analoge DC-treinbaan
« Reactie #44 Gepost op: 21 oktober 2017, 21:36:38 »
Kun je de dataregels in het codeblok korter maken, het past niet op het scherm.
El Carrilet

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

MH