Rubiks kub

Berätta om dina pågående projekt.
Användarvisningsbild
matteeee
Inlägg: 215
Blev medlem: 24 oktober 2013, 08:49:49
Ort: Saxtorp / Skåne
Kontakt:

Re: Rubiks kub

Inlägg av matteeee »

rofr skrev:
matteeee skrev:Vad är målet? Snabbast på att lösa?
Se om du klarar få ihop det?

Eftersom det har gjorts kan du ju inte gärna bli först menar jag..

Lycka till oavsett anledning :)
Vi är kubfantaster i familjen, sonen tävlar i speedcubing, 2 döttrar löser den, jag programmerade en simulator i Pascal för 25 år sen.
Sonen tävlade i SM i december, jag deltog på skoj och snittade 75 sekunder, bästa tid 43.

Om jag kan bygga en maskin som är snabbare än vad jag själv är så har jag lyckats! Men med hjälp av er i forumet kanske vi kan få upp lite fart på stegmotorerna? Jag gissar att det är detta som är flaskhalsen. Annars är världsrekordet nu under sekunden:

https://www.youtube.com/watch?v=ixTddQQ2Hs4

I juni skall vi arrangera en tävling i Göteborg, förhoppningsvis på Universeum. Tänkte ha uppvisning då. Något interaktivt och pedagogiskt hellre än bara snabbt. Men gärna snabbare än den här:

https://www.youtube.com/watch?v=dreTvumjNyw
Då förstår jag helt klart anledningen. Kör så det (nästan) ryker :)
Men under 1s, är det med analys, uträkning och utförande? Eller får man scanna kuben innan tiden startar?
Sjukt oavsett visserligen :)

Lycka till, kikar in och ser hur det går!
Användarvisningsbild
rofr
Inlägg: 16
Blev medlem: 17 februari 2016, 19:48:13

Re: Rubiks kub

Inlägg av rofr »

Tack, mycket bra förklarat :tumupp:
H.O skrev:Stegmotorer är menade att köras med konstant ström och det är drivkretsens uppgift att göra det. Du ställer in din A4988 på att ge motorn ca 400mA. Utan aktiv strömbegränsning krävs det 12V för att strömmen skall nå 400mA men med aktiv strömbegränsning vill du, generellt, ha så hög spänning som möjligt.....

Om motorn är stämplad med 12V och du matar drivsteget med 12V kommer du få väldigt dålig prestanda. Högre matningsspänning "flyttar" punkten där vridmomentet inte längre räcker för att snurra på lasten.

Använd den ställbara och börja med 15V, testa hur fort du kan köra motorn innan den stallar. Öka sedan spänningen i steg och se om du märker skillnaden.

Glöm inte att ställa in strömbegränsningen på drivkortet så du får dina 400mA.

EDIT: Håll koll på temperaturen på drivkretsen!
Användarvisningsbild
rofr
Inlägg: 16
Blev medlem: 17 februari 2016, 19:48:13

Re: Rubiks kub

Inlägg av rofr »

matteeee skrev: Men under 1s, är det med analys, uträkning och utförande? Eller får man scanna kuben innan tiden startar?
Ja, rekordtiden inkluderar att scanna färgerna på den blandade kuben.
De använder 3 usb webcams. Jag skall börja med 2 kameror riktade mot 2 motstående hörn, i teorin skall det fånga de 3 kubsidor som möts i hörnen.

Kamerorna blir fixerade så jag behöver bara mappa upp ett antal pixlar från varje färgruta (8x6 = 48 stycken, centrumrutan är fast) att läsa från kameraströmmen. Jag har experimenterat med ett open-source bibliotek för java och det funkar fint:

http://www.webcam-capture.sarxos.pl/

Det som kan bli lurigt är identifieringen av varje färg med tanke på skuggor, reflexer och variation på infallande ljus.
Användarvisningsbild
Lennart Aspenryd
Tidigare Lasp
Inlägg: 12607
Blev medlem: 1 juli 2011, 19:09:09
Ort: Helsingborg

Re: Rubiks kub

Inlägg av Lennart Aspenryd »

På en vanlig tärning med sex (6) sidor vet man ju prickar på alla sidor om man känner till 3!
Är det på samma sätt med Rubiks Kub?

Finns det analysprogram som kan säga förutsättningar om man visar upp ett antal sidor av en kub för en kamera! Borde vara ett första steg!

Att skilja simulering från det mekaniska borde vara steg 1.
Användarvisningsbild
Walle
Moderator
Inlägg: 7701
Blev medlem: 14 december 2004, 10:32:18
Ort: Stockholm

Re: Rubiks kub

Inlägg av Walle »

