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

kan de yamorc 6016es-cs een digikeijs dr4088 cs vervangen? door Dirk
Vandaag om 16:13:09
Modelspoorbaan van Einte door cor_b
Vandaag om 16:00:14
Module vliegveld Jan van Mourik door MOVisser
Vandaag om 15:52:51
Uhlenbrock Intellibox 3 door Karst Drenth
Vandaag om 15:38:14
Mijn eerste H0-modeltreinbaan in aanbouw door Wim Vink
Vandaag om 15:36:24
23 augustus modelspoorbeurs Houten door Wim Vink
Vandaag om 15:34:33
US diorama in H0 door Wim Vink
Vandaag om 15:31:58
Microstepper motoren voor armseinpalen door AP3737
Vandaag om 15:22:27
Open huis VAMES Modelspoorclub Apeldoorn door Joz
Vandaag om 15:13:44
iTrain baanontwerp door Chris Westerduin
Vandaag om 14:57:01
Ervaringen met bezorgdiensten (PostNL, DHL, etc) door Hollandserhbfan
Vandaag om 14:44:40
Z21 App gebruiken om wissels via de 10836 decoder door n-driver
Vandaag om 14:44:00
24e smalspoormodelbouwdagen 30 en 31 augustus 2025 bij Stoomtrein Katwijk Leiden door Peter Soonius
Vandaag om 14:30:18
Deining in Dönsdorf door Basilicum
Vandaag om 14:23:27
Roco BR 93 stroomafname door Henk Veenstra
Vandaag om 14:14:32
2025-8-18: Spoor verzakt: veel minder treinen tussen Eindhoven en Utrecht door VAM65
Vandaag om 14:11:57
Scandinavië-IG: Skandinavisk bangården. Voor op Scandinavië gerichte spoorzaken door Loki
Vandaag om 13:42:33
Bahnstrecke 5867 door puntenglijder
Vandaag om 13:38:05
De Projecten van RetroJack door RetroJack
Vandaag om 13:36:35
La Fabrique des petits réseaux (1:87) door RhB-Mikey
Vandaag om 12:44:57
Toon hier je nieuwe (model-) spooraanwinst(en)... door Quinzeedied
Vandaag om 12:39:50
De overeenkomst tussen een Ovaalramer en een Motorpost. door FritsT
Vandaag om 12:38:20
Yet Another Servo Decoder door AP3737
Vandaag om 12:09:36
Industrieel smalspoor inspiratiedraadje door spoorijzer
Vandaag om 11:50:34
Toon hier je (model)TRAM foto's. door R1954
Vandaag om 11:30:30
Onlangs gespot - gefotografeerd, de foto's door Klaas Zondervan
Vandaag om 11:27:26
0n30 diorama: Sedona Verde River Canyon door Ronald Halma
Vandaag om 11:18:48
Einde HSIJ (stoomtrein Hoogovens) in zicht door dh3201
Vandaag om 11:07:18
Hengelo in 1981-1982, maar dan anders: Kassenberg in N door spoorijzer
Vandaag om 09:47:10
Da's Daz 2 door spoorijzer
Vandaag om 09:46:49
  

Auteur Topic: Yet Another Servo Decoder  (gelezen 21090 keer)

AP3737

  • Offline Offline
  • Berichten: 344
Yet Another Servo Decoder
« Gepost op: 08 January 2025, 22:11:20 »
Beste Forumlezers

In dit draadje wil ik iets vertellen over de servo decoder die ik momenteel aan het bouwen ben. Een aantal lezers denkt misschien "nog een servo decoder, is dat nodig?". Laat ik daarom beginnen met mijn motivatie hiervoor: ik stoor me aan de vele servo's die kabaal blijven maken, ook al staan ze stil.

Er zijn meerdere redenen waarom servo's die stilstaan toch lawaai  blijven maken. Naast de kwaliteit van de servo zelf, is het probleem vaak een slechte 5V servo voeding of een instabiel PWM-signaal. Ook een slechte afstelling van de eindpositie kan een probleem zijn, zeker als de servo slechts over een kleine hoek kan bewegen. Een goede servo decoder heeft daarom (volgens mij) de mogelijkheid om de servo spanning en/of het servo PWM signaal aan of uit te schakelen. Uiteraard moet zoiets netjes synchroon gebeuren, dus niet toevallig tijdens een puls.

