Servosturing v3

Gestart door Gerolf, 16 november 2014, 00:07:55 AM

Gerolf

@ Patrick: Met een vierde draadje was mijn vorige versie. Dat werkt wel, maar nog niet zoals ik zou willen:
Om een meting te doen van de servostand moet je de stroom inschakelen.
Zonder stuurpuls uiteraard, want anders beweegt de servo naar een stand.
Maar ook zonder stuurpuls beweegt de servo (naar "0")
=> ik kan niet vermijden dat ik bij een controle-meting soms een beetje beweging heb

Huidige status:
- Nieuw printplaatje getekend, gemaakt en opgebouwd
- Meting potentiometer gaat nog steeds goed
- Gewoon motortje aansturen gaat prima: tot behoorlijk traag
- Servomotortje is duidelijk van mindere kwaliteit: werkt niet met heel lage/trage PWM
      (maximale tijd voor volledige uitslag is ongeveer 2 seconden)
=> eens checken met de scoop, maar ik overweeg om:
- de H-brug periodiek te schakelen (dus met µC-PWM de H-brug-PWM aansturen)
- zou moeten kunnen: met I2C kan je vrij hoge communicatiesnelheden halen
  ... dus zou ik met niet-zichtbare stapjes toch een trage beweging moeten krijgen

Wordt vervolgd ;)
Groeten uit "Marche-en-Bières"   ** Modelspoor is plezant **   TPIII-H0-DC-Zelfbouw

Sattrickske

Is dat niet een beetje het wiel opnieuw uitvinden?
PWM op de H-bridge: komt overeen met de pulsbreedte van de stuurpuls van de servo zelf.  De traagheid van een servo bepaal je zelf, via de microcontroller zet je gewoon gedurende een bepaalde pulsbreedte en die laat je heel traag variëren.
Controle positie: waarom sla je die niet op in de µC?

Op dit ogenblik zie ik één toepassing waar jouw oplossing wel voordeel haalt.  Als je veel druk op de servo arm zet, kan die vanzelf gaan bewegen en dan is jouw controle op de positie wel handig.  Nu, al je servo mechanisch onder zoveel druk staat dat ie vanzelf gaat bewegen, dan heb je de verkeerde servo...

Je servo beweegt naar 0 (of soms zelf een willekeurige andere positie) omdat meestal alles tegelijk onder stroom gezet wordt.  Maar je microntroller heeft een beetje opstart tijd nodig waardoor die niet direct de correcte positie doorgeeft aan de servo en je servo krijgt meteen stroom als er geen schakeling in de voeding zit.  Ik heb dat probleem opgelost door in m'n voedingslijn naar de servos een mosfet te steken die normaal altijd 'uit' staat.  Van zodra de microcontroller opgestart is, haalt ie uit het eeprom geheugen de vorige posities van de servos op en stuurt ie meteen deze pulsen door en pas daarna gaat de stroom erop.  Idem om de stroom uit te schakelen: eerst de voedingslijn via de mosfet uitschakelen en dan pas de pulsen eraf.  M'n microcontrollers hebben allemaal een brown-out detector zodat ik in geval van stroomuitval toch m'n servos correct kan afkoppelen.

Dit vervelend effect van ongecontroleerde beweging tijdens het opstarten is al heel lang gekend, alleen vergeten de ingenieurs/elektronici nogal dikwijls dat de servo heel vaak simpele analoge comparators gebruikt en dat die dus meteen beginnen te werken van zodra ze stroom krijgen.
Jouw schakeling zal net hetzelfde moeten doen of je gaat ook dat wild terugslaan hebben, enkel heb je de sturing van de servo nu volledig in je microcontroller gestoken; terwijl die eigenlijk in de servo zelf al zat...

Gerolf

Citaat van: Sattrickske op 23 november 2014, 10:04:54 AMPWM op de H-bridge: komt overeen met de pulsbreedte van de stuurpuls van de servo zelf.

In dit geval zeker niet, en ik ben ook niet zeker dat dit met de analoge servootjes zo is.
De pulsbreedte van de stuurpuls bepaalt immers de gewenste positie van de servo, niet de snelheid waarmee hij er naar toe gaat.

CiteerDe traagheid van een servo bepaal je zelf, via de microcontroller zet je gewoon gedurende een bepaalde pulsbreedte en die laat je heel traag variëren.

... en dan krijg je schokjes tijdens de beweging. Dat wil ik dus vermijden ;)

Bijkomend voordeel op dit moment: de servo is veel stiller tijdens het verplaatsen  8)
Groeten uit "Marche-en-Bières"   ** Modelspoor is plezant **   TPIII-H0-DC-Zelfbouw

Sattrickske

