PDA

View Full Version : PWM-servoschakeling



Psychomantis
15 maart 2013, 21:54
Sorry dat ik jullie hiermee lastig val, dit heeft niets met amps of muziek te maken. Ik erken mijn schuld in het vervuilen van dit forum... Maar ik had een korte vraag voor de mensen die iets van servo's kennen, en deze keer is google mijn vriend niet.
Voor een (gequoteerde) studieopdracht moet ik een PWM-schakeling maken om een servo aan te sturen, maar alles is zelfstudie, eigenlijk zonder cursus erbij, dus moet ik alles zelf uit zien te vissen. En dat valt niet altijd mee.

Ik genereer een (geïnverteerd) PWM-signaal met een PIC-microcontroller, maar die mag niet rechtstreeks aan de servo hangen, daar moet een buffer tussen.
We kregen enkel beschikking over een darlington-ic (ULN2003A) en daar moeten we het mee doen, maar ik vraag me af, is deze schakeling correct? De weerstandswaarde R1 is een (berekende) gok, ik zou niet echt weten wat daar moet. Alle andere weerstanden zitten reeds in het IC.

Servo is een goedkope Towerpro MG995, pulsfrequentie 50 Hz, pulslengte tussen de 1 en 2 ms. De voeding van de servo is 5V. De darlington inverteert, dus ik stuur zelf het geïnverteerde signaal uit de microcontroller naar de darlington. De microcontroller geeft een amplitude van 3,3V

http://i45.tinypic.com/2hoi5af.png

cluseau
15 maart 2013, 22:18
Die twee torren, stellen die een darlington uit je IC voor?

Zijn de weerstanden die erom heen staan dan ook geintegreerd?

De weerstand R is makkelijk te berekenen. Als je weet wat de poort mag leveren kun je de maximale stroom berekenen uit de uitgangsspanning van de poort min de 2x b-e overgang in de darlington. In dit geval 1.4V dus. Zou betekenen dat je puls over de weerstand 3.3-1.4= 1.9V is. Weet je de maximaal afneembare stroom van de controller kun je de weerstand nauwkeurig uitrekenen.

Je mist een blusdiode over de laatste tor. Deze heeft bescherming nodig voor de tegen EMK.

De 100 Ohmweerstand //diode zal waarschijnlijk vervagen moeten worden door je servomotor?

Als het een opdracht voor een studie is zou ik het belangrijker vinden hoe je aan je antwoord gekomen ben dan dat je de juiste uitkomst hebt.

Psychomantis
15 maart 2013, 22:55
Dank voor de uitleg. De torren stellen de darlington uit het IC voor, alle weerstanden er rond zijn geïntegreerd, behalve die 100 Ohm die parallel staat met de diode.
Ik ben nog niet helemaal mee merk ik. Die 1,9V, gaat dat over de spanning over de ingangsweerstand? Die weerstand is vast, ik kan er wel extra weerstanden voor schakelen, maar 2,7 kohm lijkt me al voldoende (de controller kan maximaal 10 mA leveren)?
http://www.emant.com/image/Fan_html_5d7968bc.gif

Het gaat eerder over waar ik de signaalingang van de servo moet aansluiten. De servo moet de pulsen zien tussen de signaalingang en de massa (3- tot 6V-pulsen zijn goed). Verder heeft de servo nog een 5V-ingang voor de motorvoeding. Die hang ik gewoon aan een 5V-adapter.
Maar hoe moet ik de servo dan 'in de plaats' hangen van die 100 ohm?

Die blusdiode is er inderdaad, had ik over gekeken.

Wat je daar zegt over dat de weg belangrijker is dan het antwoord is zeker waar, maar zonder veel ondersteuning of cursussen is dat makkelijker gezegd dan gedaan...

cluseau
15 maart 2013, 23:35
Die 1,9V, gaat dat over de spanning over de ingangsweerstand?

Zeker, de darlington gaat pas stroom trekken als de twee B-E overgangen van 0.7V elk zijn overwonnen. Dus de controller moet eerst 1.4V leveren voor er ook maar iets gaat gebeuren. De stuurstroom is dus (3.3-1.4)/R. Vanuit de controller gezien is de minimale weerstand bij een stroom van 10mA 1.9/0.01= 190 Ohm en geen 2k7.