De hard- en software ben ik zelf aan het maken. Hieronder twee foto's van de decoder. De eerste zoals die door JLCPCB bij mij aan de deur is afgeleverd, de tweede met alle componenten gemonteerd. Het gaat hier om een eerste test print, waarvoor ik, als ik het mij goed herinner, indertijd inclusief alles ongeveer 35 Euro heb betaald voor 5 printjes. Dit is echter niet de definitieve print; in een volgende versie zal ik een paar zaken aanpassen.




Wat opvalt is dat ik slechts 2 servo aansluitingen heb gemaakt, in plaats van 8, zoals je dat vaak elders ziet. Ik heb daarvoor twee redenen. De eerste is dat ik de kabeltjes naar de diverse servo's kort wil houden, om eventuele storingen te voorkomen. De tweede reden is dat servo's redelijk wat stroom kunnen trekken (meer dan 0,5A / servo, zie: https://www.youtube.com/watch?v=TszHV5l-uvg). Als 8 servo's gelijktijdig zouden bewegen, dan gaat er ergens iets mis.

Ik heb daarom gekozen voor een (TPS54331) Step-Down converter; dit is bij JLCPCB een basic part, is goedkoop en ruim voldoende. In de aanvoer leiding zijn twee weerstanden van 10 Ohm opgenomen, om de inrush stroom te beperken. Verder is de schakeling helemaal standaard.


De 5V aansluiting van de servo kan aan en uitgeschakeld worden. Vaak neemt men daarvoor een MOSFET, maar ik heb een USB power IC genomen (LPW5209AB5F). Dat is (helaas) wel een extended part, maar kost bijna niets en heeft ingebouwde kortsluitingbeveiliging. Aan de uitgang zit een 10uF SMD-condensator, om de spanning stabiel te houden. Wat ik nog moet testen, is hoe snel dit geheel kan schakelen.

Ook voor de servo PWM leiding heb ik een (SN74LVC1G125DBVR) bus driver IC genomen (helaas ook een extended part). De Servo zit dus niet direct op een uitgang van de processor.


De rest is relatief standaard, behalve dat ik voor het IC niet gekozen heb voor de vertrouwde 328 (Arduino Uno / Nano), maar voor een AVR DxCore processor. Dit is een relatief nieuwe processor, die (volgens mij) door Microchip een beetje gepushed worden als opvolgers van de Alom bekende Atmel ICs. Deze nieuwe generatie processoren zijn niet alleen goedkoper dan de oude, maar hebben ook veel betere peripherals, zodat voor een aantal taken veel elegantere oplossingen (= minder interrupts) mogelijk zijn.

Binnenkort verder.

Groet

Aiko

Karst Drenth

  • Offline Offline
  • Berichten: 10485
  • NS blauw, groen, rood, bruin, grijs en standgroen
    • Plan U op Sleutelspoor
Re: Yet Another Servo Decoder
« Reactie #1 Gepost op: 08 January 2025, 23:25:02 »
Hoi Aiko,

Originele titel  ;D ;D


En origineel ontwerp (y)  Een DC-DC converter is idd de enige manier om een goede +5V te krijgen.

Alleen, het brommen in de eindstand is ook eenvoudig weg te nemen door het uitschakelen van de puls. Dat heeft als voordeel, dat je geen last krijgt van het "zwiepen"  van sommige servo's als de power er op komt.

Verder zou ik kiezen voor een snellere optocoupler voor je DCC.  Ik gebruik tegenwoordig alleen nog de TLP2358 van Toshiba. Mooi snel en subliemen flanken door de Push-Pull uitgang.

Maar dat power-switch IC is interessant ! Maakt de boel gelijk kortsluitvast (y) Ben wel benieuwd hoe je met die nieuwe uC een rotsvast PWM signaal gaat maken. Die dingen hebben idd leuke features aan boord.

Groet,
Karst


bask185

  • Offline Offline
  • Berichten: 5009
Re: Yet Another Servo Decoder
« Reactie #2 Gepost op: 09 January 2025, 00:32:33 »
Leuk ontwerp. Ik ben wel nieuwsgierig naar waar al die connectoren voor zijn. Heb je DCC en power dubbel uitgevoerd om je bedrading makkelijker te maken?

Ik ben bij jlcpcb fan van de 6n137. Die is ook snel, tevens goedkoop en belangrijkste: ze hebben er ook een als 'prefered extended' part  (y). Die heeft me nog geen problemen gegeven.

Citaat
Er zijn meerdere redenen waarom servo's die stilstaan toch lawaai  blijven maken
vzik doen ze dat alleen als je ze pulsen blijft voeren. Ik laat ze tegenwoordig 500ms na het bereiken van de eindstand nog even doordrukken voordat ik de pulsen stop. Bij het finetunen met de knopjes methode vind ik dat fijn.

Citaat
waarvoor ik, als ik het mij goed herinner, indertijd inclusief alles ongeveer 35 Euro heb betaald voor 5 printjes
Is dat inclusief alle componenten die je er zelf op moet zetten?

Citaat
Als 8 servo's gelijktijdig zouden bewegen, dan gaat er ergens iets mis.
Dit is oplosbaar in software. Maar volgens mij is het ook een extreem uitzonderlijk scenario, dat je 8 servo's op 1 DCC decoder tegelijk kan laten bewegen. Met de multimaus red ik dat niet, misschien wel met iTrain. Maar ook daar zit standaard al iets van een vertraging tussen accessoire instructies.

Citaat
De rest is relatief standaard, behalve dat ik voor het IC niet gekozen heb voor de vertrouwde 328
Ik snap natuurlijk dat we voorruit moeten en oude chips vaarwel moeten zeggen op een gegeven moment. Maar ook de 328 hebben ze als een 'preferred extended' en voor deze simpele taak, 2 servo's en DCC decoderen.. It does get the job done. En arduino's servo library vind ik het goed doen. Ik gebruik die nog altijd. Ik weet eigenlijk niet in hoeverre Arduino die nieuwe dxcores ondersteunen.

Citaat
De eerste is dat ik de kabeltjes naar de diverse servo's kort wil houden
Dit probleem kan je wellicht goedkoper oplossen, door een setje van 2 printjes te maken die het signaal robuuster maken. Je kan dan bijvoorbeeld een zender maken die het signaal omzet naar een stroompje van 20mA ofzo en aan de ontvangende kant van dat stroompje weer een mooie 5V puls maken voor de servo.



Als je langere servo kabels wel kan toepassen zonder problemen, kun je er meer op een decoder prakken. En dat scheelt kosten. En uiteraard microfoon snoer schijnt het ook erg goed te doen  ::). Ik heb ook wel eens een gerucht gelezen over aluminium folie om de kabel wikkelen, maar dat heb ik nog niet getest of gezien.

