elmowww
PA0EJE - www.eje-electronics.nl - e.jongerius[aapje]eje-electronics.nl - EJE Electronics - Elektronica/firmware ontwikkeling
Voor een hobbyprojectje heb ik 2 Heidenhain rotary encoders op de kop getikt:
ROD426:
TTL 1000 pulses per revolution
Leuk speelgoed, maar nu zit ik met een probleempje, eigenlijk wil ik de encoders op de stap precies bijhouden, en wel met een toerental tot 600 RPM (= 10 omw/sec = 10000 pulses/sec).
Nu zat ik eerst te denken om een PIC of een 8051 te nemen die de encoder bijhoudt en daarnaast PWM opwekt om de motor te sturen naar een gewenste positie/snelheid (opgegeven via RS232).
Als ik nu met interrupts de pulsen uitlees, krijg ik (op het max toerental) met 10 Khz interrupts binnen. Ik ben bang dat hierdoor de serieele communicatie niet meer lekker loopt. Of ik moet tijdelijk de interrupts uitschakelen en serieel communiceren, maar dan ben ik dus de exacte positie kwijt.
Dit krijg ik binnen:
_
____| |_________ Ua0
____ ____
| |____| | Ua1
____ ___
__| |____| Ua2
Wie heeft er een manier om de encoder ten alle tijde bij te houden en uit te kunnen lezen? Wie weet er hoe dat in industriele servo`s bijvoorbeeld gedaan wordt?
Misschien is een blok logica (fpga/cpld achtig iets) benodigd?
Wouter van Ooijen
Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog
> Wie weet er hoe dat in industriele servo`s bijvoorbeeld gedaan wordt?
Erg goed nadenken over je programma 
> Misschien is een blok logica (fpga/cpld achtig iets) benodigd?
als je dat toch doet, waarom dan niet een aparte microcontroller voor het bijhouden? dan kan die afe en toe de stand naar de hoofdcontroller sturen (bv SPI of parallel).
Jouke
Met geld moet je creativiteit bekopen.
misschien heb je hier wat aan
http://elm-chan.org/works/smc/report_e.html
Bit-Bang je de serieele interface?
Zo niet dan is er geen enkel probleem. Ik gebruik o.a. een Software DDS die de PIC elke 20 usec interrupt (50K ints/sec) en met een 20MHz kristal is dat geen enkel probleem.
Ik heb nog even naar mijn decoder routine gekeken en die is zo te zien 50..60 cycles, dus +/- 10 microseconden.
elmowww
PA0EJE - www.eje-electronics.nl - e.jongerius[aapje]eje-electronics.nl - EJE Electronics - Elektronica/firmware ontwikkeling
Mmm, dus toch niet zo hopeloos als ik dacht 
Ik ga binnenkort wel een electronisch testopstellinkje maken, met een h-brug op hardware pwm (heerlijk
), een RS232 achtige interface en een rotary encoder.
Doe serieel hardwarematig, alles interrupt driven. Met een 10MHz uC moet dat in assembly een eitje zijn, zeker als je je serieel protocol simpel houdt.
Op 20 november 2005 13:54:59 schreef elmowww:...Wie weet er hoe dat in industriele servo`s bijvoorbeeld gedaan wordt?...
Geen idee. Maar gaat wel met nog hogere snelheden. Ik heb hier nu een stel servo's liggen die per omwenteling 16384 delen tellen. Die motoren draaien maximaal 3000 toeren/min maar de drives houden 6000 toeren/min ook nog bij.
Met een doodordinaire tellerkaart of 300xxxC processor van Siemens is de snelheid die jij nodig hebt ook eenvoudig bij te houden. En zelfs een slome drol als de Siemens LOGO kan al tot 2kHz tellen.
Overigens even oppassen: je hebt het over pulsen die met 10kHz binnenkomen. Maar de pulsen zijn niet bijster interessant, je moet de flanken kunnen detekteren en die komen met 40kHz binnen.
Ik vindt het idee van Wouter wel tamelijk bijdehand: gewoon een aparte uC gebruiken.
En dan is er nog de vraag of je die resolutie wel nodig hebt. Je zou anders kunnen denken aan een overbrenging met een dun tandriempje.
[Bericht gewijzigd door GJ_ op ]
Jonathan
"Theorie is alleen te rechtvaardigen als 'n vorm van praktijk. De praktijk staat niet terecht voor 't hooggerechtshof van de theorie" (Stephan Toulmin)
Op 20 november 2005 14:10:52 schreef Jouke:
misschien heb je hier wat aan
http://elm-chan.org/works/smc/report_e.html
leuk, leuk
ik ga wel eventjes topic-hacken.
Voorbeeld is verstaanbaar, het enige wat mij onduidelijk is hoe je een integrator programeerd in een PIC (voorbeeld is AVR en ik vind het niet)
kan mij iemand een voorbeeld geven in JAL?? ( of asm)
Op 20 november 2005 17:23:00 schreef Jonathan:
[...]leuk, leuk
ik ga wel eventjes topic-hacken.
Voorbeeld is verstaanbaar, het enige wat mij onduidelijk is hoe je een integrator programeerd in een PIC (voorbeeld is AVR en ik vind het niet)
kan mij iemand een voorbeeld geven in JAL?? ( of asm)
Op de site van Microchip staan een drietal application notes voor exact deze toepassing.
Compleet met schema's en code, heb de nummers niet bij de hand maar met search "servo motor" vind je ze wel.
Jonathan
"Theorie is alleen te rechtvaardigen als 'n vorm van praktijk. De praktijk staat niet terecht voor 't hooggerechtshof van de theorie" (Stephan Toulmin)
Op 20 november 2005 20:56:48 schreef lucas:
heb de nummers niet bij de hand maar met search "servo motor" vind je ze wel.
een en ander gevonden dank u
, iemand die een JAL voorbeeld heeft nog beter 
[Bericht gewijzigd door Jonathan op ]
Eten was klaar, 2de deel:
Op 20 november 2005 16:26:08 schreef GJ_:
Overigens even oppassen: je hebt het over pulsen die met 10kHz binnenkomen. Maar de pulsen zijn niet bijster interessant, je moet de flanken kunnen detekteren en die komen met 40kHz binnen.
Die flanken en hun volgorde heb je alleen nodig om de draairichting van de motor te bepalen.
Dit is enkel nodig bij stilstand en lage toerentallen, bij hogere snelheden kan de motor niet zomaar van richting veranderen.
Dus kan je bij lage snelheid de flanken bekijken en bij een bepaalde snelheid overschakelen naar het detecteren van een enkele flank om de positie bij te houden.
In de AN's van Microchip wordt gebruik gemaakt van de interne counters van de PIC en worden geen interrupts gebruikt voor de encoder.
Als je continue de flanken bekijkt kan je de resolutie van 1000 CPR verhogen naar 2000 of 4000.
Die mogelijkheid zit ingebouwd in de meeste professionele servo drives, zelfs de low-cost hobby zoals Gecko en Rutex hebben deze optie.
Wouter van Ooijen
Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog
Op 20 november 2005 21:46:33 schreef lucas:
Dus kan je bij lage snelheid de flanken bekijken en bij een bepaalde snelheid overschakelen naar het detecteren van een enkele flank om de positie bij te houden.
Ik neem aan dat encoders waar je dit bij doet geen contactdender geven?
Op 20 november 2005 21:51:51 schreef Wouter van Ooijen:
[...]Ik neem aan dat encoders waar je dit bij doet geen contactdender geven?
Contactdender? De encoders waar we het hier over hebben genereren optisch een analoog sinus-cosinus signaal dat door interne elektronica omgezet wordt in een digitaal quadrature signaal, geen contacten toch?
Het is wel belangrijk om de bekabeling zorgvuldig uit te voeren (stoorpulsen) en een voorziening te maken in de software om een defect aan de encoder te detecteren, anders gaat de drive de motor vol uitsturen als de pulsen wegvallen en dit kan desastreus zijn, zelfs levensgevaarlijk in sommige toepassingen.
Wouter van Ooijen
Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog
Op 20 november 2005 22:13:55 schreef lucas:
Contactdender? De encoders waar we het hier over hebben genereren optisch een analoog sinus-cosinus signaal
Ik had nog nergens gezien dat jullie het over zo'n encoder hadden, ik ken (voornamelijk) het schakelaar-type, en dan zou die methode niet meer opgaan wegens contactdender. Maar daardoor zou zo'n hoge pulssnelheid uberhaupt al niet kunnen!
elmowww
PA0EJE - www.eje-electronics.nl - e.jongerius[aapje]eje-electronics.nl - EJE Electronics - Elektronica/firmware ontwikkeling
Op 20 november 2005 22:31:05 schreef Wouter van Ooijen:
[...]Ik had nog nergens gezien dat jullie het over zo'n encoder hadden, ik ken (voornamelijk) het schakelaar-type, en dan zou die methode niet meer opgaan wegens contactdender. Maar daardoor zou zo'n hoge pulssnelheid uberhaupt al niet kunnen!
http://www.eje-electronics.nl/circuitsonline/heidenhain1_klein.JPG
http://www.eje-electronics.nl/circuitsonline/heidenhain1.JPG
Dat zijn ze 
Maar ik ga de AN's eens doorkijken! De resolutie van 1000 p/rev is meer dan zat, het zou wel fijn zijn als de toerentallen hoger konden liggen, maar da`s pas nodig in mijn volgende ideetjes (;)).
Ik denk dat ik een simpel bijv. de Ua1 op een interrupt zit, en dan test of de Ua2 hoog of laag is, ik moet daar de richting uit halen 
-- Edit
Ah, dit is wel mooi 
http://ww1.microchip.com/downloads/en/AppNotes/00696a.pdf
Simpel met wat flipjes en flopjes de richting en hoeveelheid stappen bepalen en in laten voeren in de counter. Ik wist niet dat die counters zo konden operenen (shame on me
).
Ik ben alweer een end verder 
[Bericht gewijzigd door elmowww op ]
Op 20 november 2005 21:46:33 schreef lucas:...
Als je continue de flanken bekijkt kan je de resolutie van 1000 CPR verhogen naar 2000 of 4000.
Die mogelijkheid zit ingebouwd in de meeste professionele servo drives...
Die doen dat standaard. Allemaal.
Op 20 november 2005 21:51:51 schreef Wouter van Ooijen:
Ik neem aan dat encoders waar je dit bij doet geen contactdender geven?
De meesten zijn optisch.
Op 20 november 2005 22:13:55 schreef lucas:
[...]Contactdender? De encoders waar we het hier over hebben genereren optisch een analoog sinus-cosinus signaal dat door interne elektronica omgezet wordt in een digitaal quadrature signaal, geen contacten toch?
Welnee: er zit een geetste glasplaat in. Een sin-cos signaal wordt -of direct gebruikt -of omgezet in een absoluut signaal. Dat absoluutsignaal kan een gray-code zijn of b.v. omgezet worden naar een serieel signaal (dat zijn de modernste)
Zo'n serieel signaal heeft veel voordelen: langere kabels mogelijk, minder storingsgevoelig, mogelijke resolutie tot 1/8.000.000 deel van een omwenteling. en synchronisatietijden van 50ns.
----edit----------------
Ik geloof dat ik Lucas ook niet goed begrepen heb. Waar hij het over een optische sinus cosinus had meende ik dat hij het over een sin-cos encoder had. Zijn optische sin-cos is in het geval van een encoder gewoon een beetje ongelukkig uitgedrukt.Een sin-cos encoder (of resolver) is een totaal ander systeem. Wat hij bedoelde klopt wel.
[Bericht gewijzigd door GJ_ op ]
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
als je echt zeker wilt zijn gebruik je daar harde logica voor inplaats van een microcontroller.
Hewlett packard (nu agilent) heeft (had) daar chips voor. kijk eens op hun website
elmowww
PA0EJE - www.eje-electronics.nl - e.jongerius[aapje]eje-electronics.nl - EJE Electronics - Elektronica/firmware ontwikkeling
Op 21 november 2005 17:28:51 schreef free_electron:
als je echt zeker wilt zijn gebruik je daar harde logica voor inplaats van een microcontroller.Hewlett packard (nu agilent) heeft (had) daar chips voor. kijk eens op hun website
Hardware counters van een PIC zijn toch niet zo onbetrouwbaar? Ervoor zet ik dan een stukje 74xx logica die up en down count stapjes trekt.
Of bedoel je dat een uC niet bedrijfsvast genoeg is?
Trouwens: hoe kan ik het beste mijn in en uitgangen afschermen voor EMC achtige gebeurtenissen? Ik heb wel diverse documentatie erover, maar praktische dingen blijven ver weg...
- Voedingslijnen tussen in en uitgangen zo kort mogelijk
- HF gedeelten kort houden (kristal en PWM gedeelte)
- Connectoren en in/uitgangen dicht bij elkaar
- Geen onnodige lussen
- eea door smoorspoelen halen? zoja wat en hoe?
elmowww
PA0EJE - www.eje-electronics.nl - e.jongerius[aapje]eje-electronics.nl - EJE Electronics - Elektronica/firmware ontwikkeling
Ok, ben nu weer eens verdergegaan, alles ziet er volgens mij goed uit 
Alleen nog een paar vraagjes over de encoder:
Heeft de volgende aansluitingen:
1 _Ua2
2 5V Sensor
3 Ua0
4 _Uao
5 Ua1
6 _Ua1
7 _Uas
8 Ua2
9 Scherm
10 0V UN
11 0V sensor
12 5V Up
Wat zijn Up en Un icm met 5V sensor en 0V sensor?
Welke functie hebben ze?
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
Op 21 november 2005 23:50:18 schreef elmowww:
[...]Hardware counters van een PIC zijn toch niet zo onbetrouwbaar? Ervoor zet ik dan een stukje 74xx logica die up en down count stapjes trekt.
Of bedoel je dat een uC niet bedrijfsvast genoeg is?
Trouwens: hoe kan ik het beste mijn in en uitgangen afschermen voor EMC achtige gebeurtenissen? Ik heb wel diverse documentatie erover, maar praktische dingen blijven ver weg...
- Voedingslijnen tussen in en uitgangen zo kort mogelijk
- HF gedeelten kort houden (kristal en PWM gedeelte)
- Connectoren en in/uitgangen dicht bij elkaar
- Geen onnodige lussen
- eea door smoorspoelen halen? zoja wat en hoe?
die chips zijn toch iets intelligenteer hoor. ze hebben de debouncing aan boord , kunnen missing pulses detecteren etcetera. ze monitoren de snelheid van binnenkomende pulsen en gaan de debouncing tijd dynamisch gaan anpassen. als er pulsen abrupt wegvallen kunnen ze uit de verlopen tijd en de laatst gekende en huidige pulssnelheid achterhalen hoeveel missing pulsen er waren. ( zo kunnen ze sporadische slechte contacten comnpenseren alsook bijvoorbeeld schade aan de pickupschijf wegwerken ( in beperkte mate ) als je dat met je processortje moet doen .....
ze kunnen trouwnes nog veel meer. er is een variant die ook een stuuruitgang heeft voor DC motoren. e stelt paramaeters in als de chopperfreqentie , attack en decay time , brake time en aantal omwentelingen en de ramp curve. en dan geef je gewoon het 'start' commando. de chip doet de rest.
die dingen worden veel gebruikt in robots . je geeft bijvoorbeeld het volgende op. 15000 pulsen rechtsom. eerste 5000 sijn aanloop volgens logaritmische schaal. 7000 pulsen op volle kracht en de rest is een brakedown als inverse logaritmic ( of lineair of whatever )
de chip zal de motor gecontroleerd in snelheid opdrijven en de ganse weg controleren. als de motoro zijn ding gedaan heeft springt een van de io pinnen hoog.
zo kan je robots sturen met meerdere assen. je geeft gewoon de paramters en die chips doen de rest ( en veel beter dan je ooit onder software controle gaat kunnen, kan natuurlijk ook met software maar je zal een zeeeer straffe cpu nodig hebben die dat kan aan de snelheden waarop die chips dat kunnen. het zijn gene processoren maar echte harde logica speciaal ontwikkeld voor dat doel )
Op 22 november 2005 17:20:50 schreef free_electron:
..intelligenteer..anpassen..comnpenseren..trouwnes..paramaeters ..sijn..motoro..paramters
Heee, Electron, je toestenbrod is kapot
sorry, kon het niet laten
Jonathan
"Theorie is alleen te rechtvaardigen als 'n vorm van praktijk. De praktijk staat niet terecht voor 't hooggerechtshof van de theorie" (Stephan Toulmin)
Op 22 november 2005 17:20:50 schreef free_electron:
die dingen worden veel gebruikt in robots .
...
zo kan je robots sturen met meerdere assen. je geeft gewoon de paramters en die chips doen de rest ( en veel beter dan je ooit onder software controle gaat kunnen, kan natuurlijk ook met software maar je zal een zeeeer straffe cpu nodig hebben die dat kan aan de snelheden waarop die chips dat kunnen. het zijn gene processoren maar echte harde logica speciaal ontwikkeld voor dat doel )
daar zeg je het ook meteen free-electron: dit zijn zaken voor profesionele doeleinden. Ik denk dat we dit moeten gescheiden houden met projectjes voor hobbydoeleinden. Een picje of AVR of... kan best perfect dienen om een servomotorke aan te sturen. met een paar van die dingen maak je gerust een CNC-printboormachientje of plottertje en zelf meer.
Je kan niet verachten dat je met eigenbrowsels zaken gaat maken als een 6-assige lasrobot met nog eens 6 externe assen die alle 12 volledig synchroon kunnen bewegen. Of een 3D-laser met lineaire motoren die acceleren als hel (eentje zien staan op beurs jeetje
wat een versnellingen) en die toch toleranties geven in 100sten mm??? Dit zijn dan per as heuse servokaarten waarvan de IC's hoeveelheden pinnen hebben waar ik draaierig van word 
geen kritiek hoor, maar het zijn twee verschillende werelden denk ik 
Op 22 november 2005 17:41:50 schreef Jonathan:
..die acceleren als hel (eentje zien staan op beurs jeetjewat een versnellingen) en die toch toleranties geven in 100sten mm??? ...
mooi he? Daarom bind ik losse motoren altijd met dikke spanbanden vast voor ik ga testen anders vliegen ze door de massatraagheid van hun eigen (lichtgewicht)rotor door de hele werkplaats
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
Op 22 november 2005 17:39:18 schreef GJ_:
[...]
Heee, Electron, je toestenbrod is kapot
sorry, kon het niet laten
mijn toestenbrod ?
kijk das't probleem. ik denk nog altijd rapper dan ik kan op dat klavier rammen. tijd om eens een telepatische interface te ontwerpen voor mijne pc ...
Sparks
mijn werk is zo geheim dat zelfs ik niet weet waar ik mee bezig ben....
Het is altijd zo jammer dat al die snelle massa ook weer afgeremd moet worden.
Heb voor een paar jaar terug een jaar achter een harison draaibank met fanuc besturing gestaan.
Was mijn eerste cnc draaibank waar ik mee werkte...
Best wel eng die ijlgang die vlak voor je produkt stopt.
Vooral als je conventioneel draaien gewend bent 