- LiFePO4 Speicher Test         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 41

Thema: Alles PWM oder wie?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    Zitat Zitat von witkatz Beitrag anzeigen
    so in der Art mache ich das:
    Code:
    void Motor1Forw(char velo)
    {
        Motor1_In1 = 0;
        Motor1_Pwm = velo;
    }
    void Motor1Backw(char velo){
        Motor1_In1 = 1;
        Motor1_Pwm = 255 - velo;
    }
    so habe ich versucht das umzusetzen:

    Code:
    int Motor_1_Pwm;
    .
    .
    .
    
    void Motor_1_Backw(char velo)
    {
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, HIGH);
      Motor_1_Pwm = 255 - velo;
    }
    mit dem aufruf von "Motor_1_Backw(200);"

    dreht der motor zwar, allerdings unabhängig von der zahl "velo", also immer voll power...
    gruß inka

  2. #2
    HaWe
    Gast
    Zitat Zitat von inka Beitrag anzeigen
    so habe ich versucht das umzusetzen:

    Code:
    int Motor_1_Pwm;
    .
    .
    .
    
    void Motor_1_Backw(char velo)
    {
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, HIGH);
      Motor_1_Pwm = 255 - velo;
    }
    mit dem aufruf von "Motor_1_Backw(200);"

    dreht der motor zwar, allerdings unabhängig von der zahl "velo", also immer voll power...
    du übergibst doch auch überhaupt keinen velo-Wert an irgendeienen Pin - wie soll es dann was bewirken?
    Stattdessen musst du 1 pin HIGH oder LOW setzen für die Richtung und den anderen per PWM (velo) für die Geschwindigkeit.

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    Zitat Zitat von HaWe Beitrag anzeigen
    du übergibst doch auch überhaupt keinen velo-Wert an irgendeienen Pin - wie soll es dann was bewirken?
    Stattdessen musst du 1 pin HIGH oder LOW setzen für die Richtung und den anderen per PWM (velo) für die Geschwindigkeit.
    aber die pins haben dann trotzdem keine verbindung zur hardware, also zum motortreiber? Das ist das was ich nicht verstehe...
    gruß inka

  4. #4
    HaWe
    Gast
    verstehe nicht was du meinst.
    du hast 2 Pins pro Motor, einer ist für die Richtung, der andere für die PWM.
    welcher wofür, weiß ich nicht, möglicherweise der erste für PWM, der 2. für die Richtung. Oder umgekehrt - frag ggf. beim Händler an.

    PS,
    und lass mal das seltsame
    255 - velo
    weg - das ist normalerweise Unsinn.
    velo alleine ist die PWM, für beide Richtungen.

  5. #5
    HaWe
    Gast
    Vorschlag:


    Code:
    void Motor_1_Forw(char velo)
    {
      analogWrite(IN1, velo);
      digitalWrite(IN2, HIGH);
    }
    
    
    void Motor_1_Backw(char velo)
    {
      analogWrite(IN1, velo);
      digitalWrite(IN2, LOW);
    }
    Geändert von HaWe (21.02.2018 um 08:49 Uhr)

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    57
    Beiträge
    2.814
    Du übergibst fest "200"?
    Dann kann aber auch nur der Wert verarbeitet werden.

    Schon mal Versucht einfach eine Geschwindigkeitsrampe zu erzeugen?
    0 bis max. Rückwärts und zurück zu 0 und bis max. Vorwärts und zurück zu 0.

    Bsp.:
    Code:
    int speed;
    
    void loop(){
      for (int speed=0; speed <=255; speed++){
        void Motor_1_Backw(speed);
        delay(10);
      }
      for (int speed=255; speed >=0; speed--){
        void Motor_1_Backw(speed);
        delay(10);
      }
      for (int speed=0; speed <=255; speed++){
        void Motor_1_Forw(speed);
        delay(10);
      }
      for (int speed=255; speed >=0; speed--){
        void Motor_1_Forw(speed);
        delay(10);
      }
    }
    
    void Motor1Forw(char velo){
      Motor1_In1 = 0;
        Motor1_Pwm = velo;
    }
    
    void Motor1Backw(char velo){
      Motor1_In1 = 1;
      Motor1_Pwm = 255 - velo;
    }
    Was macht er denn mit diesem Code?

    Wenn es zu langsam ist die "delay" rauswerfen.

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    das ist jetzt der code, der sich auch kompilieren lässt:
    Code:
    int speed;
    
    void setup() {
      // put your setup code here, to run once:
    
    }
    
    void loop(){
      for (int speed=0; speed <=255; speed++){
        Motor_1_Backw(speed);
    //    delay(10);
      }
      for (int speed=255; speed >=0; speed--){
        Motor_1_Backw(speed);
    //    delay(10);
      }
      for (int speed=0; speed <=255; speed++){
        Motor_1_Forw(speed);
    //    delay(10);
      }
      for (int speed=255; speed >=0; speed--){
        Motor_1_Forw(speed);
    //    delay(10);
      }
    }
    
    
    void Motor_1_Forw(char velo){
    int  Motor1_In1 = 0;
    int    Motor1_Pwm = velo;
    }
    
    
    void Motor_1_Backw(char velo){
    int  Motor1_In1 = 1;
    int  Motor1_Pwm = 255 - velo;
    }
    aber nach dem hochladen passiert nichts...

    ich muss mir das noch genauer anschauen...
    gruß inka

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    57
    Beiträge
    2.814
    Wie ist den der komplette Code bei dem,

    "Motor_1_Backw(200);"

    zu einem drehenden Motor geführt hat?

    Mein Code ist ein Sniplet, das einzufügen ist.
    das
    Code:
    int speed;
    halt ganz am Anfang um die Variable zu deklarieren.
    Code:
    den Abschnitt void setup()
    {
    bla bla
    }
    habe ich komplett weggelassen, da der ja bereits existieren muß wenn
    "Motor_1_Backw(200);"
    etwas bewirkt.
    (ich weis ja nicht wie, welche Pins definiert sind)

    In die Hauptschleife void loop()
    halt die For Schleifen um speed zu inkrementieren und zu dekrementieren.
    Und die beiden Funktionen unverändert von witzkatz.

    - - - Aktualisiert - - -

    Zitat Zitat von inka Beitrag anzeigen
    aber die pins haben dann trotzdem keine verbindung zur hardware, also zum motortreiber? Das ist das was ich nicht verstehe...
    Wenn sich der Motor dreht, was ist denn angeschlossen?

    Plus und Minus zu einer Stromquelle und zwei Anschlüsse zu einem Motor sind das mindeste damit überhaupt was passieren könnte.

    Ist außer diesen 4 Drähten sonst noch irgendeine Leitung irgendwo angeschlossen?

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    Zitat Zitat von i_make_it Beitrag anzeigen
    Wie ist den der komplette Code bei dem,

    "Motor_1_Backw(200);"

    zu einem drehenden Motor geführt hat?

    Wenn sich der Motor dreht, was ist denn angeschlossen?

    Plus und Minus zu einer Stromquelle und zwei Anschlüsse zu einem Motor sind das mindeste damit überhaupt was passieren könnte.

    Ist außer diesen 4 Drähten sonst noch irgendeine Leitung irgendwo angeschlossen?
    - das ist der code der zu einem drehendem motor geführt hat:
    Code:
    int IN1 = 9;
    int IN2 = 8;
    int IN3 = 7;
    int IN4 = 6;
    
    
    int Motor_1_Pwm;
    int Motor_2_Pwm;
    //char velo;
    
    
    void setup()
    {
      pinMode(IN1, OUTPUT);
      pinMode(IN2, OUTPUT);
      pinMode(IN3, OUTPUT);
      pinMode(IN4, OUTPUT);
    
    
      Serial.begin(9600);
      Serial.println("Enter number for control option:");
      Serial.println("1. FORWARD");
      Serial.println("2. REVERSE");
      Serial.println("3. STOP");
      Serial.println();
    }
    
    
    void loop()
    {
      char user_input;
    
    
      while (Serial.available())
      {
        user_input = Serial.read();
        /*
          digitalWrite(IN1, LOW); //OFF
          digitalWrite(IN2, LOW);
          digitalWrite(IN3, LOW);
          digitalWrite(IN4, LOW);
        */
        if (user_input == '1')
        {
          Forward();
        }
        else if (user_input == '2')
        {
          Reverse();
        }
        else if (user_input == '3')
        {
          Stop();
        }
        else
        {
          Serial.println("Invalid option entered.");
        }
      }
    }
    
    
    
    
    void Forward()
    {
      digitalWrite(IN1, HIGH);
      digitalWrite(IN2, LOW);
      Serial.print("Motor 1 Forward");
      Serial.println();
    
    
      digitalWrite(IN3, HIGH);
      digitalWrite(IN4, LOW);
      Serial.println("Motor 2 Forward");
      Serial.println();
    }
    
    
    void Reverse()
    {
      Motor_1_Backw(50);
      Motor_2_Backw(50);
    
    
    
    
      //digitalWrite(IN1, LOW);
      //digitalWrite(IN2, HIGH);
    
    
      Serial.print("Motor 1 Reverse");
      Serial.println();
    
    
      //digitalWrite(IN3, LOW);
      //digitalWrite(IN4, HIGH);
    
    
      Serial.println("Motor 2 Reverse");
      Serial.println();
    }
    
    
    void Stop()
    {
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, LOW);
      Serial.print("Motor 1 Stop");
      Serial.println();
    
    
      digitalWrite(IN3, LOW);
      digitalWrite(IN4, LOW);
      Serial.println("Motor 2 Stop");
      Serial.println();
    
    
    }
    /*
    void Motor1Forw(char velo)
    {
        Motor1_In1 = 0;
        Motor1_Pwm = velo;
    }
    void Motor1Backw(char velo)
    {
        Motor1_In1 = 1;
        Motor1_Pwm = 255 - velo;
    }
    */
    
    
    void Motor_1_Forw(int velo)
    {
      digitalWrite(IN1, HIGH);
      digitalWrite(IN2, LOW);
      Motor_1_Pwm = velo;
    
    
    }
    void Motor_1_Backw(int velo)
    {
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, velo);
      //Motor_1_Pwm = 255 - velo;
    }
    
    
    void Motor_2_Forw(int velo)
    {
      digitalWrite(IN3, HIGH);
      digitalWrite(IN4, LOW);
      Motor_2_Pwm = velo;
    
    
    }
    void Motor_2_Backw(int velo)
    {
      digitalWrite(IN3, LOW);
      digitalWrite(IN4, velo);
      //Motor_2_Pwm = 255 - velo;
    }
    - angeschlossen ist +/-/ IN1/IN2/IN3/IN4/motor 1/motor 2
    gruß inka

  10. #10
    HaWe
    Gast
    ok, ich bin raus, macht was ihr wollt...

Seite 1 von 3 123 LetzteLetzte

Ähnliche Themen

  1. 2 Atmegas verwenden oder doch alles in einem
    Von moritz31 im Forum Elektronik
    Antworten: 11
    Letzter Beitrag: 12.03.2014, 17:02
  2. Alles Matrix, oder?
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 1
    Letzter Beitrag: 21.12.2012, 21:30
  3. Real Time Clock oder Uhrenquarz? Alles möglichst stromarm
    Von MelMan im Forum AVR Hardwarethemen
    Antworten: 6
    Letzter Beitrag: 08.06.2011, 17:01
  4. Was brauche ich alles
    Von Haveaniceday im Forum AVR Hardwarethemen
    Antworten: 17
    Letzter Beitrag: 02.08.2007, 12:07
  5. Ist in dem BAusatz alles drin, oder braucht man noch was ???
    Von michiE im Forum Bauanleitungen, Schaltungen & Software nach RoboterNetz-Standard
    Antworten: 3
    Letzter Beitrag: 07.03.2005, 16:10

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests