DavidS skrev:Det kan alltså i värsta fall bli denna beräkning: (99999^2+99999^2+99999^2)^(1/2) om jag sätter gränsen för arbetsytan till under en meter.
Det är givetvis ingen nackdel att använda en 32-bitars, men jag vet inte om det alltid är lösningen. Jag tycker Sodjan har en bra poäng ovan. (det går lika bra att skriva dålig kod oavsett antal bitar.)
Frågan är ju om du verkligen behöver göra dessa 32-bitars beräkningar (vilket går alldeles utmärkt även på en 8-bitars, med reservation för att jag inte vet hur lång tid det tar med kvadratrötter) i varje "cykel". Då är något fel.
Man gör väl så att man först gör beräkningarna och sedan kör. Under själva förflyttningen borde det mest handla om att addera en heltalskonstant till de tre koordinaterna. Addition går ju på en mikrosekund, även om det skulle vara 64-bitar. Och en paus på kanske 0.1 - 1 millisekund mellan varje förflyttning är väl OK?
(Hoppas jag tänker rätt nu, ehm... är det en cirkelrörelse du är ute efter?)
Senast redigerad av jesse 20 oktober 2011, 10:11:50, redigerad totalt 1 gång.
DavidS skrev:Det kan alltså i värsta fall bli denna beräkning: (99999^2+99999^2+99999^2)^(1/2) om jag sätter gränsen för arbetsytan till under en meter.
Det är givetvis ingen nackdel att använda en 32-bitars, men jag vet inte om det alltid är lösningen. Jag tycker Sodjan har en bra poäng ovan. (det går lika bra att skriva dålig kod oavsett antal bitar.)
Frågan är ju om du verkligen behöver göra dessa 32-bitars beräkningar (vilket går alldeles utmärkt även på en 8-bitars, med reservation för att jag inte vet hur lång tid det tar med kvadratrötter) i varje "cykel". Då är något fel.
Man gör väl så att man först gör beräkningarna och sedan kör. Under själva förflyttningen borde det mest handla om att addera en heltalskonstant till de tre koordinaterna. Addition går ju på en mikrosekund, även om det skulle vara 64-bitar. Och en paus på kanske 0.1 - 1 millisekund mellan varje förflyttning är väl OK?
(Hoppas jag tänker rätt nu, ehm... är det en cirkelrörelse du är ute efter?)
Det kommer värre beräkningar framöver så jag måste undersöka mer hur jag ska gå till väga.
Exemplet med kvadratrötter är ju längden av sträckan i en linjär förflyttning. Cirkelrörelser blir nästa steg.
Har fått massa bra svar så jag vet lite mer om vad som sätter stopp nu och jag behöver något annat sätt att mäta processortiden för varje rad kod. Det jag gör nu är ju att köra denna snutt:
Ett tips för att mäta tidsåtgången för funktioner, eller vissa delar av funktioner är att du sätter en utgång hög när du går in i funktionen och låg när du är klar. Beroende på hur snabbt de körs och hur variabel körtiden är så går det rätt så lätt att se tidsåtgången på ett oscilloskop.
Beräkningar tar tid! Hemligheten är att göra så få beräkningar i realtid som möjligt och måste man beräkna kan man ganska ofta räkna ut ett mellanresultat och återanvända det vilket ger mindre tunga beräkningar.
I det exempel du visar är du inte hjälpt synnerligt av en 32-bit processor, 99999^2 fyller nämligen 34 bit varför du ska upp på en 64-bit för att klara det i kännbart färre beräkningar. Boven är dock nog kvadratroten som tar sin lilla tid.
> Jag har ett gäng tal(minst 6st) som överstiger gränsen för 16bit så 32bit är det jag "behöver".
Vilket så klart bara är helt fel i sig.
Det är inget problem fär en 8 eller 16 bit arkitekur att
räkna med 32 bitars "tal". Det går bara något långsammare.
Om du sedan fakiskt måste göra beräkningarna så som du säger
har jag ingen synpunkt på...
PIC32 innehåller en full 32-bitars MDU (Multiply/Divide-Unit.
En 32x16 multiplikation tar en klockcykel och en 32x32 multiplikation tar två klockcykler.
En full 32bitars division dvs 32/32 tar 33 klockcykler, dvs ca 400 nS
cirkelrörelser.....hmmmmmm
ska du inte styra hela apparaten från en pc?
då kan väl stegmotorstyrningen vara helt passiv, ett steg höger eller vänster,
den behöver inte ens veta ärvärdet(positionen) utan det gör pcn...
Jag reagerar på samma sak som svanted. Stegmotorn styrs väl vanligtvis av CNC-datorn som läser G-koderna. Varför behöver du göra beräkningar i microcontrollern? Eller försöker du göra en komplett G-kod-tolk?
@bearing
Tanken var ju att göra en komplett G-kod tolk och "CNC-dator" men jag stöter ju på för stora problem direkt så får nog stycka upp det hela nu och låta mikroprocessorn göra det den är bra och ta hand om själva beräkningarna med en större dator.
Linjära rörelser tänker jag dock försöka tolka helt med mikroprocessorn så jag får helt enkelt lära mig mer om att optimera kod och skaffa mig möjligheter att studera assemblerkoden. Har förut kört med WinAVR och har ett STK500-kit för AVR hemma så tänker gå över till det istället för Arduino för själva stegningen av motorerna och sedan kolla på om det går att göra lite mer med en PIC32 på 80MHz. Kör jag ren C-kod så bör det gå lätt att porta mellan processorer.
Köper samtidigt med PIC32 en logikanalysator(oscilloskop är ju svindyrt) för det borde räcka så länge jag håller mig på 0-5V.
Hm, en egen tolk alltså, intressant. Då blir jag nyfiken; varför vill du göra en egen istället för att (som många) andra köra med mjukvara på en PC som har parallellport kopplad till stegmotordrivare?
@bearing
Jag saknar parallelport på datorn och Mach3 som alla kör med fungerar inte med 64-bit windows(något strul med att man inte får tillgång till LPTx på hårdvarunivå) så det parallelkort jag köpte gick inte heller.
Sedan lär man sig ju ganska mycket genom att börja från grunden med något och jobba sig uppåt, jag får dock se till att begränsa mig väldigt mycket nu så det inte blir för stort projekt och jag får ju mycket vägledning bara i denna tråd från folk som kan betydligt mer än jag själv.
Så jag kör den begränsningen att G-kod ska tolkas i en mikroprocessor om det är linjära rörelser och 100us är den tid jag har på mig att beräkna rörelsen med de skärdata jag vill ha.
Det ska ju gå och jag tycker det är konstigt själv att jag får så dåliga resultat så jag ska som sagt byta till WinAVR nu och se till att skaffa mig en logikanalysator.
Det var en annan här på forumet som också ville ha en tolk utan att ha paralellport så det vore ju kul om man kunde få till något med de allra enklaste instruktionerna.
Beträffande logikanalyusator, så rekommenderar jag ANT-serien, mycket imponerande och billiga.
Notera att, om du köper ett starterkit, så är det nästan obrukbart utan expansionskortet, där alla signaler/portar finns tillgängliga.
Starterkitet själv är enbart en processor, tre LEDar och två brytare, samt en mycket fin-pitch kontakt, vilken passar direkt på expansionskortet.
Du kan iofs klara dig utan ICD3 men det är inget jag rekommenderar, med ICD3 får du fullt debug-stöd.
En sak som man kan konstatera är att det är en väldigt
stor fördel om kontexten framgår redan från start. Speciellt
om man tänker gör något som är lite "ovanligt"...
Att det är något slags "Mach3-klon" som det gäller alltså...