-         
Seite 1 von 6 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 59

Thema: Schrittmotorsteuerug mit L297/298

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    03.02.2007
    Ort
    Berlin
    Beiträge
    5

    Schrittmotorsteuerug mit L297/298

    Anzeige

    Hallo Leute,
    eine Frage..
    kann ich diesen Schaltungsaufbau auch mittels Labview ansteuern?
    ..zb. über serielle Schnittstelle

    ..oder würdet ihr mir etwas anderes empfehlen?
    Ich möchte einen Schrittmotor (Phasenstrom 1A) ansteuern, also nur eine Achse, dies muß aber unbedingt mit Labview geschehen.
    (Hatte mir erst eine SMC-800 gekauft, aber das ist der letzte Müll; insbesondere die beigefügten C-Scripte!)

    Gruss
    Ron

  2. #2
    Hallo,
    hast du dir schon das DAQ von HYTEK automation angesehen? Damit kann man direkt über LabVIEW, C/C++,... diverse Schaltungen ansteuern.

    Ende dieses Monats wird genau deine Problemstellung in Form eines Roboterarmes verwirklicht.
    Das Ergebnis wird hier natürlich veröffentlicht, du kannst dir derweilen mal drüber informieren -> www.iusbdaq.eu

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    27.06.2006
    Beiträge
    79
    Ich hab eine frage zu den RS-Widerständen von der Schaltung. Kann ich auch statt 0.5 oder 1.0 Ohm einen 10 Ohm Widerstand benutzten - ich hab keine kleineren.

    mfg blan

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2007
    Ort
    Kornwestheim (kWh)
    Beiträge
    1.118
    hi,
    also ich versuch grad auch, übern Druckerport lpt1 n paar Schrittmotoren anzusteuern. Ich hab auch schon mit C++ n programm geschrieben, nur noch nicht getestet
    (zum ansteuern von 3 Schrittmotoren für ne CNC-Fräse, je motor 2 pins, einer um einen Schritt weiter zu drehen(Clock), der zweite für links/rechts (CW/CCW), man braucht dazu inpout32.dll im win32 Verzeichnis).
    und jetzt seh ich bei C0nrad nach, und was seh ich:
    L297/1 kostet 10,19 € das Stück,
    L298N kostet 8,11€ das Stück!!!!

    und ich bräuchte von jedem 3 Stück \/

    kennt ihr vielleicht ne schaltung, die ähnlich funktioniert, aber ohne die 2 ICs??
    oder wo man die ICs billliger herbekommt/ selber Bauen kann(Schaltplan...)

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2007
    Ort
    Kornwestheim (kWh)
    Beiträge
    1.118
    Hier mein programm:

    Code:
    // Impulsgeber für CNC-Fräse, Version Alpha 1.2, ACHTUNG: UNGETESTET!!!
    
    // by AlKi ausm RN
    
    
    #include <iostream>
    #include <stdio.h> // required for printf, getch
    #include <conio.h> // required for _outp, _inp
    #include <dos.h>
    #include <windows.h>
    #include <time.h>
    // viel zu viele header, aber die stören ja nicht.....
    
    #define Data 0x378
    #define loadlib
    
    
    typedef short _stdcall (*inpfuncPtr)(short portaddr);
    typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum);
    
    void lib_laden();
    void lib_schliessen();
    
    HINSTANCE hLib;
    inpfuncPtr inp32;
    oupfuncPtr oup32;
    
    
    using namespace std;
    
    long int _a=0, _b=0, _c=0, _x=0, _y=0, _z=0;  // Variablen eingeführt
    int i=378;
    
    void lib_laden () 
    {
    hLib = LoadLibrary("inpout32.dll");
    inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32");
    oup32 = (oupfuncPtr) GetProcAddress(hLib, "Out32");
    if (hLib == NULL || inp32 == NULL || oup32 == NULL)  { cout << " Fehler beim Laden von inpout32.dll " << '\n'; }/*** ERROR ***/
    }
    
    
    //---------------------------------------------------------------------------------------------------------------------
    
    int main()
    
    {
        
        while(true)
        {
    
            
            cout << " Zuerst wird in der X, dann in der Y und dann in der Z-Achse verfahren " << '\n';
            cout << " X ist die Bewegung in die Tiefe " << '\n';
            cout << " Y ist die vertikale Bewegung " << '\n';
            cout << " Z ist die horizontale Bewegung " << '\n' << '\n';
            
            cout << " Versatz in Richtung der X-Achse eingeben (in die Tiefe) " << '\n';
            cout << " Wenn nach hinten, dann negative Zahl eingeben " << '\n' ;
            cout << " (falls nicht vorhanden 0 eingeben) " << '\n';
            cin  >> _x;
            cout << '\n' << '\n' << '\n';
            
            cout << " Versatz in Richtung der Y-Achse eingeben (Horizontal) " << '\n';
            cout << " Wenn nach links (Rechts, kA) dann negative Zahl eingeben " << '\n';
            cout << " (falls nicht vorhanden 0 eingeben) " << '\n';
            cin  >> _y;
            cout << '\n' << '\n' << '\n';
                   
            cout << " Versatz in Richtung der Z-Achse eingeben (Vertikal) "  << '\n';
            cout << " Wenn nach unten, negative Zahl eingeben " <<'\n';
            cout << " (falls nicht vorhanden 0 eingeben) " << '\n';
            cin  >>  _z;
            cout << '\n' << '\n' << '\n';
            
            // jetzt haben wir schonmal die Daten zum Bearbeiten
            
            
            if (_x>0)
            {
                if (_x<2147483640)
                {
                    
                    while (_a<_x)
                       {
                           (oup32)(i,0x1); // 1 = pin D0 an ( 1 = 1 )
                           Sleep(2);
                           (oup32)(i,0x0); // 0 = alle Pins aus
                           Sleep(2);
                           _a++;
                       }    
            
            
                }        
                if (_x>2147483640)
                {
                    cout << " !!! Zahl fuer X zu groß !!! " << '\n';
                }    
               
            }
            
            
            if ( _x < 0 )
            {
                
                if (_x > -2147483640)
                {          
                    while (_x<_a)
                    {
                        (oup32)(i,0x3); // 3 = pin D0 + Pin D1 an ( 3 = 1 + 2)
                        Sleep(2);
                        (oup32)(i,0x0); // 0 = alle Pins aus
                        Sleep(2);
                        _a--;
                    }    
                
                } 
                 
                
                
                
                if (_x < -2147483640)
                {
                    cout << " !!! Zahl fuer X zu klein !!! " << '\n';
                }    
            }         
            
            if ( _x = 0 )
            { }
            
                   
            cout << " X-Achse bearbeitet " << '\n';
                    
        // nun zur Y-Achse
        
        
            if (_y > 0 )
            {
                if (_y < 2147483640)
                {
                    
                    while (_b < _y)
                       {
                           (oup32)(i,0x4); // 4 = Pin D2 an ( 4 = 4 )
                           Sleep(2);
                           (oup32)(i,0x0); // 0 = alle Pins aus
                           Sleep(2);
                           (_b) = (_b+1);
                       }    
                }    
            
                
                if (_y > 2147483640)
                {
                    cout << " !!! Zahl fuer Y zu groß !!! " << '\n';
                }    
               
            }
            
            
            if (_y < 0)
            {
                
                if (_y > -2147483640)
                {           
                    while (_y < _b)
                    {
                        (oup32)(i,0x12); // 12 = Pin D2 + D3 ( 12 = 4 + 8)
                        Sleep(2);
                        (oup32)(i,0x0); // 0 = alle Pins aus
                        Sleep(2);
                        (_b) = (_b-1);
                    }    
                
                }    
                
                
                
                if (_y < -2147483640)
                {
                    cout << " !!! Zahl fuer Y zu klein !!! " << '\n';
                }    
            }
                   
            if (_y = 0)
            {
            }
                    
            cout << " Y-Achse bearbeitet " << '\n';
                    
        // nun zur Z-Achse
            
            
            if (_z > 0 )
            {
                if (_z < 2147483640)
                {
                    
                    while (_c < _z)
                       {
                        (oup32)(i,0x16); // 16 = Pin D4 an ( 16 = 16 )
                        Sleep(2);
                        (oup32)(i,0x0); // 0 = alle Pins aus
                        Sleep(2);
                           (_c) = (_c+1);
                       }    
            
                }    
                
                if (_z > 2147483640)
                {
                    cout << " !!! Zahl fuer Z zu groß !!! " << '\n';
                }    
               
            }
            
            
            if (_z < 0)
            {
                
                if (_z > -2147483640)
                {            
                    while (_z < _c)
                    {
                        (oup32)(i,0x48); // 48 = Pin D4 + D5 ( 48 = 16 + 32)
                        Sleep(2);
                        (oup32)(i,0x0); // 0 = alle Pins aus
                        Sleep(2);
                        (_c) = (_c-1);
                    }    
                
                }    
                
                
                
                if (_z < -2147483640)
                {
                    cout << " !!! Zahl fuer Z zu klein !!! " << '\n';
                }
                
            } 
            
           
            
            if (_z = 0)
            {
            }
            
             
            // jetzt wurde Z bearbeitet
                       
            
               cout << " Z-Achse bearbeitet " << '\n' << '\n';                 
               cout << " Jetzt sollten sämtliche Operationen ausgeführt worden sein ";
               cout << '\n' << '\n' << '\n' << '\n' << '\n';
               
               _a=0;
               _b=0;
               _c=0;
               
                    
        }
    }    
    
        //-------------------------------------------------------------------------
        
    void lib_schliessen()
    {
    FreeLibrary(hLib);
    }
    und des hier is nommal verbessert, der compiler muckt zumindest nicht mehr...........

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    06.11.2006
    Beiträge
    1.078
    Hallo
    bei Reichelt kosten sie 2,75€ das Stück.
    Einfach mal suchen oder bezahlen.

    Mit freundlichen Grüßen
    Benno
    Wo man nicht mit Vernunft handelt, da ist auch Eifer nichts nütze; und wer hastig läuft, der tritt fehl.
    Ein König richtet das Land auf durchs Recht; wer aber viel Steuern erhebt, richtet es zugrunde

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2007
    Ort
    Kornwestheim (kWh)
    Beiträge
    1.118
    Dankeschön
    nur, gibts auch günstige Anbieter im Raum Stuttgart?
    ich habs nämlich nicht so mit online bestellen. :-P

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2007
    Ort
    Kornwestheim (kWh)
    Beiträge
    1.118
    EDIT: und auch per post nicht.

    AlKi

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    27.06.2006
    Beiträge
    79
    hallo,

    ich bau grad die schaltung auf und hab an den ausgängen für den schnrittmotor eine spannung von 5-6V (Vcc = 12V) - ist das normal, gibts an den Dioden so einen spannungsabfall?

    mfg blan

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    06.11.2006
    Beiträge
    1.078
    Hallo
    habs nämlich nicht so mit online bestellen
    wer das eine will muß das andere mögen.
    Es ist unwahrscheinlich, daß Du die Teile in einem Ladengeschäft günstiger bekommst.
    gibts auch günstige Anbieter im Raum Stuttgart?
    Nimm Dir einfach das Telefon/Branchenbuch und schau nach.

    Mit freundlichen Grüßen
    Benno
    Wo man nicht mit Vernunft handelt, da ist auch Eifer nichts nütze; und wer hastig läuft, der tritt fehl.
    Ein König richtet das Land auf durchs Recht; wer aber viel Steuern erhebt, richtet es zugrunde

Seite 1 von 6 123 ... LetzteLetzte

Berechtigungen

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