Skocz do zawartości

Pomocna odpowiedź

Napisano

Zlecę napisanie programu do sterowanie wózkiem w oparciu o sterownik MDS40A

https://www.cytron.io/c-motor-and-motor-driver/c-motor-driver/p-40amp-10v-45v-smartdrive-dc-motor-driver

Funkcje wózka:

-jazda przód - wejście analogowe - zamknięciu obwodu jazda, zatrzymanie po otwarciu obwodu.

- jazda tył - j.w.

- regulacja prędkości - potencjometr

- możliwość zmiany w programie szybkości rozbiegu i zatrzymania

 

 

 

  • Lubię! 1
(edytowany)

GND, + 5V - ze sterownika

D3 - PWM

D4 - zmiana kierunku

przyciski, przekaźnik - dowolnie mogę przepiąć

Edytowano przez karpa
  • Lubię! 1
(edytowany)

dokładnie tak

jak testowałem sobie pracę to korzystałem z gotowca ze strony cytron

 

 #include "CytronMotorDriver.h"

...........

  if (digitalRead(A0) == LOW){

   motor.setSpeed(255);

    } else {

  motor.setSpeed(0);

    if (digitalRead(A1) == LOW){

    motor.setSpeed(-255);

    } else {

  motor.setSpeed(0);

 

Przyciski mogą być przypisane pod A0 i A1 w funkcji PULLUP 

Przekaźnik D2

 

Edytowano przez karpa
(edytowany)

Czyli potrzebny jest kod który po naciśnięciu przycisku płynnie rozpędza silnik i utrzymuje jego prędkość, a po zwolnieniu przycisku płynnie zatrzymuje silnik. Tak samo z drugim przyciskiem tylko że silnik ma się kręcić w drugą stronę. Maksymalna prędkość ma być regulowana przez potencjometr. Wszystko dobrze zrozumiałem?

Edytowano przez AntekBezak
  • Lubię! 1

Działanie przycisków - dokładnie tak

Maksymalna prędkość może być ustawiana z poziomu programu. Po rozmowie z osobami, które obsługują wózek wynika, że maksymalna prędkość jest ustawiana przy pierwszym uruchomieniu. Brak potencjometru uprości schemat.

Myślę że mógłbym spróbować napisać taki program, ale nie gwarantuję że mi się uda. Nie mam takiego sterownika więc nie mógłbym testować kodu.

(edytowany)

Pierwsza wersja:

#include "CytronMotorDriver.h"

CytronMD motor(PWM_DIR, 3, 4);

// piny przyciskow
#define przycisk1 A0
#define przycisk2 A1

// predkosc maksymalna i minimalna
int smax = 128;
int smin = -128;

int pr = 0;
int p = 0;

void setup() {
  pinMode(przycisk1, INPUT_PULLUP);
  pinMode(przycisk2, INPUT_PULLUP);

}

void loop() {
  if (digitalRead(przycisk1)==HIGH){
    pr = smax;
  }
  if (digitalRead(przycisk1)==LOW){
    pr = 0;
  }
  if (digitalRead(przycisk2)==HIGH){
    pr = smin;
  }
  if (digitalRead(przycisk2)==LOW){
    pr = 0;
  }
  
  if(p<pr){
    p++;
  }
  if(p>pr){
    p--;
  }
  
  if(p > smax){
    p = smax;
  }
  if(p < smin){
    p = smin;
  }
  motor.setSpeed(p)
}

Sugeruję testy z kołem w powietrzu. Jeśli się pomyliłem układ może się zachowywać nieprzewidywalnie.

Edytowano przez AntekBezak
  • Lubię! 1

zmieniłem stan przycisków, ponieważ tak tego używamy 


```cpp
void loop() {
  if (digitalRead(przycisk1)==LOW){
    pr = smax;
  }
  if (digitalRead(przycisk1)==HIGH){
    pr = 0;
  }
  if (digitalRead(przycisk2)==LOW){
    pr = smin;
  }
  if (digitalRead(przycisk2)==HIGH){
    pr = 0;
  }
```
 

układ reaguje po wciśnięciu przycisku2, 

przycisk 1 nie reaguje

Program w takim wydaniu działa ok, ale nie rozpędza silnika tylko "wskakuje od razu na obroty"

 #include "CytronMotorDriver.h"



CytronMD motor(PWM_DIR, 3, 4);  // PWM = Pin 3, DIR = Pin 4.



void setup() {
  pinMode(8, OUTPUT); //Dioda kontrola przycisków
  pinMode(A0, INPUT_PULLUP);
  pinMode(A1, INPUT_PULLUP);
  digitalWrite(8, HIGH); 
}



void loop() {
    if (digitalRead(A0) == LOW){
  digitalWrite(8, HIGH);
  motor.setSpeed(200);  
      } 
      if (digitalRead(A0) == HIGH){
    digitalWrite(8, LOW);
  motor.setSpeed(0);
  }
    if (digitalRead(A1) == LOW){
  digitalWrite(8, HIGH);
  motor.setSpeed(-200);  
        } 
        if (digitalRead(A1) == HIGH){
    digitalWrite(8, LOW);
  motor.setSpeed(0);  
}
}

 

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...