Förra tråden förblev olöst trots hjälp från flera. Jag lyckades helt enkelt inte få det att fungera med att motorn bromsar in innan den når stopp position.
Så nu ger jag mig på en (förhoppningsvis) "lättare" lösning på problemet... Med att istället för en mjuk inbromsning iaf ändra hastigheten
till en lägre innan den når sin stopp position. Kommer inte bli lika "snyggt" men skulle lösa mitt grundläggande problem.
Jag har alltså en motor som jag kan köra fram och tillbaka vid en släde. Jag kan spara en valfri position via pulsräkningen. Och den kan stanna på sparad position.
Det fungerar så långt. Ett problem är bara det att motorn "glider" lite precis efter att den stoppar via koden, så den tar någon halvsekund att
stanna. Detta kan korrigeras via koden nedan som bestämmer att den ska stanna 45 pulser innan sitt riktiga stopp. Då glider den in exakt rätt.
Kruxet med denna lösning är dock att när det är lite mer tyngd på motorn, då stannar den ju mycket tidigare istället, pga gravitation osv. Mindre glid.
Så den blir inte jättepålitlig.
Jag skulle vilja ha ner hastigheten istället när den börjar närma sig sin stopp-punkt.
Motorstyrningen styrs via en 0-5V PWM signal från Arduininon. Så tanken är att få koden att förstå att 45 pulser ifrån målet/stoppet,
så ska den sänka PWM från siffra 250 (nästan 5V) till typ siffran 200. Då kommer den mycket långsammare till sitt stoppmål och den kommer hamna
mer exakt. Då kommer den inte glida in och över sitt stopp för att den kör för snabbt. Eller iaf mycket mycket mindre.
Jag har suttit i flera dagar för att försöka få eländet att fungera nu. Men förstår inte vad det är jag gör fel
Jag har försökt dela upp första raden kod här nedan. För att separera på Fram och Tillbaka, även testat utan.
Samt att när den når denna punkt +45 eller -45 så ska den skicka signal att bara sänka PWM'et.
Men inget har fungerat. Jag skulle verkligen behöva lite guidning och hjälp.
Min signal till PWM ut från Arduino heter controlPin2.
HighSpeed1Pin och HighSpeed2Pin är knapparna för fram och tillbaka.
Det här är den delen kod som fungerar bäst hittils.
Men den saktar inte ner på något sätt innan den når sin stopp.
Kod: Markera allt
// ---- STOPPAR MOTORN i 1 sek när den är inom värdet -- Gäller oavsett om man åker FRAM och TILLBAKA
// - och + värdet avgör hur långt innan riktiga stoppet som stoppet skall startas, används pga motorn glider lite innan den stannar
{
if ( UserStopPulseCount != 0 && PulseCount >= UserStopPulseCount - 45 && PulseCount <= UserStopPulseCount + 45 )
// Här på raden ovanför och under har jag försökt allehanda olika kommandon och varianter utan att få det att fungera
{
digitalWrite(controlPin1, LOW);
digitalWrite(controlPin2, LOW);
if(okgo==0){
lcd.setCursor(0, 1);
lcd.print("Users Stop");
}
int valA = digitalRead(HighSpeed1Pin);
int valB = digitalRead(HighSpeed2Pin);
while (valA+ valB>0 && okgo==0){
Serial.println("Users programmed STOP activated ⛔");
// Serial.println("HighSpeed1Pin %3d HighSpeed2Pin %f",HighSpeed1Pin,HighSpeed2Pin);
delay(0);
valA = digitalRead(HighSpeed1Pin);
valB = digitalRead(HighSpeed2Pin);
}
okgo=1;
}else{
okgo=0;
}
}
På ren "svenska" är det en sån här kodsnutt jag behöver:
OM du kör FRAMÅT, och är inom 45 pulser från 0, då sänks PWM till 200, när du når 0, så stannar motorn.
Samt
OM du kör BAKÅT, och är inom -45 pulser från 0, då sänks PWM till 120, när du når 0, så stannar motorn.