pinky-t
Current project: "Bernaard the hexapod" (brother of alfred the hexapod).
Beste Co'rs
Na een aantal weken geknutseld te hebben met mijn hexapod (gebasseerd op een atmega32 processor). Vind ik dat het tijd is om mijn hardware te upgraden. Ik ben van plan om van een atmega 32 naar een mbed LPC 1768 te gaan, mijn grootste motivaties zijn:
C++ compiler (online)
Veel beschikbare libraries
Meer rekenkracht
Een ander ding wat ik wil veranderen (en wat mijn eigenlijke vraag is), is de manier waarop ik mijn servo motoren aanstuur. Op de atmega32 doe ik dit middels een aantal iterupts die op deze manier voor de juiste timing zorgen. Nadeel hiervan is dat ik 18 servo motoren rechtstreeks aan de microcontroller heb hangen en hierdoor dus al 18 pinouts kwijt ben.
Ik wil er naar toe werken dat ik deze 18 servo's via Spi aan kan sturen. Echter ben ik na een dag zoeken nog precies even ver als waar ik gisteren was. Dus als er mensen zijn die suggesties hebben voor een chip die in staat is om 18 servo's aan te kunnen sturen via spi dan hoor ik dat graag. Of als er mensen zijn met goeie ideeën... ik ben een en al oor (oog
).
Alvast bedankt,
Bart
henri62
1-st law of Henri: De wet van behoud van ellende. 2-nd law of Henri: Ellende komt nooit alleen.
Ik dacht dat ik hier op het forum eens gezien heb dat er speciale IC's zijn die een seriele input hebben en een hele bak servo uitgangen (>=8). Ik kan me ook vergissen in een informatief artikel van Elektor waar het in stond.
Misschien dat iemand het zich nog herinnerd waar het precies in stond, want dat het bestaat weet ik vrijwel zeker.
Als je veel rekenkracht wil zou ik 1x een AVR gebruiken voor het aansturen van de servo's en met je LPC het inverse kinematics deel waarvan je het rekenresultaat(servostand) inderdaad via SPI stuurt. Dan hoef je in je LPC je niet meer druk te maken over aansturing.
Als je dat toch wil zou je mogelijk kunnen denken in de richting van een TLC5940. Uiteraard niet 'speciaal' voor een servo maar hij heeft een klok, latch en data nodig en zou je dus tot 16 servo's kunnen sturen.
Desnoods plak je meerdere shiftregisters/decade counters(met enable pin) aan elkaar waarmee je na x milliseconde naar de volgende servo shift. op die manier kan je er 10 achter elkaar shiften, namelijk: maximaal 2ms per servo, *10 = 20ms/50Hz aansturing.
Duur grapje: Digitale servo's.
Makkelijkst lijkt me om gewoon je atmega in te zetten als servo-controller, zeker als je die code al hebt draaien. Ipv interrupts zou ik dan gewoon een loopje laten lopen per 4 of 5 kanalen, en je SPI over de interrupt laten lopen. Even snel gerekend heb je dan 9 of 10 bits precisie binnen 1ms en kun je de servo's op 100 tot 125hz aansturen (als ze dat aankunnen). Als de atmega32 een grotere (receive) buffer heeft op de UART zou ik dat gebruiken ipv SPI, scheelt weer pins (en interrupts). Of je kunt tussen de PWM-loopjes door de atmega via een aparte pin aan de host laten weten dat hij nieuwe input wilt, dan heb je helemaal geen interrupts meer nodig.
Ik ben zelf ook een tijdje op zoek geweest naar een dedicated PWM driver, maar ik ben niks tegengekomen dat echt voldeed. LED PWM drivers zijn er wel, zoals de TLC5940 die LED-Maniak noemde, of de TLC5947 met 24 kanalen en eigen clock, maar dat vind ik (wellicht onterecht) een beetje vies aanvoelen omdat ze echt gericht zijn op LEDs.
Die LPC kan het natuurlijk ook met 2 vingers in z'n neus. Als je de pins niet ergens anders voor nodig hebt en wat cycles kunt missen is het ook een prima oplossing.
stecj366
Sonar is meer dan Ping...
Dit kopen:
http://www.lynxmotion.com/p-395-ssc-32-servo-controller.aspx
Ben je gelijk van alle miserie vanaf. Werkt super goed... Is wel geen SPI, maar RS232. Je moet je dan niks aantrekken van alle specifieke servo-controller taken, en je LPC kan zich dan bezig houden met de interessante dingen zoals gaits uitrekenen ed.
[Bericht gewijzigd door stecj366 op (34%)]
pinky-t
Current project: "Bernaard the hexapod" (brother of alfred the hexapod).
Ten eerste iedereen bedankt voor zijn bijdrage.
@Tjans
Als ik me niet vergis is het ic PCA9635 niet via SPI maar via I2C niet dat dat zoveel uitmaakt. Ik had zelf het nieuwere type van dit IC al gespot, de PCA9685 http://nl.farnell.com/nxp/pca9685pw/ic-led-driver-rgba-28-tssop/dp/185…
@LedManiak
Is het IC TLC5940 niet bijna het zelfde als de PCA9635 (ook bedoeld als led driver maar instelbaar voor het aansturen van meerdere servo's). Ik bedoel eigenlijk meer, wat is het grote verschil. Daarnaast, shift registers.. kun je me daar iets meer info over geven, ik heb daar echt nog nooit mee gewerkt 
@br.am
Ik wil juist af van dat ik mijn micro controller zelf ga instellen als Servo driver. laat ik het anders zeggen. Ik vind het "zonde" om mijn atmega32 te gebruiken om alleen wat timinkjes te doen om wat servotjes aan te sturen via SPI. Dan gebruik ik de chip liever voor mijn RF afstandsbediening waarmee ik mijn hexapodje uiteindelijk mee wil gaan aansturen. TFT touchscreentje erin.. (if you catch my drift).
@stecj366
Ik wil wel graag zelf mijn printje maken. Dit omdat ik op mijn hexapod al niet al te veel ruimte heb. Daarbij is gewicht ook een issue, mijn ervaring is dat zelfgemaakte printjes vaak lichter uitvallen dan kant en klare pcb's (meestal omdat er op kant en klare pcb's opties zitten, die ik niet nodig heb).
Ik ga vanmiddag even kijken naar die PCA9635 om te kijken wat het verschil is met de PCA9685 ook zal ik even een blik werpen op de TLC5940 de aangedragen mogelijkheid van ledmaniak. Mocht ik hier nog vragen over hebben, dan zal ik die nog even posten.
Verder zoek ik nog een geschikte voeding. Ik heb nu een voeding die van een 7.2 lion battery 5 volt produceert. Echter verstookt deze regulator 5 watt aan warmte (zonde dus!). Ik heb al gekeken naar een buck converter (DCDC step down). Als er nog suggesties zijn voor een goeie en efficiente manier om 7.2 volt om te zetten tot naar 5 volt. Waarbij ik rond de 4 ampere beschikbaar heb op de uitgang.
Nogmaals, veel dank voor de vele reacties (ik dacht dat robotica een beetje een dood gebloed thema was (ik volg zelf vaak het topic) How wrong could i be!).
Tommyboy
Zo goed als het vroeger was, is het nooit geweest.
pinky-t
Current project: "Bernaard the hexapod" (brother of alfred the hexapod).
@ tommyboy
Zoals eerder gezegd, wil ik graag zelf mijn printje ontwerpen. Dit omdat ik op mijn hexapod niet al te veel ruimte heb, en het dus handig is als ik zelf kan bepalen welke dimenties het printplaatje krijgt.. 
zeker omdat je ruimte nodig hebt zou ik de atmega32 houden. Als je echt ruimte problemen hebt en je toch je eigen print gaat maken zou ik het allemal smd doen. ik had ooit is op een attiny2313 8mhz 12 pwm kanalen op 1 timer interrupt lopen. Dit geeft 12x 130hz pwm voor ledsrips. wel maar 8 bits.
Een atmega32 op 20 mhz en 18 servos op 50hz met een interrupt spi moet makkelijk kunnen. alles op 1 chip. Kleiner kan je niet krijgen denk ik
henri62
1-st law of Henri: De wet van behoud van ellende. 2-nd law of Henri: Ellende komt nooit alleen.
Je kunt ook een OC32 van Dynamo gebruiken, heb je er meteen 32 die je via RS232 of RS485 kunt aansturen. (55 euro voor de hele print)
http://perlovan.home.xs4all.nl/oc32.htm
pinky-t
Current project: "Bernaard the hexapod" (brother of alfred the hexapod).
@ Jeroenk50
Ik wil werken met de mbed omdat ik dan meer rekenkracht en meer pin outs heb (zoals eerder gezegd). Daarnaast zie ik dan mogelijkheid later te gaan voor een losse cortext m3 chip. (nog nader te bepalen welke). Om deze reden wil ik mijn print opbouwen rond een mbed chip.
@henri62
Zoals eerder gezegd, ik wil graag zelf mijn print bakken. Het wordt dus geen gekochte module. Toch bedankt voor je moeite 
@All
Ik heb me wat verdiept in buck converter voedingen, omdat ik energie zuinig mijn 7.2volt naar 5.0volt wil omzetten. Wat zijn mijn andere (enrgie zuinige) opties.
in 7.2V +/-5000mAh(van een accu)
uit 5.0v <4a
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
18 servos? 4A? Dat gaat hem niet worden denk ik... Volgens mij moet je op 100mA rust, 1A piek rekenen voor een servo. Maar meet het maar eens zelf....
Om "gezeik" te voorkomen zou ik in ieder geval de controle op een andere 5V zetten als de servos. Dan blijft de besturing het doen mochten je servos de voeding overbelasten.
Wat voor 7.2V heb je? Is dat 6x NIMH of is het een LIPO variant? (2*3.6?).
Een buck converter heeft vaak een rendement van rond de 80-90%. Een 7805 heeft maar een rendement van 68% bij 7.2V dus veel win je er niet mee.... 
pinky-t
Current project: "Bernaard the hexapod" (brother of alfred the hexapod).
@ rew
Het wordt hoogstwaarschijnlijk een lipo. Dit is denk ik het handigst om het gewicht zo laag mogelijk te houden.
Over het amperage, ik heb mijn hexapod vooraf altijd aan een voeding gehad die maximaal 4A kan leveren. Heb hier nooit problemen mee gehad hij heeft zelfs nooit in de begrenzing gezeten (volgensmij maar kan dat niet met zekerheid zeggen, ik lette er niet constant op).
henri62
1-st law of Henri: De wet van behoud van ellende. 2-nd law of Henri: Ellende komt nooit alleen.
Als je toch met ruimte beperking zit zou ik gaan voor 3 stuks AtTiny261's (of wat tegenwoordig gangbaar is). Ik heb eens een ontwerp plus stuk software gemaakt om 8 servo signalen te maken met een zeer hoge resolutie (1 uS) in een uController gebaseerd op de AtTiny26. Het voordeel van 3 losse controllertjes is dat je die makkelijk kunt wegwerken op diverse plaatsen.
Helaas heb ik dat stuk software nog niet in echte hardware kunnen testen, in simultatie werkt het wel. De bedoeling was om de data interface of SPI of IIC te maken (via de USI van de AVR), zover is het nog niet gekomen (chronisch tijdgebrek).
pinky-t
Current project: "Bernaard the hexapod" (brother of alfred the hexapod).
Haha dat is een wel befaamd gebrek, dat chronisch tijd gebrek. Tja, heb er wel overna gedacht om in mijn atmega 32 (waar ik al 18 servo's mee aan kan sturen middels een interupt constructie) een stukje code te schrijven die spi of i2c code's omzet naar servo nummer plus servo stand. Echter bedacht ik me toen dat dat misschien niet de mooiste oplossing is. Plus dat ik die micro controller eigenlijk wil gaan gebruiken voor mijn uiteindelijke afstandsbediending met tft touch screen en rf zender/ontvanger. Daarnaast wil ik in de afstandsbediening een bewegingsensortje bouwen (denkt aan chiroscoop, acceleratie of tilt sensor). Dit om dat met de afstandsbediening (via beweging). Mijn podje te kunnen sturen, of levelen.
Dan zou ik een nieuwe micro controller kunnen bestellen om SPI in te bouwen en de servo's op die manier aan te sturen, maar zie dit dan toch een beetje als een zogenaamde "verspilling van resources". Vandaar dat ik zocht naar een ic die aan te sturen is via spi of i2c en in staat is die servo's aan te sturen.
Ben inmiddels begonnen aan mijn schema voor die 18 servo's, mbed en hoop binnekort ook een voeding er bij te kunnen tekenen. Voor die servo's heb ik gekozen voor PCA9685. Daarnaast maak ik een soort "moederbord" waarbij ik eventueel in de toekomst printjes over dwars (denk aan ram geheugen bij een moederbord) bij op de print kan prikken om extra functionaliteit aan mijn hexapod toe te voegen (zoals bijvoorbeeld een printje met wat sensoren, een beeldschermpje, ledjes of what so ever). hiervoor zit de SPI, I2C, serieel, en de plus en de min op meerdere punten op mijn hexapod.
Ik hoop binnekort dus ook een voeding toe te kunnen voegen aan mijn schema, zodat ik de hele boel kan etsen en testen. Zodat ik in de zomer vakantie lekker kan programmeren en klooien in de tuin.
Mochten er mensen geinteresseerd zijn in het schema (voor zover ik nu ben). Dan hoor ik het wel, dan zal ik hem even posten hier.
henri62
1-st law of Henri: De wet van behoud van ellende. 2-nd law of Henri: Ellende komt nooit alleen.
Denk eraan dat je met een PWM chip van 4096 steps (chip die je gekozen hebt) de effectieve resolutie maar 204 steps is over het volle bereik van de servo 1.0 - 2.0 mS.
Ik ben bang dat je daar niet mee weg gaat komen.
pinky-t
Current project: "Bernaard the hexapod" (brother of alfred the hexapod).
Kun je me iets duidelijker uitleggen wat je daarmee bedoeld. Ik gebruik twee chips (9 servo's per chip).
Als je de PCA9685 op 50hz laat lopen zit je op 20ms per PWM cycle. Per ms heb je dan 4096/20 = 204 steps. Als je die PCA9685 snel genoeg kunt aansturen kun je hem natuurlijk ook op 200hz laten lopen, als je dan maar zorgt dat hij na elke normale cycle 3 cycles op 0 blijft staan. Dat kost natuurlijk wel weer meer resources van je hoofdcontroller en is erg timing (&fout)-gevoelig.
Je volledige resolutie wordt gebruikt voor 0 - 2.0 ms. Voor het gebied 1.0 - 2.0 ms is dus de halve resolutie beschikbaar (de andere helft zit tussen 0 en 1.0 ms, maar daar heb je niets aan).
Op 4 juni 2012 10:52:19 schreef henri62:
Denk eraan dat je met een PWM chip van 4096 steps (chip die je gekozen hebt) de effectieve resolutie maar 204 steps is over het volle bereik van de servo 1.0 - 2.0 mS.
Ik ben bang dat je daar niet mee weg gaat komen.
Wordt het idee voor het gebruik van een decade counter dus alleen maar interessanter. Het is goedkoop en je microcontroller bepaald de resolutie.
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Over die 204 steps: Mijn goedkope servos komen niet in beweging als je ze een 4 microseconde langer pulsje geeft. Met twee stapjes van 4 microseconde doet ie wel wat. Dat zou betekenen dat ie meer dan 125 stapjes en minder dan 250 stapjes aan resolutie heeft. Natuurlijk zijn de servo's analoog, dus zal ie toch wel "ongeveer" gemiddeld iets verder "parkeren" als je 1 microseconde verschil in sturing stuurt. Maar hij heeft een "dead zone" van meer dan 4 microseconde in het stuursignaal.
henri62
1-st law of Henri: De wet van behoud van ellende. 2-nd law of Henri: Ellende komt nooit alleen.
Met de resolutie van 204 steps over 1 mS heb je dus iets minder dan 5uS. Reken maar eens uit wat de hoekverdraaiing is als je uitgaat van een 180o servo. (180/200 = 0.9o)
Die nauwkeurigheid is natuurlijk afhankelijk van de kwaliteit van je servo's.
Wat ook onhandig is met "goedkope" servos is de herhalings nauwkeurigheid. Stuur deze maar eens van links naar het midden en van rechts naar het midden, dan staat deze in een iets andere stand.
(ook een dead zone zogezegd)
Aansturen met 200Hz heeft geen zin en kan volgens mij nog niet eens! Want die dingen moeten met een nominale periode tijd van 20 mS (50 Hz) aangestuurd worden.
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Bij sommige servos kan je met 200Hz VAKER een positie doorgeven waardoor je nauwkeuriger een curve zou kunnen volgen.
Bij sommige servos kan je parasitair ook zo de kracht van de aansturing van de motor regelen. Doordat ie 4x vaker weet waar ie heen moet stuuren ze meer stroom door de motor.
Maar 't is niet altijd feest: Sommige servos gaan ook gewoon kapot....
henri62
1-st law of Henri: De wet van behoud van ellende. 2-nd law of Henri: Ellende komt nooit alleen.
@rew, dat is dus buiten spec. gebruiken, gaat altijd wel ergens fout.
Voor hobby wel leuk om te proberen (aldoende leert men), maar je moet er geen gewoonte van maken.
Ik heb diverse (commerciele) schakelingen gezien waar iets wat buiten spec ontworpen is en dat gaat altijd wel ergens grondig fout als je productie aantallen maakt.