Lasp, för mittenbitarna är det så. Generellt behöver man faktiskt bara se två för att veta exakt hur kuben är orienterad. Men det är ju för att mittenbitarna aldrig förflyttar sig i förhållande till varandra. Det gör dock kantbitarna och hörnbitarna, så där kan man inte säkert veta vart en kantbit är bara för att man vet vart en annan kantbit är.
Användarvisningsbild
MadModder
Co Admin
Inlägg: 31441
Blev medlem: 6 september 2003, 13:32:07
Ort: MadLand (Enköping)
Kontakt:

Re: Rubiks kub

Inlägg av MadModder »

Kul projekt. :)

Ett tips för stiftlisterna på motorkablarna är att använda en liten stump krympslang över varje lödning och ungefär lika långt upp på kabeln. Det blir lite av ett brytskydd, samt motverkar att man med tiden gör sprickor i lödtennet pga rörelser i kabeln.
Användarvisningsbild
rofr
Inlägg: 16
Blev medlem: 17 februari 2016, 19:48:13

Re: Rubiks kub

Inlägg av rofr »

Nu har jag äntligen hunnit leka lite. Har tittat på många YT videos och lärt mig massor om elektronik, ellära, komponenter, mätteknik. Det var längesedan jag hade så här kul!

Jag har trimmat in strömmen från A4988 till motorn, skrivit grunderna av arduino-koden och testkört en motor. Ingen rök och motorn roterar! Det är en bra start. Här är en bild:
Bild

Jag har dock ett problem med att den inte återgår till ursprungsläget efter att stega fram och bak lika många steg. Min gissning är att strömmen är ställd lite för lågt och att den då inte orkar dra i vissa steg. Här är en video när motorn snurrar som tydligt visar att den inte återgår till ursprungsläget. Den vandrar sakta motsols.
https://youtu.be/1zUpcQBREmA

Jag läste någonstans att en del av dessa stepstick kort kan vara dåligt lödda, jag tror jag skall testa flera och jämföra.

För beräkning och intrimning av strömmen har jag har utgått ifrån denna instructable:
http://www.instructables.com/id/Drive-a ... /?ALLSTEPS

Jag kollade mina stepsticks med lupp och ser att jag har samma resistanser som kretsen i artikeln. S1 och S2 är på 10K och R1 på 30K.
Artikeln säger (och jag ser att formlerna kommer från databladet):
VREF max = (TrimpotMaxR/(TrimpotMaXR+R1)) x VDD = (10,000 / (10,000 + 30,000)) * 5 = 1.25V
ITripMAX (effectively max motor current) = VREF / ( 8 x Sense_resistor) = 1.25 / ( 8 * 0.1 ) = 1.5625A

To calculate amps from measured VREF: A = VREF / 0.8

To calculate VREF required for a target current: VREF = A * 0.8
Motorns datablad säger 0.33A. Jag var lite feg och rundade av neråt till 0.3, och ställde VREF till 0.24 genom mätning mellan potentiometerns center och jord. Kan detta göra att den hoppar över steg? Eller har jag missuppfattat något med full step mode och antal steg?

Motorns stegvinkel är 1.8 grader +- 5%, i full step mode så går det alltså 200 steg per varv (360). Så kvarts varv, 90 grader, (vridning på kubsida) blir 200/4 eller 50 steg, 180 grader blir 100 steg.

När jag gjorde mätningen var kretsen fullt kopplad till arduinon och motorn men ingen 220 in i transformatorn. Ingen aning vilka signaler jag hade på ENABLE, STEP och DIRECTION pinnarna. Det framgår inte riktigt av datablad eller artikel hur , mer än att man inte skall koppla på motorkraften förrän man justerat strömmen. Kanske spolarna i motorn/transformatorn kan påverka? Eller kanske spänningen på någon av styrpinnarna flyter?

Hastighet
I nuläget så använder jag en konstant delay mellan stegpulserna. Jag började försiktigt på 10 ms och sänkte successivt till 1.5 ms. Med 2 delay per steg och 50 steg per 90 vridning, gick jag från 1 s till 0.15 sekunder.
En lösning av kuben kommer att bestå av 21 drag (både 90 och 180 vridningar). Världsrekordet är under sekunden så det betyder ca 40ms per vridning. Om vi antar att 90 och 180 vridningar är jämnt fördelade så blir snittet 135, eller 75 steg á 1.8 grader så behöver delay sänkas till 40ms/75/2 = 0.26ms
Som sagt, målet är inte hastighet men det skall bli kul att se var gränserna går för arduinon, drivkretsen och motorn.
Jag tror också att rekordhållarna använder variabel hastiget för att starta och stoppa mjukare, men det är lätt fixat om det skulle behövas.