Wat bij het opstarten ook handig is om te doen bij servo's, is om eerst het signaal op de pin te zetten, dan de spanning in te schakelen en dan de puls weer uit te zetten. Dit zorgt er voor dat de servo's stil blijven staan bij het inschakelen (mits ze niet extern bewogen zijn terwijl de decoder uit was)  Die buck converter van je heeft een enable pin, die je daarvoor kan gebruiken. En anders doet een pull-up weerstand op de lijn ook een good job in servo's stil houden.

De uProcessor kan je in dat geval voeden met een extra LDO circuit.

Mvg,

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

Klaas Zondervan

  • Offline Offline
  • Berichten: 26715
    • Pagina van klaas
Re: Yet Another Servo Decoder
« Reactie #3 Gepost op: 09 January 2025, 10:10:24 »
Dit probleem kan je wellicht goedkoper oplossen, door een setje van 2 printjes te maken die het signaal robuuster maken. Je kan dan bijvoorbeeld een zender maken die het signaal omzet naar een stroompje van 20mA ofzo en aan de ontvangende kant van dat stroompje weer een mooie 5V puls maken voor de servo.
Zo maak je iets wat al tamelijk ingewikkeld is nog ingewikkelder.

In het schema van Aiko zit een pull-up weerstand van 4k7 op de pulslijn. Het is effectiever om die weerstand dicht bij de servo te plaatsen. Zo maak je de signaallijn laagohmig en minder vatbaar voor externe stoorinvloeden.
Projecten:
Dubbelom
Halte Assel
Geluk, dat is vooraan staan als de overweg gesloten is.

