Dividera encoder pulser
Re: Dividera encoder pulser
Den får inte prediktera fel. Det får inte finnas någon tvetydighet.
Bara accelerationen inte är omåttlig så går det bra. Programkoden behöver inte bli så väldigt komplicerad. Kanske hundra maskincykler eller så.
Jag använder undersampling i mina experiment med motorservon. Givarna är 'analoga' dvs ger sinus och cosinus. Samplingsfrekvensen är 10 kHz och jag har kört upp till 25000 kvadraturcykler per sekund. Inga problem. Eftersom positionsvärdet även används att styra kommuteringen så hade ett positionsfel visat sig direkt.
Bara accelerationen inte är omåttlig så går det bra. Programkoden behöver inte bli så väldigt komplicerad. Kanske hundra maskincykler eller så.
Jag använder undersampling i mina experiment med motorservon. Givarna är 'analoga' dvs ger sinus och cosinus. Samplingsfrekvensen är 10 kHz och jag har kört upp till 25000 kvadraturcykler per sekund. Inga problem. Eftersom positionsvärdet även används att styra kommuteringen så hade ett positionsfel visat sig direkt.
Re: Dividera encoder pulser
Hmmm....nu har jag kopplat upp Jesses koppling - i princip i alla fall men jag får det inte att fungera....
Det här kommer bli knöligt att förklara men jag ska försöka att göra det på ett så tydligt sätt som möjligt. Jag har gjort ett schema i Eagle men att infoga en lågupplöst skärmdump här är lönlöst, någon som kan hosta en .pdf?
I alla fall, här kommer två skärmdumpar från LOGIC (the logic analyzer):

Den första visar rotation medurs, de två första kanalenrna är encoderns A- och B-kanal. Den tredje kanalen är utgången från den "nedre vippan i den övre gruppen" i Jesses schema (den som är märkt MED). Som synes så kommer det här pulser vars stigande flank är syncad med den stigande flanken på (B) - precis som det ska vara, antar jag.
Den fjärde kanalen är utgången från den nedersta vippan i den "nedre gruppen" i Jesses schema (den som är märkt MOT) och den femte kanalen är utgången på näst nedersta vippan i den "den nedre gruppen" (den som går till Reset på "riktningsvippan").

Den andra skärmdumpen visar rotation moturs. Samma setup som ovan. Som synes så kommer klock-pulserna fortfarande på kanal tre men nu är dom syncade med den stigande flanken på (A) istället. (Borde dom komma på kanal fyra, och fortfarande vara syncade men (B) eller?)
Nu är det ju högst sannolikt att JAG kopplat något fel men jag har trippelkollat kopplingen mot mitt "eget" schema och dubbelkollat mitt schema mot Jesses. Jag kan maila mitt schema som PDF till den som kan tänka sig att jämföra.
/Henrik.
PS. Jag har lagt två kvällar på detta nu och har inte för avskikt att göra det till ett långtidsprojekt. Antingen så enas vi om att det verkligen BORDE fungera som Jesse ritat och han "vinner" (och jag får leta fel i min koppling) eller så kommer vi fram till att nått är galet eller missat i konstruktionen.
Det här kommer bli knöligt att förklara men jag ska försöka att göra det på ett så tydligt sätt som möjligt. Jag har gjort ett schema i Eagle men att infoga en lågupplöst skärmdump här är lönlöst, någon som kan hosta en .pdf?
I alla fall, här kommer två skärmdumpar från LOGIC (the logic analyzer):

Den första visar rotation medurs, de två första kanalenrna är encoderns A- och B-kanal. Den tredje kanalen är utgången från den "nedre vippan i den övre gruppen" i Jesses schema (den som är märkt MED). Som synes så kommer det här pulser vars stigande flank är syncad med den stigande flanken på (B) - precis som det ska vara, antar jag.
Den fjärde kanalen är utgången från den nedersta vippan i den "nedre gruppen" i Jesses schema (den som är märkt MOT) och den femte kanalen är utgången på näst nedersta vippan i den "den nedre gruppen" (den som går till Reset på "riktningsvippan").

