Show Posts
Pages: 1 [2] 3 4 ... 21
16  International / Deutsch / H-Brücke für Rechts-/Linkslauf mit Relais on: May 16, 2014, 05:31:19 am
Hallo allerseits,
ich habe ein Verständnis Problem mit den Freilaufdioden.
Wo werden die Angeschlossen ?
Das ich 4 brauche, weil der Motor ja Rechts und links laufen soll, habe ich schon von Jurs erfahren,
vielen Dank an dieser Stelle!

Hier ein Bild wie ich den Motor angeschlossen habe :



Und die zweite Frage, kann/muss man auf der Arduino-Seite noch einen Kondensator mit dran machen?
Glättungskondensator oder so ?
Habe einige Bilder im Netz gesehen...

Vielen Dank für Eure Hilfe !!
17  International / Deutsch / Re: Hilfe zu Motorcontroller MC33926 on: May 16, 2014, 05:26:16 am
Hallo,
werde ich nachher, wenn ich zuhause bin testen...
Danke..  smiley-grin
18  International / Deutsch / Re: Hilfe zu Motorcontroller MC33926 on: May 15, 2014, 07:42:51 am
Also, ich habe jetzt mal nachgemessen.
Der Motor zieht laut meinem Multimeter 0,7A
Das dürfte wohl nicht das Problem sein   smiley-confuse

Ich habe alles wie folgt verkablet:

Arduino Nano   --- >  MC33926

+ 5V     --->   EN (Pin10)
GND    --->   GND (Pin2)
GND    --->   D1 (pin7)
Pin 4   --->   IN1(Pin5)
Pin 5   --->   IN2(Pin4)
+ 5V    --->   D2(Pin 6)

Hier mal 2 Bilder vom Aufbau :


19  International / Deutsch / Re: Hilfe zu Motorcontroller MC33926 on: May 15, 2014, 06:31:48 am
Quote
Der Motor wird ca 2x hin oder her geschaltet, dann schaltet der MC33926 die "over-current Protection" ein und
es sind beide Motorausgänge auf +12V geschaltet.

Da sich der Motor zuerst dreht, liegt das wohl an der Software.
Ok, vieleicht habe ich mich verkehrt ausgedrückt.

Der Sketch läuft, die LDR´s werden abgefragt und dann wird geschaltet, LINKS oder RECHTS.
Und das macht er ca 2-3x  dann sind auf beiden Ausgängen +12V messbar.

Also us dem Datenblatt erlese ich, das er abschaltet, wegen "over-current Protection" .

Quote
Wenn du beide Inputs des Boards auf HIGH schaltest und das kann an einer Stelle im Programm passieren, dann gehen auch beide Outputs auf HIGH, daher schließt du den Motor kurz. Hast du mal überprüft, ob beide Inputs auch auf HIGH sind?

Code:
else if (left == rightN)                          // sind links u. rechts gleich, in dieser stellung für 30 sek. bleiben
    {
      pauseMillis = millis();
      //Serial.println(F("Horizontal Optimal !"));
      digitalWrite(moveleft, HIGH);
      digitalWrite(moveright, HIGH);
      lcd.setCursor(14,1);
      lcd.write(2);
      }

Ändere das mal auf LOW, dann bleibt der Motor auch in seiner Position.

Das hatte ich schon gemacht, alles angepasst.
Ich hänge den jetzigen Sketch nochmal an.

Quote
Versuch doch zunächst mal den Motor nur über ein ganz simples Programm zu steuern. Indem du einfach nur einen der beiden Inputs auf HIGH setzt.

Ok, werde ich machen ...

Sketch
20  International / Deutsch / Re: Hilfe zu Motorcontroller MC33926 on: May 14, 2014, 07:25:26 am
...
Edit:
Hast du Jumper auf dem Board? Wenn ja, dann musst du die entfernen.
...
Nein, sind keine Jumper vorhanden...