AP3737

  • Offline Offline
  • Berichten: 344
Re: Yet Another Servo Decoder
« Reactie #4 Gepost op: 09 January 2025, 20:33:55 »
Beste Karst, Bas en Klaas

Voordat ik verder ga, reageer ik eerst even op wat vragen en opmerkingen.

Originele titel  ;D ;D
Het duurde even voordat ik begreep waarom je de titel leuk vindt. Als excuus geldt dat ik nog geen koffie had gehad  ;D

Alleen, het brommen in de eindstand is ook eenvoudig weg te nemen door het uitschakelen van de puls.
In mijn volgende bijdrage kom ik daar op terug.

Verder zou ik kiezen voor een snellere optocoupler voor je DCC.  Ik gebruik tegenwoordig alleen nog de TLP2358 van Toshiba. Mooi snel en subliemen flanken door de Push-Pull uitgang.
Dank voor de suggestie. Ga ik waarschijnlijk doen bij een volgende versie.

Maar dat power-switch IC is interessant ! Maakt de boel gelijk kortsluitvast (y)
Ik moet eerlijk zijn: deze suggestie heb ik op het OpenDCC forum gekregen (dus niet zelf bedacht).

Ben wel benieuwd hoe je met die nieuwe uC een rotsvast PWM signaal gaat maken. Die dingen hebben idd leuke features aan boord.
In principe heel eenvoudig: ik gebruik de Compare Units (WO output) van de TCA timer(s). Ik ben daarvoor een nieuwe library aan het schrijven. Voordat ik die op GitHub zet, wil die nog wat verder testen met wat andere MegaTinyCore / DxCore processoren. Zie onderstaande foto met de Curiosity Nano's voor het test programma: AVR128DA48, AVR64DD32, AVR64EA48, MegaTiny 1, 2 en 3 series.


Ik ben wel nieuwsgierig naar waar al die connectoren voor zijn. Heb je DCC en power dubbel uitgevoerd om je bedrading makkelijker te maken?
Precies. Dat doe ik bij veel van mijn decoders. Dan kan ik ze, als ik dat wil, mooi naast elkaar plaatsen.

Ik ben bij jlcpcb fan van de 6n137. Die is ook snel, tevens goedkoop en belangrijkste: ze hebben er ook een als 'prefered extended' part  (y). Die heeft me nog geen problemen gegeven.
Ik heb net even gekeken, maar die zit er ook op (LCSC C110020)

Ik laat ze tegenwoordig 500ms na het bereiken van de eindstand nog even doordrukken voordat ik de pulsen stop.
Zoals hierboven al aangegeven, kom ik daar in een volgende bijdrage op terug.

Is dat inclusief alle componenten die je er zelf op moet zetten?
Was dat maar waar  ;D

En arduino's servo library vind ik het goed doen. Ik gebruik die nog altijd. Ik weet eigenlijk niet in hoeverre Arduino die nieuwe dxcores ondersteunen
Afgelopen dagen ben ik behoorlijk diep in de standaard servo libraries gedoken en denk dat ik de werking wel begrijp. Het grote verschil met mijn aanpak is dat ze daar, in de ISR, de pulsjes in software genereren (digitalWrite()). Als er ook andere dingen op de processor draaien die interrupts genereren, kan de lengte van die pulsjes variëren (jitter). Verder is, bij de standaard libraries, de ISR erg omslachtig en duur (in CPU cycles). Je zou eens moeten lezen wat SpenceKonde daar op zijn GitHub DxCore over schrijft  ;D
Ik houd er juist van om nieuwe dingen te doen. DxCore is goedkoper dan de oude 328's 2560's, en heeft veel meer mogelijkheden. De 48/64 polige chips hebben 2 TCA timers, met ieder 3 hardware PWM kanalen (dus 6 in totaal). De oude 328 chips hebben slechts 2 hardware PWM uitgangen (en de 2560 is niet te betalen).

Wat bij het opstarten ook handig is om te doen bij servo's, is om eerst het signaal op de pin te zetten, dan de spanning in te schakelen en dan de puls weer uit te zetten.
Klopt. Kom ik op terug.

Zo maak je iets wat al tamelijk ingewikkeld is nog ingewikkelder.
Precies. Ik wil graag de bedrading zo simpel en overzichtelijk mogelijk maken. Ik zou inderdaad een printje op de servo kunnen plakken, met daarop de R en C. Om het simpel te houden heb ik daar niet voor gekozen.