Oei, heb me niet volledig uitgedrukt...
De pulsbreedte bepaalt inderdaad de positie, maar je bent niet verplicht om in eenmaal die positie in te geven; je kan dat in stapjes doen.  En daar zit nu juist de clou, de stapjes moet je correct aansturen en dan heb je die schokjes zelf in de hand: laat gewoon je pulsbreedte variëren in functie van de snelheid die je wil, maar gebruik altijd kleine stapjes.  Met mijn microcontroller gebruik ik een 16-bit timer om die pulsbreedte aan te sturen, een tweede timer bepaalt de snelheid waarmee de eerste timer de pulsbreedte laat variëren.  Dit geeft altijd één vloeiende beweging zonder schokjes.
Enkel als de servo supertraag (bv. 180° in één uur of zo) moet bewegen, zou je mijn stapjes kunnen 'zien'.  't Is te zeggen, als je een stapje van 180°/65536 = 0.003° uberhaupt zou kunnen zien...  Op de goedkope servos is 65536 stappen overkill, die gaan er meestal toch niet op reageren; maar het maakt niet uit, je kan de software gewoon z'n gang laten gaan, de servo begint wel te bewegen van zodra er genoeg verschil op de interne comparator zit.  En zelfs die zie je nog niet op de supergoedkope 3.7g servos van de chinees.  De software die ik gebruik is geïnspireerd op een hardware controllerke (Turnigy 3G) dat net hetzelfde doet met een extra timer en deze wordt gebruikt in RC helicopters...

Het lawaai van de servo is recht evenredig met de snelheid waarmee je 'm laat draaien.  Dat geluid wordt grotendeels veroorzaakt door de tandwielen.  Of je er nu een PWM H-bridge voorhangt of de ingebouwde H-bridge ervoor gebruikt maakt weinig of niks uit.  De truc met de 2 timers op de interne H-bridge zorgt ervoor dat de motor steeds op volle toeren draait, maar doordat ie maar zeer kort aan de bak moet (kleine variaties in de pulsbreedte), maakt ie minder lawaai.  Soms hoor je wel de interne jitter als je niet snel genoeg beweegt, maar die is redelijk stil tgo het normale bewegen.


Gerolf

De piste met het IC van Farnell is een doodlopende ...

Waarom? Het was op zich hoopgevend, maar
- de kwaliteit van de motortjes in de (goedkope) servo's is niet fantastisch
- de PWM van die chip is niet genoeg beïnvloedbaar (kan enkel via een eenvoudige I2C-boodschap)
- ik krijg geen voldoende trage, schokvrije beweging (6 seconden voor een volle 180° uitslag is te weinig)

=> mijn hoop is nu gesteld op een L293DD van STM: 2 gewone H-bruggen per IC
- daar kan ik de PWM (frequentie en pulsbreedte) van de chip zelf vrij instellen,
   en dus zo goed mogelijk aanpassen aan wat het motortje van de servo kan en moet doen

... maar dat betekent dus een totaal nieuwe print-layout, ... ::)
Groeten uit "Marche-en-Bières"   ** Modelspoor is plezant **   TPIII-H0-DC-Zelfbouw

Sattrickske

ouch, that hurts.  Gebeurt wel vaker dat een prototype niet goed wil werken, daarvoor is het een prototype hé.  Maar waarom gebruik je geen breadboard ipv van meteen een volledige print uit te tekenen en te etsen?  Je hebt enkel wat adaptertjes nodig voor de smd ic's die geen normale variant hebben.

Maar ik blijf bij mijn oorspronkelijke opmerking, volgens mij maak je het jezelf veel te moeilijk.  Gebruik gewoon de sturing die in je servo ingebakken zit en laat de PWM van de microcontroller het werk doen.

Als je toch wil volharden... probeer eens met MOSfets ipv kant en klare H-bridges.  Die H-bridges zijn meer voor het zware werk en deze die je nu kiest (L293DD) is hier niet goed voor servo motoren vrees ik.  Deze heeft een te hoge saturatie in de sink output (1.2 à 1.8V) en er blijft 1.3V achter (clamp diode).  Deze chip is bovendien veel te traag, probeer 'm niet te schakelen aan meer dan 5Khz.
Ik denk dat je met 4 MOSfets in dubbele totempole configuratie in dit geval beter af gaat zijn, deze zijn sneller en indien je zonder clamp diodes durft te werken gaan ze een lager spanningsverlies hebben (0.2-0.3V).

Heb je alles van de motor afgekoppeld?  Maw. is het enkel jouw schakeling die de motor spoelen activeert?

Gerolf

Nieuwe PCB is bijna getekend. 4 servo's, dus twee H-brug-IC's per printplaat
Alle elektronica is uit de servo - motortje was en is dus volledig "los" van de rest.

Bedankt voor de tip over de uitgangsspanning
=> ik voorzie een mogelijkheid om te voeden met "net ietsje meer spanning"

Die "traagheid" lees ik niet in de datasheet: rise en fall-time 250ns, on-delay 750ns en off-delay 200ns - lijkt me toch behoorlijk snel
Ik heb trouwens nog geen idee wat de beste PWM-frequentie wordt. 100 Hz? 10KHz? ... ?

Mosfets heb ik overwogen, maar nemen meer ruimte in. Het blijft wel een alternatief.

Bedankt voor het meedenken ;)
Groeten uit "Marche-en-Bières"   ** Modelspoor is plezant **   TPIII-H0-DC-Zelfbouw

Sattrickske