So, ich habe nun alles fertig gelötet und angeschlossen, aber es funktioniert nicht zu meiner zufriedenheit   smiley-red
Besser gesagt es funktioniert garnicht.
Der Motor wird ca 2x hin oder her geschaltet, dann schaltet der MC33926 die "over-current Protection" ein und
es sind beide Motorausgänge auf +12V geschaltet.

Was ich aber nicht verstehe, denn auf dem Motor steht Max 3A und der MC33926 verkraftet laut Datenblatt 5A...

Was kann ich anders machen ? Weiß jemand Rat ?
Ich werde heute abend mal Skizzieren, wie ich alles angeschlossen habe.
Es muss doch möglich sein, einen Solartracker mit Arduino zu realisieren.
Mit einen Linearmotor statt wie überall beschrieben, mit einem Steppermotor...
21  International / Deutsch / Re: Hilfe zu Motorcontroller MC33926 on: May 13, 2014, 03:48:03 pm
Hallo,
erstmal Danke für die tolle Hilfe!!
Ich bin Zeitlich z.Zt. etwas eingeschränkt, deshalb erstmal einpaar Fragen zwischen durch.

Wie werden die Freilaufdioden angeschlossen ?
Und kann ich die 1N4001 dafür nehmen ?


Habe gerade gelesen das die Freilaufdioden schon integriert sind...

@Addi2438, werden die folgenden Pins alle an GND angeschlossen ?

SF
FB
SLEW
INV


Vielen Dank
22  International / Deutsch / Re: ATTiny45 20PU 8MHz on: May 09, 2014, 01:24:20 pm
Klasse! Freut mich, das ich auch mal helfen konnte  smiley-lol
23  International / Deutsch / Re: ATTiny45 20PU 8MHz on: May 09, 2014, 10:21:41 am
Ah, ok. Wieder was gelernt. smiley-grin
24  International / Deutsch / Re: ATTiny45 20PU 8MHz on: May 09, 2014, 10:17:37 am
Hi,
ich glaube du hats den Bootloader nicht installiert.


   1. Wählt in der Arduino IDE unter Tools –> Board den Eintrag “ATtiny45 @ 8 MHz (internal oscillator; BOD disabled)“
  2.  Unter Tools wählt ihr “Bootloader installieren“
  3.  Erscheint im Log-Fenster die üblichen Wartungen (s.o.) ohne Fehler, hat alles geklappt

Schau mal hier

Irgendwo in der Mitte steht :

ATTiny84 von 1MHz auf 8MHz umstellen

Ich hoffe es Hilft
25  International / Deutsch / Re: Hilfe zu Motorcontroller MC33926 on: May 06, 2014, 06:32:36 am
Hallo addi2438,
Leider sagt der kontroller garnichts...
Habe alles so angeschlossen wie du geschrieben hast.
Aber da rührt sich nix...

An VIn musst du den Plusspol der Spannungsquelle für deinen Motor anschließen.
Die Spule deines Motors musst du an Out1 und Out2 anschließen (eventuell über Freilaufdioden).
Die Outputs werden über die beiden Pins In1 und In2 gesteuert (und damit auch die Drehrichtung des Motors), die kommen an den Arduino.
Den En pin musst du an 5V vom Arduino legen, da sonst der Chip im Sleepmodus ist.
VDD an die 5V vom Arduino.
GND an GND

Masse (GND) vom Arduino und der Spannungquelle für den Motor musst du zusammen legen.

Die beiden PWM Kanäle schließt du an GND oder 5V musst du mal probieren.
SLEW an GND.
INV an GND (an 5V hat zur Folge, dass das Signal an den In-Pins invertiert wird).
FB an LOW.

Über den Pin SF kannst du feststellen, ob es irgendein Problem mit dem Board gibt, oder ob einer der PWM-Kanäle gerade einen der Outputs ausschaltet. Dazu musst du einfach nur über einen der Digitalpins überprüfen, ob er auf LOW ist.

smiley-wink