Groet

Aiko

AP3737

  • Offline Offline
  • Berichten: 344
Re: Yet Another Servo Decoder
« Reactie #5 Gepost op: 09 January 2025, 21:06:28 »
Ik had beloofd iets meer te vertellen over het aan en uitschakelen van het servo signaal. De ideeën heb ik hiervoor "geleend" van de OpenDCC site: https://www.opendcc.de/elektronik/opendecoder/servo_erfahrungen.html. Helemaal onderaan de pagina staan 6 methoden; ik heb daarvan opties 1, 2, 4 en 6 geïmplementeerd. Vooraf had ik methode 2, dus het hoog houden van de servo PWN leiding, nooit bedacht.

Ik heb voor mezelf wat documentatie gemaakt, zodat ik ook later nog weet hoe het werkt.

Onderstaand plaatje toont optie 1: het servo signaal blijft laag en komt vertraagd op. Om het PWM signaal laag of hoog te zetten, heb ik de servo library uitgebreid met een nieuwe methode: "constantOutput(value)" (de library is upwards compatible met bestaande servo libraries, maar heeft 2 extra methoden).


Het is echter ook mogelijk de PWM output hoog te maken voordat het begint. Dat is dus optie 2. Alles is identiek, behalve dat "constantOutput" nu met de waarde 1 wordt aangeroepen.


Tenslotte is het mogelijk het servo signaal uit te zetten. Vanzelfsprekend gebeurd dat, net als het aanzetten, netjes synchroon met het PWM signaal. Het PWM signaal zal dus nooit tijdens een puls worden aan of uitgezet. Om deze timing goed te krijgen, heb ik een tweede methode toegevoegd: "isReady()". Dit is een soort flag tussen ISR en gebruikersprogramma, en treedt synchroon met de puls exact iedere 20ms op. In plaats van 20ms, kan natuurlijk ook x maal 20ms gewacht worden met het uitschakelen van de 5V voor de servo.


Voor mij het belangrijkste voordeel van de "isReady()" methode, is dat ik delay() statements in het hoofdprogramma niet meer nodig heb, De standaard voorbeelden in de servo library, zoals sweep.ino, gebruiken dergelijke delay() statements. Busy waiting is iets wat, in mijn opinie, een voorbeeld is van slecht programmeren. (Ja, ik weet dat je ook steeds de millis() timer kunt vragen. IsReady() vind ik wat intuïtiever).

Genoeg voor vandaag

Groet, Aiko

bask185

  • Offline Offline
  • Berichten: 5009
Re: Yet Another Servo Decoder
« Reactie #6 Gepost op: 09 January 2025, 22:24:40 »
Ik snapte nooit waarom ze die pulsen in sequentie zetten. Het is ook wel grappig, als je alle 12 servo objecten naar 180 graden zet, dan klopt de frequentie niet eens meer  ::). Ik had ooit bedacht om alle pulsen tegelijk te starten dan te berekenen wie als eerste moet stoppen en zo voorts. Maar die arduino library doet het voor alsnog zo goed, dat ik er niet aan begonnen was. Ik heb eigenlijk nooit last van jitter.

Ik heb zelf wel een servoSweep library gemaakt. Daarin kon je min, max posities en snelheid opgeven. Hij maakt ook slim gebruik van het EEPROM geheugen. Die hardcoded min, max waardes worden alleen gebruikt als het EEPROM niet in orde is, dus bij een eerste keer opstarten na een nieuwe programma upload. Verder zitten er handige functies in om de posities te finetunen. En ik doe elke keer als de servo aangetuurd worden de stand opslaan. Dus of een 1 of een 0. Want dat zal je inmiddels wel doorhebben dat je bij het opstarten eerst wilt uitvogelen waar die servo was, voordat de spanning er af ging. Ik maak me ook niet echt zorgen dat ik ooit een keer tegen de max write cycles aanloop.

