Sida 2 av 2

Re: Lite Servoexperiment för skoj skull. Max varvtal testat

Postat: 6 augusti 2016, 17:37:37
av swapper
Jag riggade upp en av de motorerna jag har liggande, det är tydligen 256CPR encoder på dem.
Kör all på en Arduino Pro / Leonardo (clone) och efter lite meck med uppladdningen så fick jag in sketchen.
Dock skenar motorn oavsett om jag ändrar styrningen eller encoder A <> B benen.
Serieterminalen är för mig buggig då jag kan få fram ett kommando vid omstart men sen vägrar den printa fler kommandon så har inte kunnat testa "live" tune. Funkar nu..
Något gör den dock för vid uppstart står motorn still, sen när jag petar på motorn så kör den max.

Edit:
Har testat motorcontrollern med en simpel kod och det fungerar och får ut fin PWM puls då.

Re: Lite Servoexperiment för skoj skull. Max varvtal testat

Postat: 6 augusti 2016, 17:57:25
av swapper
Svarar igen för att inte röra till det.

Tog bort enable på L298 så jag kan snurra axeln fritt men ändå får encoderpulser så räknar den alltid ner.
Skall den det?

Här har jag snurrat på båda hållen:
Position=0 PID_output=0.00 Target=0.00
Position=0 PID_output=-255.00 Target=-36.00
Position=0 PID_output=-255.00 Target=-122.00
Position=0 PID_output=-255.00 Target=-255.00
Position=0 PID_output=-255.00 Target=-343.00
Position=0 PID_output=-255.00 Target=-343.00
Position=0 PID_output=-255.00 Target=-418.00
Position=0 PID_output=-255.00 Target=-504.00
Position=0 PID_output=-255.00 Target=-616.00
Position=0 PID_output=-255.00 Target=-616.00
Position=0 PID_output=-255.00 Target=-679.00
Position=0 PID_output=-255.00 Target=-769.00
Position=0 PID_output=-255.00 Target=-845.00

Re: Lite Servoexperiment för skoj skull. Max varvtal testat

Postat: 6 augusti 2016, 17:59:34
av H.O
> Något gör den dock för vid uppstart står motorn still, sen när jag petar på motorn så kör den max.

När den startar så är felet noll och ingen korrektion behövs, utgången från PID-filtret är noll. Så fort du flyttar motorn en endaste enkoder-flank försöker flitret rätta till detta och kommenderar motorn att flytta på sig. Antingen drar den åt fel håll varpå felet bara blir större och större istället för mindre (men det har du ju testat) eller så ser inte kontrollern bägge kanalerna från enkodern. Eller, om du kör sign/magnitude, istället för locked anti-phase så saknas riktningssignalen.

EDIT: Verkar som att du saknar en av enkoder-kanalerna.

Re: Lite Servoexperiment för skoj skull. Max varvtal testat

Postat: 6 augusti 2016, 21:20:45
av swapper
Testade med denna kod för att se så jag har båda kanalerna vilket jag ser ut att ha då värdena går upp och ner precis som dom skall när jag roterar merdurs och moturs.

Kod: Markera allt

/* Encoder Library - Basic Example
 * http://www.pjrc.com/teensy/td_libs_Encoder.html
 *
 * This example code is in the public domain.
 */

#include <Encoder.h>

// Change these two numbers to the pins connected to your encoder.
//   Best Performance: both pins have interrupt capability
//   Good Performance: only the first pin has interrupt capability
//   Low Performance:  neither pin has interrupt capability
Encoder myEnc(2, 8);
//   avoid using pins with LEDs attached

void setup() {
  Serial.begin(9600);
  Serial.println("Basic Encoder Test:");
}

long oldPosition  = -999;

void loop() {
  long newPosition = myEnc.read();
  if (newPosition != oldPosition) {
    oldPosition = newPosition;
    Serial.println(newPosition);
  }
}
jag har säkert missat nåt skit eller så är det enbart PID som gör att den rustar.

Re: Lite Servoexperiment för skoj skull. Max varvtal testat

Postat: 7 augusti 2016, 09:42:02
av SeniorLemuren
Hur matar du pulser in till servoprogrammet? Använd inte PWM som pulsgivare, pulserna skall vara lika långa in till servoprogramet. Om du kör det första servoprogrammet jag bifogade (utan seriekom.) och matar med det testprogram jag bifogat så skall det fungera om allt elektroniskt är rätt.

Programmet skickar ut en fyrkanvåg där int antRev1= 30; är antal varv man vill snurra och
int delay1 = 100 (ms) är pulslängd d.v.s hur fort det skall snurra.

På denna programrad: while(var < 100 * antRev1) står 100 för encoderns antal pulser på ett varv.
På denna rad anges PID: double kp=1.8,ki=300,kd=0.02;
Kolla även att versionen av <PID_v1.h> inte är en gammal version.

Re: Lite Servoexperiment för skoj skull. Max varvtal testat

Postat: 7 augusti 2016, 17:58:48
av SeniorLemuren
Testade med en större motor och den funkar fint. Ljudet låter mycket värre än det är. Kameran är ju väldigt nära motorn och den tar ju upp ljud ända ute på vägen 50 meter bort. När jag belastade den genom att bromsa lite med fingret på axeln så tystnade den nästan helt.

Fick ändra PID till : "kp=2.5,ki=300,kd=0.035;" För att få den lugn och fin.