Maar......een darlington heeft een zeer hoge stroomversterking van zeg maar even 10000 maal. In geval van de 2k7 is de basisstroom dan 1.9/2700= 7mA en ruim voldoende om de uitgang vol uit te sturen. Bij een versterking van 10000 zou dat een collectorstroom van 70A kunnen verzorgen dus de geintegreerde 2k7 werkt zeker goed. Als ik jouw examinator zou zijn zou ik alleen willen weten hoe je aan de antwoorden gekomen ben. Het is beter te begrijpen waarom iets is zoals het is dan de juiste cijfers aan te leveren.



De servo moet de pulsen zien tussen de signaalingang en de massa (3- tot 6V-pulsen zijn goed).
Ik begin het nu langzaam te snappen. Je hebt waarschijnlijk een servo met alle schakelelektronica er in en heb je alleen een PWM signaal nodig. Nu snap ik ook de funtie van de 100 Ohm weerstand. Als je weet wat de ingangsimpedantie van de servo is kun je de 100 Ohm waarschijnlijk wel wat groter kiezen. De nelasting voor de ULN2003 is dan niet onnodig hoog.


Die blusdiode is er inderdaad, had ik over gekeken.
De blusdiode welke geintegreerd is kan die funtie niet aan he! Je zal een snelle shotky moeten nemen.

Psychomantis
16 maart 2013, 00:01
Ik begin het nu langzaam te snappen. Je hebt waarschijnlijk een servo met alle schakelelektronica er in en heb je alleen een PWM signaal nodig. Nu snap ik ook de funtie van de 100 Ohm weerstand. Als je weet wat de ingangsimpedantie van de servo is kun je de 100 Ohm waarschijnlijk wel wat groter kiezen. De nelasting voor de ULN2003 is dan niet onnodig hoog.

De blusdiode welke geintegreerd is kan die funtie niet aan he! Je zal een snelle shotky moeten nemen.

Oke, check. Het is inderdaad een servo met alle elektronica in (sorry als dat niet duidelijk was). De ingangsweerstand weet ik niet, maar ik zal er maar vanuitgaan dat hij niet zo hoog is, vermits ik de microcontroller, die toch 10mA kan leveren, er niet rechtstreeks aan mocht hangen. Ik zal wat experimenteren met waardes tussen de 500 en 100 ohm.
Je hebt me trouwens net de betekenis en het nut van een Schottky-diode bijgebracht ;)

Bedankt voor de hulp (alweer)!

nico verduin
16 maart 2013, 08:17
Die ULN heb je eigenlijk alleen maar nodig om het signaal te inverteren. De belasting van die servo's is te verwaarlozen. Je kan de Servo eigenlijk ook rechtstreeks aan de PIC output hangen. Maar omdat je een geïnverteerd signaal eraan hangt moet je hem omgooien.
Gewoon een 1K-10K weerstand op R1 gooien :). Dan klapt ie lekker op en neer. Die ULN verzadigd al bij rond de 2.5V

Normaliter zou ik een BC547 gebruiken of de PIC (als ie dat kan) in non-inverted mode zetten.

Of Omgekeerd redeneren. Van lage stand naar hoge stand (=lees hoek) heb je een korte of langere puls nodig. Als het signaal geïnverteerd is, dan ga je dus van Hoge hoek naar laag. bij een korte puls naar langere puls. Dan heb je die ULN niet eens nodig.

cluseau
16 maart 2013, 09:12
Dan heb je die ULN niet eens nodig.


Nico, die ULN is een "part of the deal"



......maar die mag niet rechtstreeks aan de servo hangen, daar moet een buffer tussen.
We kregen enkel beschikking over een darlington-ic (ULN2003A) en ......

nico verduin
16 maart 2013, 09:14
Dan gewoon een 1K-10K weerstand erin hangen. :makeup:

cluseau
16 maart 2013, 09:27
Dan gewoon een 1K-10K weerstand erin hangen. :makeup:

Ben ik nou gek of.......


maar die mag niet rechtstreeks aan de servo hangen, daar moet een buffer tussen.

nico verduin
16 maart 2013, 09:38
Niet moeilijker maken dan het is. Hij heeft alleen maar logic levels nodig van 0V en 5V.
Als hij hem open stuurt, dan wil die darlington zoveel stroom trekken dat vrijwel alle spanning over die weerstand loopt. Trekt hij de ingang naar 0 dan spert de hele zaak en is de spanning op de uitgang 5V - VCE spanningen

