PWM som "svajar" - Arduino & Motorkontroller

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
bearing
Inlägg: 11250
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: PWM som "svajar" - Arduino & Motorkontroller

Inlägg av bearing »

Men det är ju som sagt inte pwm-lösningen som är problemet, utan programmet. Just nu maskeras programfelet av lågpassfiltret.
Användarvisningsbild
fosfor
Inlägg: 453
Blev medlem: 13 februari 2013, 05:43:15
Kontakt:

Re: PWM som "svajar" - Arduino & Motorkontroller

Inlägg av fosfor »

svanted: OK, fått det att fungera bra nu iaf med en väldigt klen konding. Då blir det inga "urladdningar" som får motorn att gå lite extra eller så.
Men en MCP4725, är det för att "jämna till" spänningen ut från Arduinon då eller?

Icecap: Ha i åtanke att detta är det första jag gör med Arduino, någonsin :P
Oftast har lösningarna bestått av ett herrans massa trial n error tills det blivit rätt,
samt hjälp här på forumet från er hjältar som kommit med förslag som jag ibland lyckats implementera.
Det har varit mycket fram och tillbaka, och inget problem liknar det andra tidigare.
Koden ser nog rätt bedrövlig ut för en som är van med sånt här.
Men.. DEN FUNGERAR! Och nu fungerar den exakt som jag vill och som det var tänkt.
Vidare arbete kommer bestå av att försöka snygga till koden, och stressa maskineriet för
att se vad som kan gå fel och försöka undvika att motorn rusar och dylikt.

Jag har märkt att jag kan få ett gäng olika förslag från olika programmerare, som ska göra samma sak jag är ute efter.
Vissa förslag kanske är 10 rader kod på en plats i sketchen, ett annat förslag kan vara 50 rader kod, på flera olika platser i sketchen.
Är det för stort så tenderar jag blir förvirrad och backa ur att försöka skjuta in det i min sketch, jag föredrar de mindre kodsnuttarna som hittils dessutom fungerat bra. Men framförallt för att det är lättare så också.
Det håller hela projektet på en någorlunda överskådlig sikt för min nybörjarhjärna.
Hela sketchen är trots detta ca fjorton A4 sidor kod. Så det blir lätt förvirrande hur jag än gör.

Här är den kodsnutt som jag till slut använde (fick den av en annan programmerare och kunde modda den lite för att passa mig) för att få den att bromsa in i steg, det blir exakt på millimetern dessutom. Jag hade skrivit en mycket snarlik kod själv, men använde aldrig while, utan försökte få det fungera med if och if else... Så det var min tabbe. Tänkte inte ens på while funktionen.

Kod: Markera allt

if( (PulseCount) > UserStopPulseCount + 2 && digitalRead(HighSpeed2Pin) && UserStopPulseCount>-998 ){

while(digitalRead(HighSpeed2Pin)){
if(PulseCount > UserStopPulseCount + 70){
analogWrite(controlPin2, 55); // snabbt bakåt
}else if (PulseCount > UserStopPulseCount + 25){
analogWrite(controlPin2, 85); // medium bakåt
}else if (PulseCount > UserStopPulseCount+2){
analogWrite(controlPin2, 110); // långsamt bakåt
}else{
// är på rätt ställe, fastnar i While loppen tills man släpper knappen
{
      lcd.setCursor(0, 1);
      lcd.print("Pr.Stop");
      }
digitalWrite(controlPin1, LOW);  
digitalWrite(controlPin2, LOW);
Serial.println("Programmed STOP activated ⛔");
delay(10);
}
}
}
Användarvisningsbild
Icecap
Inlägg: 26139
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: PWM som "svajar" - Arduino & Motorkontroller

Inlägg av Icecap »

Om det är så svårt att överskåda kan det vara dags att bygga moduler och ge dom namn.

Testa varje modul för att verifiera att det fungerar som tänkt - och då är det klart.

Då blir översikten "inbyggd" i.o.m att man anropar funktionerna med värden. Då funktionerna har vettiga namn som beskriver deras funktion blir det närmast självförklarande.
Användarvisningsbild
fosfor
Inlägg: 453
Blev medlem: 13 februari 2013, 05:43:15
Kontakt:

Re: PWM som "svajar" - Arduino & Motorkontroller

Inlägg av fosfor »

Icecap: Det var en bra idé! Gracias
Användarvisningsbild
Icecap
Inlägg: 26139
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: PWM som "svajar" - Arduino & Motorkontroller

Inlägg av Icecap »

Du tror väl inte att vi vana programmörer klarar oss utan att göra så?

Mitt första kommersiella program hade jag inget överblick på hur det skulle lösas. Men jag kunde iaf. bygga de rutiner som behövdes som att skriva ut på display, läsa knappsats, ha en 1-sek timer-interrupt osv.