Hast du oder jemand anderes noch eine Idee ?
26  International / Deutsch / Re: Hilfe zu Motorcontroller MC33926 on: May 03, 2014, 09:17:50 am
Hallo Uwe,
Hallo Addi2438,
Vielen Dank für deine Hilfe.
Zwei Fragen habe ich noch, wie Dimensioniert muss denn die Freilaufdiode sein ?
Und wo bringe ich die ein ?
Ich habe ja eine fertige Relais-Platine:

Jetzt verstehe ich nicht ganz Deine Frage.
ICH AUCH NICHT !  smiley-red
Sorry, irgendwie hatte ich die letzten Tage zu wenig schlaf...

Der MC33926 hat die Freilufdioden bereits integriert. siehe http://www.pololu.com/file/0J233/MC33926.pdf
Beim Relais bzw grundsätzlich bei induktiven Lasten wird die Diode antiparalell zur Spule bzw induktiven Last geschaltet. Auf der Platine sind das die kleinen Rot-schwarzen Bauteile links von den Relais. Normalerweis reichen kleine 1N4148 Dioden. Bei Motoren sind stärkere Dioden notwendig. Sie sind im Datenblatt der H-Brücke angegeben.
Grüße Uwe

Ich werde es erstmal ohne Freilaufdioden probieren. Und natürlich ohne Ralais, sondern wie im Titel mit dem MC33926  smiley-red
Keine Ahnung warum ich das Bild mit der Relais-Platine gepostet habe... smiley-roll

27  International / Deutsch / Re: Hilfe zu Motorcontroller MC33926 on: May 03, 2014, 01:09:21 am
Hallo Addi2438,
Vielen Dank für deine Hilfe.
Zwei Fragen habe ich noch, wie Dimensioniert muss denn die Freilaufdiode sein ?
Und wo bringe ich die ein ?
Ich habe ja eine fertige Relais-Platine:


28  International / Deutsch / Re: Hilfe zu Motorcontroller MC33926 on: May 02, 2014, 01:53:56 pm
Hallo Pylon,
Ein Verdrahtungsdiagramm würde auch helfen.

In den Kommentaren steht etwas von Schritten. Hattest bzw. hast Du Schrittmotoren im Einsatz?

Keinen Schrittmotor, einen Linearmotor, der einfach über PIN 4 und 5 mittels eines Relais,hin und her geschaltet wird.
Und das Relais soll duch den MC33926 ersetzt werden.

Leider findet man nur Anleitungen usw für den Dual MC33926.
Ich habe abr nur den einfachen, weil ja nur ein Motor.

Und der MC33926 hat ja ne Menge Anschlussmöglichkeiten und ich weiß ehrlich gesagt nicht wie man den Anschließt. Ich möchte erstmal kein PWM benutzen.
Das kommt vieleicht später...
29  International / Deutsch / [gelöst] Hilfe zu Motorcontroller MC33926 on: May 01, 2014, 02:58:56 pm
Hallo allerseits,
da ich Probleme mit dem Relais-Board hatte, bin ich nun auf den Motorcontroller MC33926 umgestiegen.
Nun stellt sich mir die Frage, kann ich meinen Sketch 1 zu 1 über nehmen oder wasmuss ich verändern ?
Vielen Dank für Eure Hilfe.

Edit: Sketch vergessen...

Hier nun der Sketch
Code:
/*######################################################
#                                                      #
#  SolarTracker mit S0 Zähler                          #
#  Version 0.8                                         #
#                                                      #
#  Sonnenfolger, der mittels LDR immer                 #
#  den hellsten Punkt am Himmel sucht                  #
#                                                      #
#  written from Stefan Blinkmann                       #
#  01.04.2014 - 20:53                                  #
#                                                      #
########################################################*/
//#include <SPI.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);
byte bell[8]   = { B00100, B01110, B01110, B01110, B11111, B00000, B00100, B00000 };
byte sun[8]    = { B00100, B10101, B01110, B11111, B01110, B10101, B00100, B00000 };
byte smili[8]  = { B00000, B01010, B01010, B00000, B00100, B10001, B01110, B00000 };
byte left[8]   = { B00010, B00110, B01110, B11110, B01110, B00110, B00010, B00000 };
byte right[8]  = { B01000, B01100, B01110, B01111, B01110, B01100, B01000, B00000 };
byte ae[8]     = { B01010, B00000, B01110, B00001, B01111, B10001, B01111, B00000 };

