Doel:€250.00
Donaties:€157.50

Per saldo:€-92.50

Steun ons nu!

Laatst bijgewerkt
op 30-06-2020
Algemeen

De stichting

Recente berichten

De bouw van mijn modelbaan in Thailand door Thai-Bundesbahn
Vandaag om 03:23:48
Koploper 1 bezetpunt werkt om en om door kimi07
Vandaag om 00:59:42
Foto-techniek voor modeltreinen, softwarematig grote scherptediepte (Focus Stack door Syb030
Vandaag om 00:41:24
Spoor op industrieterrein Lage Weide door Thom
Vandaag om 00:11:50
NS D 4101-45 spoor 0 door mwdb
Vandaag om 00:05:13
Havenbaantje, Duitse havenstad, periode 2e wereldoorlog. door coldforged
14 juli 2020, 23:47:26
Frans loodsje et cetera door Noordernet
14 juli 2020, 23:19:52
Raadplaatje door RE465
14 juli 2020, 23:19:35
Toekomst van modeltreinbeurzen? door Rondje_HO
14 juli 2020, 23:18:51
Onlangs gespot - gefotografeerd, de foto's door Rondje_HO
14 juli 2020, 23:17:38
Ervaringen met veilingsites en webshops (Marktplaats, Ebay, Catawiki, etc). door Rondje_HO
14 juli 2020, 23:09:50
Projekt 083-338 door tothebeach
14 juli 2020, 23:08:36
Mallnitzer Tauernbahnstrecke ÖBB N Spoor door Schachbrett
14 juli 2020, 22:56:45
NS Stoomverwarmingswagen door Hans van de Burgt
14 juli 2020, 22:39:22
Rosedale abbey, het baanplan. door Tom Z.
14 juli 2020, 22:08:40
Joops Fantasie Wereld in schaal 0e door AndréDev
14 juli 2020, 22:06:23
Wil weer beginnen door Frank 123
14 juli 2020, 21:59:22
De kleine modellen met het grote voorbeeld door Mcn1986
14 juli 2020, 21:38:40
(BNLS modulebaan) BNLS-Forumbaan algemeen door St00mboy
14 juli 2020, 21:32:23
Mijn eerste H0-modeltreinbaan in aanbouw door Wim Vink
14 juli 2020, 21:21:41
Treinbaan bouwen in een koffer door bask185
14 juli 2020, 21:03:27
Reichsbahn, periode 2e wereldoorlog door Edgy
14 juli 2020, 20:50:38
Bemo De 2/2 151 wil digitaal niet (meer) rijden, analoog wel. door Ronald Halma
14 juli 2020, 20:28:50
Lokschuppen Ueckermünde door MOVisser
14 juli 2020, 20:10:51
NS Dienstgebouw bouwen voor Hoekdam door Vislijn
14 juli 2020, 20:01:46
Aachenau West door wob
14 juli 2020, 19:42:50
Ervaringen met bezorgdiensten (PostNL, DHL, etc) door timtrein
14 juli 2020, 19:26:08
Beurs in Houten 29 augustus 2020 - de voor- en nabeschouwing door NL-modelspoor
14 juli 2020, 18:49:43
Waar zijn dienstregelingen te vinden van goederentreinen in Nederland? door Ben
14 juli 2020, 18:18:33
NS modelbaan Hoekdam H0 door barry1972
14 juli 2020, 18:04:25
  

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

Klaas Zondervan

  • Offline Offline
  • Berichten: 19185
    • 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 even stil.

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4670
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: 19185
    • 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 even 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: 4670
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: 4670
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: 4670
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: 1434
  • 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)
Wanneer lees je nou een handleiding?   ;D

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: 54
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: 1630
    • 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