Den andra skärmdumpen visar rotation moturs. Samma setup som ovan. Som synes så kommer klock-pulserna fortfarande på kanal tre men nu är dom syncade med den stigande flanken på (A) istället. (Borde dom komma på kanal fyra, och fortfarande vara syncade men (B) eller?)
Nu är det ju högst sannolikt att JAG kopplat något fel men jag har trippelkollat kopplingen mot mitt "eget" schema och dubbelkollat mitt schema mot Jesses. Jag kan maila mitt schema som PDF till den som kan tänka sig att jämföra.
/Henrik.
PS. Jag har lagt två kvällar på detta nu och har inte för avskikt att göra det till ett långtidsprojekt. Antingen så enas vi om att det verkligen BORDE fungera som Jesse ritat och han "vinner" (och jag får leta fel i min koppling) eller så kommer vi fram till att nått är galet eller missat i konstruktionen.
- tecno
- Inlägg: 27248
- Blev medlem: 6 september 2004, 17:34:45
- Skype: tecnobs
- Ort: Sparreholm, Södermanland N 59° 4.134', E 16° 49.743'
- Kontakt:
Re: Dividera encoder pulser
HO
Maila över PDF filer så tar jag hand om detta
http://goto.glocalnet.net/Bengt.CNC.pag ... v%20A0.pdf
Maila över PDF filer så tar jag hand om detta
http://goto.glocalnet.net/Bengt.CNC.pag ... v%20A0.pdf
Re: Dividera encoder pulser
OK, vi blåser av tävlingen här.... Tack Bengt för att du hostar schemat tills vi rett ut det hela...
Om Jesses lösning fungerar så "vinner" han eftersom han var först men vi måste utreda varför den beter sig som den gör (mitt fel eller fel på konstruktionen?).
Sedan går turen vidare till Rauken och sen blir det min tur
Jag hittade nämligen det här schemat, ritat av mr. Gecko (Mariss Freimanis):

Kör utgången till U/D räknare och en XOR som i tidigare förslag så borde det vara klart, eller? Enligt texten i filen jag "snodde" bilden från så är den god för "in excess of 250kHz" så rent tävlingmässigt kvalificerar den väl inte men om inte Jesses lösning funkar så gör nog Raukens det.
Om Jesses lösning fungerar så "vinner" han eftersom han var först men vi måste utreda varför den beter sig som den gör (mitt fel eller fel på konstruktionen?).
Sedan går turen vidare till Rauken och sen blir det min tur


