Er zijn meerdere redenen waarom servo's die stilstaan toch lawaai blijven maken
waarvoor ik, als ik het mij goed herinner, indertijd inclusief alles ongeveer 35 Euro heb betaald voor 5 printjes
Als 8 servo's gelijktijdig zouden bewegen, dan gaat er ergens iets mis.
De rest is relatief standaard, behalve dat ik voor het IC niet gekozen heb voor de vertrouwde 328
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.
Originele titel
Alleen, het brommen in de eindstand is ook eenvoudig weg te nemen door het uitschakelen van de puls.
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
Ben wel benieuwd hoe je met die nieuwe uC een rotsvast PWM signaal gaat maken. Die dingen hebben idd leuke features aan boord.
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 . Die heeft me nog geen problemen gegeven.
Ik laat ze tegenwoordig 500ms na het bereiken van de eindstand nog even doordrukken voordat ik de pulsen stop.
Is dat inclusief alle componenten die je er zelf op moet zetten?
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
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.
Zo maak je iets wat al tamelijk ingewikkeld is nog ingewikkelder.
De oude 328 chips hebben slechts 2 hardware PWM uitgange
#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 } \ }
void loop(){ REPEAT_MS( 50 ) { Serial.println("hello world") ; } END_REPEAT REPEAT_MS( 100 ) { Serial.println("bye world") ; } END_REPEAT
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:
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.
[..]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...)
Komt me allemaal heel bekend voor En lijkt verdacht veel op wat er in onze nieuwe YD8248 allemaal in te stellen is.
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. 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".
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 "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?
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).
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.