cluseau
16 maart 2013, 13:29
Hij heeft alleen maar logic levels nodig van 0V en 5V

Dat weten wij maar hij MOET een buffer gebruiken, hoort bij de opdracht. (of ik moet het verkeerd begrijpen)

nico verduin
16 maart 2013, 14:24
Op zich prima en overbodig. Maar dan blijft het nog steeds bij logic levels. IK heb genoeg van die MG995/6R's gebruikt

cluseau
16 maart 2013, 20:06
http://home.casema.nl/jajop/cluseau/facepalm-pope.jpg

Psychomantis
16 maart 2013, 20:32
Dank voor de reacties :) Met de genoemde waarden ziet een simulatie op Circuitlab er goed uit. Enige waar ik niet helemaal zeker van ben is het nulniveau van de PWM aan de signaalingang van de servo. De puls is net geen 5V (t.o.v. ground).
Tussen de pulsen is de aangelegde spanning tussen de 0,1V en de 0,5V (afhankelijk van de weerstandswaarden). Is dat voldoende laag voor de servo om dit als '0' aan te zien?

cluseau
16 maart 2013, 20:45
0.5V is digitaal nog steeds gedefinieerd als een nul.

nico verduin
16 maart 2013, 21:43
Misschien even ter toelichting hoe dit soort eenvoudige servo's werken:
De PWM laadt een condensator op in de controller (zit in de servo).
Een potmeter zit in die servo die als een spanningsdeler (tussen de 5V en 0V) werkt naar gelang de stand (rotatie)
Beide gaan in een comperator waar een vergelijking in plaatsvindt. Is de PWM spanning groter als de potmeter spanning draait hij terug en omgekeerd. Is hij gelijk dat slaat de motor gewoon af.
Of er compensatie in de elektronica zit voor een "0" weet ik niet. zou best kunnen. Tegenwoordig kan er veel in een kleine chip.
Aan de andere kant is mijn ervaring dat die MG's niet zo erg nauwkeurig zijn. Tenslotte alle waar naar zijn geld.
Mocht het allemaal te onnauwkeurig zijn kan je altijd weer compensatie uitvoeren in de software.

Psychomantis
16 maart 2013, 22:06
Mooie simpele uitleg, ik snap het ! :D
Als ik een synthese maak van jullie antwoorden, lijkt het erop dat het goed gaat komen.
Nauwkeurigheid is niet zo belangrijk: de servo dient om een loop van een pingpongbalkanon (dat is de ontwerpopdracht) te verdraaien tussen hoeken van +/- 25°, dat moet niet zo nauwkeurig.
Volgende week, tijdens de werkzitting, maak ik het schema even en sluit ik hem op de microcontroller aan, en dan laat ik wel weten of hij doet wat hij moet doen ;)

nico verduin
16 maart 2013, 22:24
appeltje eitje :)
PIC in assembler of C of Basic geprogrammeerd?

Psychomantis
16 maart 2013, 22:55
Dat hoop ik in ieder geval :)
Hij is in mikroC geprogrammeerd, een versie van C dus. Jammer genoeg hebben we geen lessen C gekregen, dat was ook zelf uitzoeken. Het programma is normaal gezien af.
Maar zonder gebruik van de ingebouwde PWM-module, we hebben gewoon met while-lussen gewerkt.

nico verduin
16 maart 2013, 23:30
Die compiler gebruik ik ook als ik met PIC's werk. Prima compiler en uitstekende service van die gasten. Tja al;s je het allemaal zelf mocht leren dan heb je nog een paar uitdagingen :)
Mijn eerste programma dateert terug in 1976 :) Assembly en machine code op een 6502 KIM-1. En sindsdien nog steeds...naast het gewone werk (patrouille leider spelen :))

Psychomantis
17 maart 2013, 17:36
Ik hoop dat ik zoiets over 30 jaar ook mag zeggen ;)

Psychomantis
25 maart 2013, 18:54
Heb hem getest, en natuurlijkt werkt het allemaal prima. Bedankt mannen!

nico verduin
25 maart 2013, 18:58
Ik had niet anders verwacht :)
Source code nog beschikbaar voor review? :)

Psychomantis
26 maart 2013, 19:15
Source code ga ik eerst wat mooier schrijven. Is nu echt een warboel :D Ik post hem hier wel als ie helemaal af is ;)