Total ström
Om varje stegmotor drar 0.33A, och jag antar att det är per spole så behöver min matning kunna leverera 0.33 * 2 * 6 eller 4A. Tyvärr så levererar min max 3.5. Detta under förutsättning att alla drivare är ENABLED samtidigt. Det är ju bara en som roterar i taget så borde funka!

Och till slut en länk till min arduino sketch, finns ganska mycket kommentarer.
https://gist.github.com/rofr/e8c41219b780ac3497b3
Användarvisningsbild
drh
Inlägg: 1338
Blev medlem: 10 januari 2011, 23:38:41

Re: Rubiks kub

Inlägg av drh »

inte så att krokodilen flyttar på sig?
Eller har axeln en avfasning?
H.O
Inlägg: 5913
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: Rubiks kub

Inlägg av H.O »

Det låter inte som att den tappar steg direkt men visst kan det vara så. Får du samma resultat även med långsam pulsfrekvens? Du bör nämligen, för att få upp farten, accelerera och retardera motorn - inte "direktstarta" den på "hög" hastighet. Sen är det alltid vissa frekvenser som är "problematiska" med mycket resonans och så. Om du kör helsteg nu så testa att minska det till 1/4-steg eller ännu mindre, det gör att motorn går mjukare.

Och så, som sagts tidigare, hög spänning - i synnerhet om det är motorn från Electrokit som har extremt hög induktans, något som till nackdel om hastiget är det man är ute efter.

En annan sak att kolla är att du har polariteten på steg-signalen rätt, A4988 stegar på stigande flank samt att du uppfyller timingkraven på sidan 6 i databaldet (men det gör du sannolikt).
Användarvisningsbild
rofr
Inlägg: 16
Blev medlem: 17 februari 2016, 19:48:13

Re: Rubiks kub

Inlägg av rofr »

drh skrev:inte så att krokodilen flyttar på sig?
Eller har axeln en avfasning?
Jag gör en tuschmarkering, tar en bild och låter den gå en stund.
Javisst, klämman glider i förhållande till markeringen!

Dagens pucko tilldelas mig själv 8)
Användarvisningsbild
rofr
Inlägg: 16
Blev medlem: 17 februari 2016, 19:48:13

Re: Rubiks kub

Inlägg av rofr »

H.O skrev:Det låter inte som att den tappar steg direkt men visst kan det vara så. Får du samma resultat även med långsam pulsfrekvens? Du bör nämligen, för att få upp farten, accelerera och retardera motorn - inte "direktstarta" den på "hög" hastighet. Sen är det alltid vissa frekvenser som är "problematiska" med mycket resonans och så. Om du kör helsteg nu så testa att minska det till 1/4-steg eller ännu mindre, det gör att motorn går mjukare.

Och så, som sagts tidigare, hög spänning - i synnerhet om det är motorn från Electrokit som har extremt hög induktans, något som till nackdel om hastiget är det man är ute efter.

