Arduino MEGA + Curtis 1212 Motorstyrning
Jag har en motor som jag kan styra fram och tillbaka, samt programmera ett stopp (sitter rotary encoder på motorns axel).
Så när jag passerar det stoppet (pulsen) jag programmerat så stannar den vid den positionen.
So far ganska good
Problemet är att motorn tvärnitar när den kommer till rätt position. Varvid jag skulle vilja kunna ställa in så att den går ner i en lägre
hastighet innan den stannar, så att det blir ett lite mjukare stopp och som blir lite mer kontrollerat.
Typ att den går ner i hastighet i två steg, eller kanske till och med tre steg vore bra.
Curtis motorstyrningen styrs av en spänningssignal, så 0V är full spetta åt ena håller, 2.5V är stilla och 5V är fullt ös åt andra hållet.
Jag kan styra maxhastigheten med en siffra från 0 (0V) till 250 (5V), med PWM från MEGA'n.
Skulle alltså behöva något i koden som säger att när den är t.ex. 45 pulser från programmerad position så sänker den hastigheten
innan den stannar på den position den ska stanna på.
Koden där hastigheten för fullt ös framåt ser ut som följande.
("Åker fram långsamt" är bara för när den knappen trycks in, och påverkar inte programmerade stoppet).
Kod: Markera allt
{
int valfast = digitalRead(HighSpeed1Pin); // Åker fram snabbt
int valslow = digitalRead(SlowSpeed1Pin); // Åker fram långsamt
if (valfast == HIGH || valslow == HIGH) // Checkar om knappen trycks
{
if(valfast == HIGH)
analogWrite(controlPin2, 250); // 250 är PWM som blir 5V ut, denna ser till att motorn snurrar snabbt/100%
else if(valslow == HIGH)
analogWrite(controlPin2, 200); // Valfri siffra, denna går långsammare när åka långsamt knappen trycks in
Det här är koden som ser till att stoppa motorn på sparad position
- 45 och +45 är att den stannar motorn när den är 45 pulser ifrån stoppet, detta pga att motorn har lite fördröjning så för att få den att
stanna exakt där jag vill så behövs detta. Men den stannar endå för hårt. Med en kontrollerad och programmerad inbromsning tror jag inte dessa
siffror skulle behövas.
Kod: Markera allt
{
if ( UserStopPulseCount != 0 && PulseCount >= UserStopPulseCount - 45 && PulseCount <= UserStopPulseCount + 45 )
{
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(100);
valA = digitalRead(HighSpeed1Pin);
valB = digitalRead(HighSpeed2Pin);
}
okgo=1;