Kör utgången till U/D räknare och en XOR som i tidigare förslag så borde det vara klart, eller? Enligt texten i filen jag "snodde" bilden från så är den god för "in excess of 250kHz" så rent tävlingmässigt kvalificerar den väl inte men om inte Jesses lösning funkar så gör nog Raukens det.
Re: Dividera encoder pulser
Hej.
Har inte hunnit logga in här på ett tag, och nu är klockan lite för mycket, men jag har hämtat ner pdf-filen. Ska studera den i morgon. Kanske är det några siffror som är omkastade någonstans. Antingen av mig eller av dig. Det borde vara omöjligt att MED ska ge signal om den går baklänges, men jag kanske har gjort en dundertabbe? Vi hittar nog felet ganska snart, när det är så grovt.
Angående mer praktiska lösningar så ska jag se vad jag kan göra för att få en attiny att göra samma jobb med ca 20MHz klocka. tror det ska gå med extremt effektiv assembler. Ser nästan koden framför mig eftersom jag tänker använda samma logiska följd som i hårdvaruvarianten. Då kommer den att kunna bli liten och snygg.
Har inte hunnit logga in här på ett tag, och nu är klockan lite för mycket, men jag har hämtat ner pdf-filen. Ska studera den i morgon. Kanske är det några siffror som är omkastade någonstans. Antingen av mig eller av dig. Det borde vara omöjligt att MED ska ge signal om den går baklänges, men jag kanske har gjort en dundertabbe? Vi hittar nog felet ganska snart, när det är så grovt.
Angående mer praktiska lösningar så ska jag se vad jag kan göra för att få en attiny att göra samma jobb med ca 20MHz klocka. tror det ska gå med extremt effektiv assembler. Ser nästan koden framför mig eftersom jag tänker använda samma logiska följd som i hårdvaruvarianten. Då kommer den att kunna bli liten och snygg.
Re: Dividera encoder pulser
Nu hittade jag äntligen schemat jag visste att jag hade sett: http://neil.fraser.name/hardware/gray2dir/
Den lösningen skall enligt artikelförfattaren undvika jitterproblem, och ifall man byter ut 4000-kretsarna mot 74xxx så borde den klara betydligt högre frekvens.
Figur 4 i denna Application Note från Honeywell beskriver hur man kan använda sig av en högfrekvent systemklocka för att hålla encoderflankerna synkrona, och slutligen visar AN501 från LSICSI hur man gör ett digitalt lågpassfilter utifrån diskret logik för att filtrera bort störningar på encoderingångarna (en teknik som beskrivs i förbigående av Honeywell ovan).
Den lösningen skall enligt artikelförfattaren undvika jitterproblem, och ifall man byter ut 4000-kretsarna mot 74xxx så borde den klara betydligt högre frekvens.
Figur 4 i denna Application Note från Honeywell beskriver hur man kan använda sig av en högfrekvent systemklocka för att hålla encoderflankerna synkrona, och slutligen visar AN501 från LSICSI hur man gör ett digitalt lågpassfilter utifrån diskret logik för att filtrera bort störningar på encoderingångarna (en teknik som beskrivs i förbigående av Honeywell ovan).
Re: Dividera encoder pulser
H.O: Felet är antagligen att din dmux har inverterade utgångar. Det ska den inte ha.
Lustigt resultat du fick.... utgången på IC3-4 (MED) blev = (A & B) ... lite väl enkel funktion
74LS238 har icke-inverterade utgångar.
Lustigt resultat du fick.... utgången på IC3-4 (MED) blev = (A & B) ... lite väl enkel funktion

74LS238 har icke-inverterade utgångar.
Re: Dividera encoder pulser
Ahh...det missade jag...tackar! Ska se om jag har en med icke inverterade utgångar. Ser "mitt" schema ut att stämma med det du tänkt dig i övrigt?
Re: Dividera encoder pulser
Jag hade ingen 2-4 demux med icke inverterande utgångar så jag satte en 7414 inverter mellan utgångarna från min 74139 och resten - det blev en avsevärd skillnad 
Jag är fortfarande inte säker på att det fungerar dock. Vid rotation åt ena hållet så får jag pulser på IC3-4 och inga pulser på IC8-4 men åt andra hållet så får jag pulser på båda....


Som synes på bilderna ovan så ändras riktningsvippan och jag får pulser på "clock" utgången så det händer i alla fall något men jag undrar om det inte är något mer fel....