En annan sak att kolla är att du har polariteten på steg-signalen rätt, A4988 stegar på stigande flank samt att du uppfyller timingkraven på sidan 6 i [url=https://www.pololu.com/file/download/A4988.pdf?file_id=0J450]databaldet
(men det gör du sannolikt).
Ja, exakt den motorn är det. Jag klantade mig, det var krokodilen som gled.

Specen säger 1 microsekund, så jag har marginal med faktor 1500. Arduinon går på 16MHz så det verkar finnas marginal där också. Bra tips med att högre upplösning för mjukare gång, provar direkt ikväll och även några accelerationskurvor. Tror jag förberäknar och lagrar i en array istället för att göra flyttalsberäkning direkt i rutinen.

Hur hög spänning vågar jag vrida upp till? Motorn känns rätt varm när den har gått ett tag.Vilka faktorer spelar in där? Jag behöver inte så vridstarkmotor, då kuben är väl smord.
Användarvisningsbild
rofr
Inlägg: 16
Blev medlem: 17 februari 2016, 19:48:13

Re: Rubiks kub

Inlägg av rofr »

H.O skrev:En annan sak att kolla är att du har polariteten på steg-signalen rätt, A4988 stegar på stigande flank ...
Här hänger jag inte riktigt med, jag antar stepstick kretsen tar hand om detta? Eller tänker du på matningen från stepstick till motorns spolar?

EDIT: Jag sätter först högt, pausar, sätter lågt och pausar. Den lämnas med andra ord alltid lågt. Men innan första pulsen borde jag kanske initiera till låg signal så den inte flyter? Annars kan den missar första pulsen?

Här är info om stepstick: http://reprap.org/wiki/StepStick
Användarvisningsbild
anders_bzn
Inlägg: 5772
Blev medlem: 17 december 2008, 19:22:18
Ort: Kävlinge
Kontakt:

Re: Rubiks kub

Inlägg av anders_bzn »

Du kan vrida upp spänningen så högt som drivsteget klarar, drivsteget begränsar strömmen igenom motorn. Ju högre induktans motorn har desto mer kommer strömmen sjunka igenom lindningen vid samma matningsspänning ju fortare man kör motorn. Man talar om mot-EMK, man kan enkelt säga att resistansen i lindningen ökar ju fortare man snurrar motorn.

Har drivsteget hög matningsspänning så kan ju drivsteget hålla upp strömmen längre när hastigheten ökar.

Jag tycker att det är en mycket bra ide att skapa en tabell med accelerationen lagrad. Det är så man brukar göra. Du har ju dessutom ett väldigt väl definierat rörelsemönster och lastfall.

Nu verkar ju inte drivsteget ha stöd för att sätta olika strömmar, annars brukar men skilja på hållström och körström. Man sänker normalt strömmen igenom motorn när den inte ska snurra för att spara ström och framförallt allt att motorn inte ska bli för varm. Hållströmmen sätts så att motorn kan stå still utan att tappa position, men inte mer. I ditt fall så har ju ju väldigt mycket friktion och inte direkt som vill flytta sig så du skulle nog kunna stänga av strömmen helt. Det är dock alltid viktigt att gå till körström en stund innan man ska börja röra sig. Detta för att rotorn ska få en chans att ställa sig rätt i magnetfältet. 20-30ms räcker oftast, men det är alltid det mekaniska systemet i helhet man får titta på när man ska köra sin motor.

En stegmotor kan bli rätt så varm innan det är någon fara. Blir den för varm så är det några saker som händer. Dels kan fett och smörjmedel flyta iväg vilket gör att motorn tillslut skär. Sen kan permanentmagneten tappa en del av sin magnetisering vilket kör att den blir svagare. Sen kan man också elda upp en lindning.

Jag tycker du ska testa att köra 1/2 eller 1/4 steg också.

Sen ska du kolla begreppen pull in torque och pull out torque (jag känner att krafter tröt så jag orkar inte förklara just nu). Kolla i databladet för din motor på momentkurvan så ser du hur fort du kan köra den utan att tappa för mycket moment.
Användarvisningsbild
anders_bzn
Inlägg: 5772
Blev medlem: 17 december 2008, 19:22:18
Ort: Kävlinge
Kontakt:

Re: Rubiks kub

Inlägg av anders_bzn »

rofr skrev:
H.O skrev:En annan sak att kolla är att du har polariteten på steg-signalen rätt, A4988 stegar på stigande flank ...
Här hänger jag inte riktigt med, jag antar stepstick kretsen tar hand om detta? Eller tänker du på matningen från stepstick till motorns spolar?

EDIT: Jag sätter först högt, pausar, sätter lågt och pausar. Den lämnas med andra ord alltid lågt. Men innan första pulsen borde jag kanske initiera till låg signal så den inte flyter? Annars kan den missar första pulsen?

Här är info om stepstick: http://reprap.org/wiki/StepStick
Det som menas är om stegmotorn flyttar fram på stigande eller fallande flank. I databladet för kretsen ser det ut som om den gör det på stigande flank.
Användarvisningsbild
rofr
Inlägg: 16
Blev medlem: 17 februari 2016, 19:48:13

Re: Rubiks kub

Inlägg av rofr »

Tack alla, det är verkligen uppskattat att få så mycket hjälp och tips!

Nu har jag moddat koden lite:

Jag sätter ENABLE bara under vridningen det blir ingen värme alls. Jag tror inte jag behöver någon hållström så detta kommer funka bra.

För att enkelt kunna välja mellan full, halv, osv har jag lagt till en konstant som styr MSx pinnarna och skalar delay (som dock fortfarande är linjär).

Kod: Markera allt

const int STEP_FACTOR = 16;
const int STEP_DELAY_MICROS = 1200 / 16;
void setStepFactor() {
  if (STEP_FACTOR == 1) {
    digitalWrite(MS1, LOW);
    digitalWrite(MS2, LOW);
    digitalWrite(MS3, LOW); 
  }
  else if (STEP_FACTOR == 2) {
    digitalWrite(MS1, HIGH);
    digitalWrite(MS2, LOW);
    digitalWrite(MS3, LOW); 
  }
  else if (STEP_FACTOR == 4) {
    digitalWrite(MS1, LOW);
    digitalWrite(MS2, HIGH);
    digitalWrite(MS3, LOW); 
  }
    else if (STEP_FACTOR == 8) {
    digitalWrite(MS1, HIGH);
    digitalWrite(MS2, HIGH);
    digitalWrite(MS3, LOW); 
  }
    else if (STEP_FACTOR == 16) {
    digitalWrite(MS1, HIGH);
    digitalWrite(MS2, HIGH);
    digitalWrite(MS3, HIGH); 
  }
  delay(2);
}
Skriv svar