Citaat
De oude 328 chips hebben slechts 2 hardware PWM uitgange
Nee ze hebben er zes. Per hardware timer (3) kan je er 2 gebruiken. Ze hebben het ook wel slim gedaan in combinatie met millis() en micros(). Als je gaat bekijken wat de default instellingen zijn dan zie je dat de frequentie niet helemaal goed is voor millis() en micros(). Dat ISR doet om de zoveel iteraties een schikkel pulsje toepassen om te compenseren. Dat hebben ze bewust zo gedaan zodat je gelijktijdig de PWM kanalen van timer 0 en micros/millis kan gebruiken.

Zodra je ergens servo.attach aanroept werken die van timer 1 niet meer.

Side note:

Ik heb voor non-blocking delays ooit een leuke macro gemaakt. Hij gebruikt wel static en zodoende mag je niet hem toepassen in een class method. Maar ergens in je void loop of een functie kan die prima. Je hoeft niets ergens anders een object oid te declareren. Je kan dit zo neer plempen en dan werkt het.

#define REPEAT_US(x)    { \
                            static uint32_t previousTime ;\
                            uint32_t currentTime = micros() ;\
                            if( currentTime  - previousTime >= x ) {\
                                previousTime = currentTime ;
                                // code to be repeated goes between these 2 macros
#define REPEAT_MS(x)    { \
                            static uint32_t previousTime ;\
                            uint32_t currentTime = millis() ;\
                            if( currentTime  - previousTime >= x ) {\
                                previousTime = currentTime ;
                                // code to be repeated goes between these 2 macros
#define END_REPEAT          } \
                        }

En je loop kan je dan iets doen als

void loop()
{
    REPEAT_MS( 50 )
    {
        Serial.println("hello world") ;
    }
    END_REPEAT

    REPEAT_MS( 100 )
    {
        Serial.println("bye world") ;
    }
    END_REPEAT

Ik vond dat ff wat makkelijker dan een of andere timer library of task scheduler in te zetten  ;D.

Mvg,

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

AP3737

  • Offline Offline
  • Berichten: 344
Re: Yet Another Servo Decoder
« Reactie #7 Gepost op: 10 January 2025, 10:25:19 »
Hi Bas

Je macro’s zijn wel leuk; ze maken de code wat leesbaarder. Misschien kan ik ze ook ergens wel gebruiken.

De traditionele 328 heeft één 16 bit timer, met twee compare units. Vandaar mijn opmerkingen dat je rechtstreeks (hardware) daarmee 2 servo’s kan sturen.

In de specificatie staat inderdaad wel dat het 6 PWM kan aansturen. Maar dat zijn dan 8 bit timers. Die zijn voor servo te onnauwkeurig en daarom niet bruikbaar als een bepaalde stand precies moet zijn, zoals bij wissels.

Je moet ergens een TOP waarde definiëren, zodat daar 20 ms in past. Je werkgebied is echter tussen 1 en 2 ms (544us / 2400us servo lib). Je resolutie is bij 8 bit te klein.

Groet, Aiko
« Laatst bewerkt op: 11 January 2025, 13:44:58 door AP3737 »

Karst Drenth

  • Offline Offline
  • Berichten: 10485
  • NS blauw, groen, rood, bruin, grijs en standgroen
    • Plan U op Sleutelspoor
Re: Yet Another Servo Decoder
« Reactie #8 Gepost op: 10 January 2025, 12:20:51 »
Ik had beloofd iets meer te vertellen over het aan en uitschakelen van het servo signaal. De ideeën heb ik hiervoor "geleend" van de OpenDCC site:

Komt me allemaal heel bekend voor ;) En lijkt verdacht veel op wat er in onze nieuwe YD8248 allemaal in te stellen is.



En ja, RC-servo-sturing is een "wetenschap" op zich.  ;D

In de specificatie staat inderdaad wel dat het 6 PWM kan aansturen. Maar dat zijn dan 8 bit timers. Die zijn voor servo te onnauwkeurig en daarom niet bruikbaar als een bepaalde stand precies moet zijn, zoals bij wissels.

Je moet ergens een TOP waarde definiëren, zodat daar 20 ms in past. Je werkgebied is echter tussen 1 en 2 ms (544ms / 2400ms servo lib). Je resolutie is bij 8 bit te klein.

o.a. daarom gebruik ik voor de PWM generatie de PCA9685. Die kan ook netjes de 20ms verschuiving voor z'n rekening nemen. Stuur het ding aan via I2C, ruim snel genoeg om "zo nu en dan" een PWM waarde te sturen ;) Resultaat zijn absoluut stabiele servo pulsen en zonder enige jitter.  (y) Zo hebben we voor de standaard 90 graden range 512 stapjes, voor de 180 graden zelfs 1024. En dat is ruim meer resolutie dan de meeste servo's kunnen "weergeven".

Grtzz,
Karst

Menno

  • Offline Offline
  • Berichten: 3452
    • Mijn van-alles website
Re: Yet Another Servo Decoder
« Reactie #9 Gepost op: 10 January 2025, 23:55:59 »
[..]maar ik heb een USB power IC genomen (LPW5209AB5F). Dat is (helaas) wel een extended part, [..]
 heb ik een (SN74LVC1G125DBVR) bus driver IC genomen (helaas ook een extended part).
Wat betekent dat in vredesnaam? Ik zit voor m'n werk in de professionele elektronica (en heb daar een pittige cursus voor moeten volgen voor elk denkbaar probleem met printmateriaal en reparaties daar aan) maar deze term zegt me niets. (en dat zegt dan wel weer wat...)

bask185

  • Offline Offline
  • Berichten: 5009
Re: Yet Another Servo Decoder
« Reactie #10 Gepost op: 11 January 2025, 00:05:06 »
Bij JLCPCB hebben ze iets van zoveel duizend rollen standaard in de assemblage lijnen zitten. Dat noemen zij basic parts.

Voor alles wat niet basic is, moeten zij een rol in de machine stoppen en dat kost 3$ aan arbeid fee.

Als je 5 printen bestelt met 5 extended parts. Kost elke print al 3$ meer vanwege deze extra kosten. Bestel je 50 printen, kost het per print maar 0.30$ meer.

Daarnaast hebben ze ook preferred extended parts. Ook voor deze moeten ze rollen wisselen maar dan zonder de 3$ rollen wissel fee.

Zo bestaat mijn spoeldecoder exclusief uit basic/preferred extended onderdelen met uitzondering de screwterminals. Dat maakt ze al vanaf kleine oplages al bijzonder goedkoop om te laten maken.

Mvg,

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

Dirk

  • Online Online
  • Berichten: 930
Re: Yet Another Servo Decoder
« Reactie #11 Gepost op: 11 January 2025, 11:42:55 »
Wat betekent dat in vredesnaam? Ik zit voor m'n werk in de professionele elektronica (en heb daar een pittige cursus voor moeten volgen voor elk denkbaar probleem met printmateriaal en reparaties daar aan) maar deze term zegt me niets. (en dat zegt dan wel weer wat...)

Over je cursus? 
 :)