Det här är en bild där man ser slutet på en "medurs-rotation" och början på en "moturs-rotation". OM jag tolkar bilden rätt så sker riktningsbytet vid 50mS-markeringen, (där går A hög igen utan att B ändrat sig sedan A gick låg, alltså 10-11-01-11. Riktningssignalen ändrar sig däremot inte vid det tillfället, clock-utgången går hög på fallande flanken hos A och ett "steg" tas i fel rikning....
Jag börjar ångra den här idén....

Jag är fortfarande inte säker på att det fungerar dock. Vid rotation åt ena hållet så får jag pulser på IC3-4 och inga pulser på IC8-4 men åt andra hållet så får jag pulser på båda....


Som synes på bilderna ovan så ändras riktningsvippan och jag får pulser på "clock" utgången så det händer i alla fall något men jag undrar om det inte är något mer fel....

Det här är en bild där man ser slutet på en "medurs-rotation" och början på en "moturs-rotation". OM jag tolkar bilden rätt så sker riktningsbytet vid 50mS-markeringen, (där går A hög igen utan att B ändrat sig sedan A gick låg, alltså 10-11-01-11. Riktningssignalen ändrar sig däremot inte vid det tillfället, clock-utgången går hög på fallande flanken hos A och ett "steg" tas i fel rikning....
Jag börjar ångra den här idén....

Re: Dividera encoder pulser
Morsning.
Jag såg detta när jag letade efter annat http://www.machsupport.com/forum/index. ... 666.0.html
Om det hjälper vet jag inte.
Per
Jag såg detta när jag letade efter annat http://www.machsupport.com/forum/index. ... 666.0.html
Om det hjälper vet jag inte.
Per
Re: Dividera encoder pulser
Vad jag kan se så lider kretsen i det schemat av samma problem som de andra "enklare" lösningarna som diskuterades i början av den här tråden. CLK-ingågen på räknaren är flank-triggad så om encodern "fladdrar" runt en encoderflank medan nivån på den andra är konstant låg (eller hög) så kommer den att "räkna fel"...
/Henrik.
/Henrik.
Re: Dividera encoder pulser
Jag har ju inte en susning av vad ni snackar om i denna tråden förutom vad en encoder är.
Försökte bara hjälpa till
Försökte bara hjälpa till

Re: Dividera encoder pulser
Har inte hunnit kolla in här på ett tag... det har varit jobb och familj i första hand...
Det verkar ju som om "mot" fungerar riktigt, dvs "stänger av" när det går medsols. Eftersom "mot" bara är en spegelvänd mostsvarighet till "med" så borde "med" fungera exakt likadant som "mot" om man bytte ut A mot B. Måste vara en liten miss nånstans... ska se om jag hittar den.
Det finns en logisk motsägelse i själva uppgiften som gör att det är omöjligt att "byta riktning" direkt när pulsen ändrar riktning eftersom man i förväg inte vet om den ska gå tillbaks igen... Om man inte ska få en fyrdubblet högre frekvens på utgången än på ingången så måste man vänta tills hela sekvensen fullbordats dvs AB förflyttas från 00 till 00 igen via 01 11 och 10 (med eventuellt oändligt antal riktningsbyten mellan varje steg)
"normal medurs rörelse:" bindestreck visar när en hel cykel gåtts igenom från 00-00:
A:01100-01100-01100
B:00110-00110-00110
"möjlig medurs rörelse:"
A:0011100110101010100-
B:0110110011111111110-
Först vid strecket (-) kan man garanterat veta att den gått ett varv framåt.
Under velandet fram och tillbaks därimellan har jag valt att låta dekodern vara helt passiv viket ska spela någon roll för slutresultatet då det ändå ska delas flera gånger i tiden.
Den SR-vippa som anger UP/DOWN ändrar riktning precis steget före klockpulsen ska komma. Notera att min koppling är helt statisk - dvs. den reagerar endast på förändrad insignal, den har ingen egen inbyggd timing eller skapande av pulser.
Det verkar ju som om "mot" fungerar riktigt, dvs "stänger av" när det går medsols. Eftersom "mot" bara är en spegelvänd mostsvarighet till "med" så borde "med" fungera exakt likadant som "mot" om man bytte ut A mot B. Måste vara en liten miss nånstans... ska se om jag hittar den.
Det finns en logisk motsägelse i själva uppgiften som gör att det är omöjligt att "byta riktning" direkt när pulsen ändrar riktning eftersom man i förväg inte vet om den ska gå tillbaks igen... Om man inte ska få en fyrdubblet högre frekvens på utgången än på ingången så måste man vänta tills hela sekvensen fullbordats dvs AB förflyttas från 00 till 00 igen via 01 11 och 10 (med eventuellt oändligt antal riktningsbyten mellan varje steg)
"normal medurs rörelse:" bindestreck visar när en hel cykel gåtts igenom från 00-00:
A:01100-01100-01100
B:00110-00110-00110
"möjlig medurs rörelse:"
A:0011100110101010100-
B:0110110011111111110-
Först vid strecket (-) kan man garanterat veta att den gått ett varv framåt.
Under velandet fram och tillbaks därimellan har jag valt att låta dekodern vara helt passiv viket ska spela någon roll för slutresultatet då det ändå ska delas flera gånger i tiden.
Den SR-vippa som anger UP/DOWN ändrar riktning precis steget före klockpulsen ska komma. Notera att min koppling är helt statisk - dvs. den reagerar endast på förändrad insignal, den har ingen egen inbyggd timing eller skapande av pulser.