volatile int impState = 0;
volatile int lastimpState = 0;
int bounceTime  = 100;
unsigned long act_imp;
unsigned long last_imp;
double impCounter = 0;
unsigned long millisBetween;
unsigned long lastMillis;
unsigned long watt;

double kwh = 0.000;                                   // Kilowattstunden
double Preis =  0.2622;                               // Preis einer Kilowattstunde in Euro
double euro;
char tmp1[16];
char tmp2[16];

/*--- Solar Tracker ---*/
int moveleft = 4;                                     // Motor pin left
int moveright = 5;                                    // Motor pin right
int ldrleft = 1;                                      // Name und Pin-Nr (LDR links)
int ldrcenter = 2;                                    // Name und Pin-Nr (LDR mitte)
int ldrright = 3;                                     // Name und Pin-Nr (LDR rechts)
int LDR_hell = 0;                                     // Wert von LDR_hell
unsigned long Zeit_dtime;                             // Zeit-Variable für dtime
unsigned long pauseMillis;                            // Zeit-Variable für pause
/*--- Solar Tracker ---*/

void setup ()
{
  Serial.begin(9600);
  pinMode(2, INPUT);
  digitalWrite(2, HIGH);
  pinMode(7, OUTPUT);                                 // LCD Hintergrundbeleuchtung
  pinMode(moveleft, OUTPUT);                          // Motor left als Ausgang deklarieren
  pinMode(moveright, OUTPUT);                         // Motor right als Ausgang deklarieren
  digitalWrite(moveleft, HIGH);
  digitalWrite(moveright,HIGH);
  lcd.init();
  lcd.backlight();
  lcd.createChar(0, bell);                            // Sonderzeichen Glocke
  lcd.createChar(1, sun);                             // Sonderzeichen Sonne
  lcd.createChar(2, smili);                           // Sonderzeichen Smiley
  lcd.createChar(3, left);                            // Sonderzeichen left arrow
  lcd.createChar(4, right);                           // Sonderzeichen right arrow
  lcd.createChar(5, ae);                              // Sonderzeichen right arrow
  digitalWrite(7, HIGH);                              // LCD Hintergrundbeleuchtung AN
  lcd.setCursor(0,0);
  lcd.write(1);                                       // Sonne links
  lcd.setCursor(2,0);
  lcd.print(F("Starte Solar"));
  lcd.setCursor(15,0);
  lcd.write(1);                                       // Sonne rechts
  lcd.setCursor(3,1);
  lcd.print(F("Z"));
  lcd.write(5);
  lcd.print(F("hler ..."));
  delay(5000);
  lcd.clear();
  millisBetween = 0;
  lastMillis = 0;
  lastimpState = 0;
  watt = 0;
  Zeit_dtime = 0;
  pauseMillis = 0;
}