2-rail digitaal, IB antiek, DR5000, Multimaus, Rosoft servo decoders en diverse Digikeijs spullen,Peco code 100.

AP3737

  • Offline Offline
  • Berichten: 344
Re: Yet Another Servo Decoder
« Reactie #12 Gepost op: 11 January 2025, 14:22:30 »
Komt me allemaal heel bekend voor ;) En lijkt verdacht veel op wat er in onze nieuwe YD8248 allemaal in te stellen is.
Mooi ding en met veel mogelijkheden.  :)
Ik "leen" veel van mijn ideeën van OpenDcc, en wil dus ook van hen de voorgeconfigureerde bewegingsprogramma's (armsein die nog na beweegt, ....) overnemen. Ik dacht niet dat jij dat hebt gedaan. Heb je daar een speciale reden voor?

Misschien een ideetje (die ik nog ga implementeren). Bij wisselaandrijving met Servo is het instellen van de beide uiterste standen vaak wat onhandig. Bij sommigen decoders krijg je wat knopjes, waarmee dat kan, maar dan weet ik nooit welk knopje ik nu weer moet drukken. Daarom wil ik het volgende doen: een ESP32 via een connector (en kort draadje) met de decoder verbinden. De ESP32 werkt dan als web server, zodat je met je mobieltje (gewone web pagina's) alle instellingen kan doen, met je neus bovenop de wissel. Lijkt me handig.

o.a. daarom gebruik ik voor de PWM generatie de PCA9685. Die kan ook netjes de 20ms verschuiving voor z'n rekening nemen. Stuur het ding aan via I2C, ruim snel genoeg om "zo nu en dan" een PWM waarde te sturen ;) Resultaat zijn absoluut stabiele servo pulsen en zonder enige jitter.  (y) Zo hebben we voor de standaard 90 graden range 512 stapjes, voor de 180 graden zelfs 1024. En dat is ruim meer resolutie dan de meeste servo's kunnen "weergeven".
De PCA9685 is een mooi IC daarvoor. Zie je ook in een aantal Arduino servo projecten. Ik neem aan dat jij vooral de mogelijkheid wilt hebben om goedkoop/vanuit 1 decoder 16 servo's aan te sturen (samen met de YD8291), en daarom voor dit IC hebt gekozen. Of zijn er ook andere redenen waarom je hiervoor hebt gekozen. Met andere woorden: wat kan de PCA9685 dat ik niet met de 16-bit timer in de processor kan (behalve dus meer kanalen).

@Bas: Bedankt voor de uitleg. Had ik niet beter kunnen doen :-)

