@ 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

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.... :-(

@ 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).

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).

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.

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.

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.

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.

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.

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....

@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.

Oké dus dan kan ik met mijn servo's stapjes van 1 graden maken. Dat betekend dus dat ik dan met dat ic wat ik heb gekozen grofweg 180 stapjes kan maken (volledige uitslag van de server).

of heb ik dit mis?

in dat geval kies ik voor dit ic. 180 stappen lijken mij namelijk ruim voldoende voor mijn hexapodje. (bijkomend voordeel, mocht het me niet bevallen, dan heb ik over een paar maanden weer wat te doen). Ik heb het schema nu af inclusief de servo's via i2c (met het genoemde ic).

Nu dus alleen nog een voeding erop, en dan heb ik hoop ik voor de zomer mijn hardware zover af :)

De i2c lijnen dienen omhoog getrokken te worden via een weerstand (10k) naar vcc..

ik heb nog nooit gewerkt met spi, is er hierbij nog iets waaraan ik moet denken?

groet,

bart

Buiten dat I2C een wat complexer protocol is dan SPI en dus andere aansturing nodig heeft: niet echt.

Voor hogere snelheden (>100khz) worden meestal lagere weerstanden aangeraden. Ik gebruik meestal 2.2k voor 400khz. 1k en 4.7k zijn een andere veel gebruikte waardes. Als je een scope hebt kun je het effect van verschillende waardes wel goed zien.

Een scoop heb ik helaas zo 1,2,3 niet bij de hand.

@bram

aha, dus de waarde van de gekozen weerstand is afhankelijk van de gewenste snelheid op de bus.

Wat me nog niet duidelijk is, of ik de I2C bus nou aan de 3.3Volt moet hangen, of aan de 5Volt.

Hoe groter de weerstand hoe langerzamer hij de bus weer omhoog kan trekken. Als dat te langzaam is voor de snelheid van de bus dan heb je een probleem. Dat zie je wel duidelijk terug in dat artikel.

Voltage hangt helemaal af van de devices die je eraan hangt. Voor I2C zelf maakt het niet uit, dat kan in principe op elk voltage werken (zolang er maar 2 niveau's zijn, ground & Vdd). Als je zowel 3.3V als 5V devices hebt zul je er iets tussen moeten hangen dat de voltages aanpast (logic level converter). Nadeel van I2C is dan weer dat de data-lijn bidirectioneel is, waardoor je geen 'simpele' logic level converter kan gebruiken. Is genoeg over te vinden met Google.

De mbed is een 3.3 volt device en de twee chips om de servo's mee aan te sturen zijn 5 volt. Dan zal ik dus het één of ander moeten omvormen. Ik ga googlen :)

Formeel bestaat I2C niet voor 3.3V. Het logic level voor de '1' is te hoog.
Daarom hebben veel chips tegenwoordig een aangepaste spec zodat ze het toch doen op 3V logic high level. Maar laat je dus niet verrassen door alles op 3V3 te zetten onder het mom: dat werkt wel!