void loop ()
{
  impState = digitalRead(2);
  act_imp = millis();
  unsigned long time = millis();
  
  if(act_imp - last_imp > bounceTime)
  {

  if (impState != lastimpState) {
    if (impState == LOW) {
      last_imp = act_imp;
      impCounter++;
      
      millisBetween = time-lastMillis;
      lastMillis = time;
    }
  }
  lastimpState = impState;
  }
  
  /*--- Solar Tracker ---*/
  int left = analogRead(ldrleft);                     // LDR links einlesen
  int right = analogRead(ldrright);                   // LDR rechts einlesen
  int center = analogRead(ldrcenter);                 // LDR mitte einlesen
  int rightN = right +20;                             // (-12 )LDR rechts an den linken angleichen, bei +47 sind L u. R vom Wert her gleich
  int dtime = 1000;                                   // Such/Beweg geschwindigkeit
  int tol = 2;                                        // (28) tolleranz zwischen LDR-links und LDR-rechts
  unsigned long pause = 120000;                       // 2 min Pause in milliSek , wenn Links und Rechts gleich sind
  int alr = (left + rightN) / 2;                      // durchschnitt LDR-links u. LDR-rechts
  int LDR_hell = center;                              // LDR-mitte auch als LDR_hell deklarieren, für Nacht/Tag modus
  int dhoriz = alr - center;                          // check the diffirence of left/rigt and center
  int LR = left - rightN;
  
  
       display_Counter();
       digitalWrite(7, HIGH);                         // LCD Hintergrundbeleuchtung AN
      
  if((millis() - pauseMillis) > pause){               // Pause wenn L&R gleich sind
    
   if((millis() - Zeit_dtime) > dtime){               // Such/Beweg geschwindigkeit
    Zeit_dtime = millis();
    
  Serial.print(F("L:"));
  Serial.println(left);
  Serial.print(F("C:"));
  Serial.println(center);
  Serial.print(F("R:"));
  Serial.println(rightN);
    
  if (-1*tol > dhoriz || dhoriz > tol)                // check if the diffirence is in the tolerance else change horizontal angle
  {
    
    if (left < rightN)                                // ist links kleiner als rechts, fahre nach links
    {
      //Serial.println(F("Move -->"));
      digitalWrite(moveright, HIGH);                  // einzelne schritte -
      digitalWrite(moveleft, LOW);
      lcd.setCursor(14,1);
      lcd.write(4);
    }
    else if (left > rightN)                           // ist links größer als rechts, fahre nach rechts
    {
      //Serial.println(F("<-- Move"));      
      digitalWrite(moveleft, HIGH);                   // einzelne schritte +
      digitalWrite(moveright, LOW);
      lcd.setCursor(14,1);
      lcd.write(3);
    }
    else if (left == rightN)                          // sind links u. rechts gleich, in dieser stellung für 30 sek. bleiben
    {
      pauseMillis = millis();
      //Serial.println(F("Horizontal Optimal !"));
      digitalWrite(moveleft, HIGH);
      digitalWrite(moveright, HIGH);
      lcd.setCursor(14,1);
      lcd.write(2);
      }
    
    }

    if (left != rightN)  { /* nix */ }                 // sind links und rechts ungleich, weiter suchen...

   } /* Such/Beweg geschwindigkeit ende */
  }    /* Pause wenn L&R gleich sind ende */
  
 }/*--- Loop Ende ---*/
 
 void display_Counter(){
   kwh = impCounter / 1000;
    dtostrf(kwh, 1, 3, tmp1);
    lcd.setCursor(0,0);
    lcd.print(tmp1);
    lcd.print(F(" KWh"));
    
    euro = kwh * Preis;
    dtostrf(euro, 1, 3, tmp2);
    lcd.setCursor(0, 1);
    lcd.print(tmp2);
    lcd.print(" EUR");
    
    watt = 3600000 / millisBetween;
    
    if (int(watt) > 500) { watt = 500; }                  // ist Watt grösser als 500 , zeige nur 500 an

    lcd.setCursor(11,0);
    if (int(watt) <= -1){ lcd.print("  "); watt = 0;}     // ist Watt kleiner oder gleich -1, setze watt auf 0
    else if (int(watt) < 100 ) { lcd.print(' '); }        //stellt ein leeres Feld voran, wenn Watt kleiner als 100
    else if(int(watt) < 10 ) { lcd.print('  '); }         //stellt zwei leere Felder voran, wenn Watt kleiner als 10
    lcd.print(int(watt));
    lcd.setCursor(15, 0);
    lcd.print("W");
 }
30  International / Deutsch / Re: Hilfe ... Snubber berechnen on: April 29, 2014, 02:15:27 pm
Hallo Gunther,
vielen Dank für Deine tolle Hilfe, habe, denke ich,  verstanden.
Aber ich habe mich erstmal für den MC33926 von Watterott entschieden und werde es damit probieren.
Danke Uwe, genau den habe ich heute morgen Bestellt...  smiley-wink

DANKE !!
Pages: 1 [2] 3 4 ... 21