Groet, Aiko

Jeroen Vreeken

  • Offline Offline
  • Berichten: 340
Re: Yet Another Servo Decoder
« Reactie #13 Gepost op: 11 January 2025, 14:34:02 »
Bij wisselaandrijving met Servo is het instellen van de beide uiterste standen vaak wat onhandig. Bij sommigen decoders krijg je wat knopjes, waarmee dat kan, maar dan weet ik nooit welk knopje ik nu weer moet drukken.

Ik heb dat bij mijn servo decoder analoog gedaan. De atmega328 heeft 8 analoge ingangen en die gebruik ik om de eindstanden van de 4 pwm uitgangen te bepalen.
Afstellen is dan simpelweg een wissel poort activeren en dan aan de potmeter draaien tot de stand van het wissel goed is.

Karst Drenth

  • Offline Offline
  • Berichten: 10485
  • NS blauw, groen, rood, bruin, grijs en standgroen
    • Plan U op Sleutelspoor
Re: Yet Another Servo Decoder
« Reactie #14 Gepost op: 11 January 2025, 16:12:51 »
Ik "leen" veel van mijn ideeën van OpenDcc, en wil dus ook van hen de voorgeconfigureerde bewegingsprogramma's (armsein die nog na beweegt, ....) overnemen. Ik dacht niet dat jij dat hebt gedaan. Heb je daar een speciale reden voor?

Heb ik wel ;) (uiteraard instelbaar :P )



Tevens massa-traagheid emulatie ( langzaam starten en stoppen )


De PCA9685 is een mooi IC daarvoor. Zie je ook in een aantal Arduino servo projecten. Ik neem aan dat jij vooral de mogelijkheid wilt hebben om goedkoop/vanuit 1 decoder 16 servo's aan te sturen (samen met de YD8291), en daarom voor dit IC hebt gekozen. Of zijn er ook andere redenen waarom je hiervoor hebt gekozen. Met andere woorden: wat kan de PCA9685 dat ik niet met de 16-bit timer in de processor kan (behalve dus meer kanalen).

De PCA is een universeel PWM chip. Naast de Servo pulsen, stuur ik er ook de resterende uitgangen mee aan. De YD8248 bevat als het ware een "halve" YD8116. En ja, 16 Kanalen is dan een pré ;)

Waarvan de decoder er maximaal 12 gebruikt. kanaal 1-4 puur en alleen servo, 9-16 met een "triple" functie: Servos, Relais of LEDs.

Ik heb dat bij mijn servo decoder analoog gedaan. ...
Afstellen is dan simpelweg een wissel poort activeren en dan aan de potmeter draaien tot de stand van het wissel goed is.

Ook dat kan de YD8248. Er zijn 4 beschikbare analoge ingangen die aan 0 of meerdere servo's toegewezen kunnen worden. ( zie plaatje hierboven ) Maar dat beperkt zich niet tot het instellen. De servo's kunnen er ook Analoog mee bediend worden. Dezelfde functie is ook Digitaal beschikbaar via een zelf te kiezen loc-adres, de servo draait dan mee met de stand van de (hand)regelaar. Tot slot, kan een servo ook nog als "Direct-DCCext" digitaal aangestuurd worden. Dat maakt het mogelijk om b.v. uit iTrain direct de stand van de servo te besturen.

Grtzz,
Karst