Då de delar var avklarat funderade jag på hur tabellerna skulle visas, sedan hur man skulle mata in dom.
Varje funktion fick namn och parameter vilket gjorde enkelt att stycka ihop "huvudprogrammet", jag kunde plötsligt få ett överblick.

Och det fungerade i första skarpa försök.

I styrkortet jag är van att programmera till har jag en shitload funktioner, bl.a. en enda funktion som ställer alla portar rätt, ställer oscillatorn rätt osv.

Sedan finns det "standard" RS232 I/O, RS485 I/O osv. I de funktionsfiler finns det funktioner för att skicka en byte, en sträng, ett binärt block osv. Då jag har minne nog är de interruptstyrda för båda Tx och Rx.

På detta vis tar det mig ung. 5 minuter att skapa ett nytt projekt och lägga in de basala funktioner som behövs och de basala funktioner är testade till medvetslöshet. Ska jag ha en specialversion av en "drivrutin" kopierar jag den standard-rutin jag har för detta och ändrar det som ska fixas.
Användarvisningsbild
fosfor
Inlägg: 453
Blev medlem: 13 februari 2013, 05:43:15
Kontakt:

Re: PWM som "svajar" - Arduino & Motorkontroller

Inlägg av fosfor »

Icecap:

Grymt!
Hur skulle du säga att "tänket" går när du ska göra en "modul", jag tror jag förstår vad du menar med en modul. En egen separat klunga kod?
Hur byggs dessa upp generellt? Jag tror att det är lite så jag redan gör i min egen kod, för att underlätta. Hålla saker i klungor så att säga.
Men om det varit rätt att tänka så eller ej vet jag inte.
Glattnos
Inlägg: 2984
Blev medlem: 29 oktober 2009, 20:01:18

Re: PWM som "svajar" - Arduino & Motorkontroller

Inlägg av Glattnos »

Jag är varken proffs eller utbildad men...
Man får väl börja med att bestämma exakt vad man vill få för ut-data och även exakt vilken in-data den i så fall behöver.
Jag har t.ex. en där jag stoppar in två GPS-koordinatpunketer som in-data och sen får kursen och sträckan tillbaka som ut-data. Då jag testat denna många gånger med alla tänkbara och o-tänkbara in-data och konsekvent får förväntad ut-data tillbaka så är jag rätt säker på att den fungerar och behöver inte skriva den igen utan kan alltid i alla program därefter få ut kurs och sträcka mellan två koordinater :)

Det är väl mer en funktion än en modul(består väl ofta av flera ihopsatta funktioner) men det beskriver "tänket" litegrann :)
Det är ju lättare att skriva typ: PrintLCD(Kurs,X,Y); i huvudprogrammet än att skriva all kod som räknar ut kursen och skickar till LCD:n, varje gång man vill räkna ut kursen och skriva på LCD:n :) Sen kan man ju göra så det även funkar med typ: PrintLCD(Sträcka,X,Y);

Kod: Markera allt

PrintLCD(Kurs,X,Y);
PrintLCD(Sträcka,X,Y);
Dom två raderna är lätta att överblicka och förstå, dock är det egentligen kanske flera sidor kod som sätts in, men det är flera sidor testad och fungerande kod(i bästa fall) :)

PS: Jag bara skrev nått snabbt exempel så det är inte genomtänkt
Användarvisningsbild
Icecap
Inlägg: 26139
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: PWM som "svajar" - Arduino & Motorkontroller

Inlägg av Icecap »

Vill man skapa stabila program "måste" man tänka till en del FÖRST.

En sag är att man t.ex. måste få kommunikationen med kanske en 1-Wire enhet att fungera - men när den väl är utprovad skrivar man den funktion så att källkoden blir "allmän^ och i en egen fil.

På det vis kan man inkluderar den fil/funktion där det behövs.

Ofta kan det vara nödvändigt med justeringar och till detta har jag använd att skapa en "Project_Settings.h"-fil i varje projekt-bibliotek. Då kan jag variera vissa parameter vid att ange dom i "Project_Settings.h" men likaväl ha exakt samma källkod-fil för en given funktion.

Man måste allltså dela upp det hela i funktioner och skilja mellan att skapa en specifik funktion och att skapa ett projekt.

Tänk t.ex. att man ska läsa lite knappar. Då skapar jag en "Read_Keys()" som jag anropar när det behövs.

Blir det då kanske problem med studs löser jag den delen i "Read_Keys()" medan resten av programmet kör som vanligt. Vill jag t.ex. lägga in en n-key-lockout kan jag göra detta men i resten av programmet står det i klartext att man läser knapparna.

Det blir så mycket enklare att läsa program som är skrivna på det vis och man undvikar ofta fel som kommer av att man gör "samma sak" i många olika delar av programmet men att det kan ha snygit in ett fel i en av dessa "lika" funktioner som då kan ge buggar som är sjukt svåra att hitta.
Skriv svar