Graag gedaan...  Je tekent precies rapper een nieuwe versie, dan effe een testopstelling te maken.  Ieder zijn manier hé...
Dus als de motor volledig los gekoppeld, kan het niet zijn dat egatieve invloed gaat hebben van de oorspronkelijk ingebouwde elektronica.  Dus dat kunnen we al volledig uitschakelen en maakt het ontwerp al wat eenvoudiger.

De PWM frequentie zal niet te hoog mogen zijn met L293D(D).  Max. 5 kHz, datasheet zegt:
CiteerThis device is suitable for use in switching applications at frequencies up to 5 kHz.
250ns rise en fall tijden zijn echt traag hoor in digitale elektronica.  Het grote probleem is dat door de 'lange' rise en fall time, je heel vervelende harmonischen gaat hebben.  Voor 250ns worden die dan 4MHz, 2Mhz, 1MHz, 500kHz, 250kHz, ... en die komen heel gevaarlijk in de buurt van jouw operationele frequentie voor de PWM.  Als designer moest ik minstens 10 harmonischen uit de buurt blijven...  dus ik denk dat de datasheet wel om die reden niet meer dan 5kHz aanraadt.

Voor mosfets heb je ook arrays, kan je wat plaats doen besparen...

Gerolf

5 KHz is misschien genoeg  :-\
Ik ga intussen elk geval eens op zoek naar n en p-mosfet arrays  :P
Groeten uit "Marche-en-Bières"   ** Modelspoor is plezant **   TPIII-H0-DC-Zelfbouw

Geert

Citaat van: Gerolf op 25 november 2014, 14:27:12 PM
Ik ga intussen elk geval eens op zoek naar n en p-mosfet arrays  :P

en als ge deze gevonden hebt, laat maar weten welke  :) (voor een toekomstig projectje)

Geert
Schaal H0 - digitaal zelfbouw - Favoriete Lok: V200 DB

Gerolf

http://www.conrad.be/ce/nl/product/651398   ?

MCP1416: Combinatie van N- en P-Mosfet - halve H-brug dus
Eens geprobeerd om de lay-out te tekenen, en ik heb verdorie meer plaats als met die L293DD ...

Die laatste had ik al besteld  :-[
Nu maar wat van die mosfet-arrays besteld ...  ::)
Groeten uit "Marche-en-Bières"   ** Modelspoor is plezant **   TPIII-H0-DC-Zelfbouw

Sattrickske

Die L293DD zijn niet verloren hoor, kan je gerust gebruiken voor LF - motor toepassingen.
En zie je nu het verschil tussen de L293DD en die mosfet array: 20 à 25ns ipv van 250ns.  Kan je rustig 100kHz doorjassen, zolang het motorke maar volgt ;)
Ik gebruik iets gelijkaardig: 2N7002D, deze zijn nog sneller 7-20ns maar dit zijn dual n-channel mosfets.  Jouw MCP1416 is ook een hele goeie en door de p- en n-channel combinatie heb je meteen een halve H-bridge.  Goede keuze!  Maar!!!!! Laat je niet vangen tijdens het solderen, die spulletjes zijn echt mega klein: zie het bij benadering als een 0805 SMD'ke met 5 pootjes :o

Gerolf

Dat solderen valt nog mee, pitch van 0.95 mm - ik heb al lastigere gehad (pitch van de 0.5 ...)
... maar 't zijn leuke IC'tjes - en slechts 67 eurocent indien per 50 en dan vandaag nog eens 10% korting ...

Ontwerp is zo goed als klaar ... en die andere IC's zijn inderdaad "ooit" nog wel bruikbaar ...
Groeten uit "Marche-en-Bières"   ** Modelspoor is plezant **   TPIII-H0-DC-Zelfbouw

Sattrickske

Allez, good luck dan zeker!  'k ben benieuwd...

PeterC

Gerolf, ik volg jou draadje al sinds 'opening' maar heb/wou nog niet reageren.
Ik had er mijn bedenkingen bij: gaat Gerolf nu een automatische besturing en anti-bots-systeem in een Lada steken (sorry voor de Lada rijders)?
Maw: het motortje, de potmeter en de mechanische vertraging van die blauwe Chineeskes zijn mijns inziens niet gemaakt om nauwkeuriger aangestuurd te worden.
In de RC hobby worden die blauwkes enkel gebruikt voor 'toeters en bellen', nooit voor crutiale sturingen (bij een duur RC model ga je ook dure (en betrouwbare/nauwkeurige) servo's aanschaffen!).

Ik opteer meer voor Patrick's oplossing: door een µC je puls langzaam aanpassen voor een 'trage' verplaatsing van de servo-arm.

Terugmelding of de servo goed werkt?  Geen nood aan: één van mijn servodecoders had kuren en zette soms te pas en te onpas een wissel in de verkeerde stand.  Met als gevolg de sleep een verkeerd spoor op.  Besturingssoftware gaf een spookmelding en alles viel stil.  De decoder aan aan nader onderzoek onderworpen en een metalen bevestigingsschroef gaf soms kontakt tussen twee printspoortjes van de strokenprint.  Baantjes geïsoleerd en de decoder was terug in orde.

Maar ik weet dat je volhardt!

Hou ons op de hoogte.

Groetjes, Peter