- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 8 von 8

Thema: bascom-programm für schrittmotor

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    26.07.2009
    Beiträge
    8

    bascom-programm für schrittmotor

    Anzeige

    Powerstation Test
    Moin Leute,

    ich bin noch ganz neu in diesem Forum, ich hoffe Ihr lyncht mich nicht für meine Frage:
    Mit welchem Programm kann ich mittels des RN-Control 1.4 einen Schrittmotor steuern -- mit der onboad-Endstufe versteht sich. Hab schon einige Berichte von rauchenden Endstufen gelesen... wollte den Motor nicht einfach anschließen, lieber erstmal nachfragen.
    Spezifikationen:
    2-Phasen-Schrittmotor (2 Spulen mit Mittelanzapfung, insgesamt 6 Kabel), 9.6V, 0.4A Phasenstrom, 1.8deg, ...
    Dafür gibts doch bestimmt ein Programm an dem ich mich orientieren kann, bzw. abändern kann -- man braucht ja nicht immer alles neu erfinden, vor allem wenn man nicht in uC-Programmierung zu hause ist.

    Danke für eure Hilfe

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Schau mal da, das scheint doch recht gut für dich zu passen:
    http://www.rn-wissen.de/index.php/Schrittmotoren
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Das RN-Control Board hat keine Stromregelung. Wenn die Versorgungsspannung höher ist als die Nennspannung des Motors, dann sollte man zusätzliche Widerstände in Reihe zu den Spulen haben.

    Bei den Motordaten muß man ein wenig aufpassen, ob die 0,4 A für die ganze Spule oder nur je eine Hälfte (unipolare Ansteuerung) gelten.

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    26.07.2009
    Beiträge
    8
    Hallo,
    der messbare Widerstand von Mittelanzapfung bis Ende sind ca. 23Ohm, bei 9,6V sind das ca. 0,4A pro Hälfte der Spule. Das packt der L293D nicht mehr (oder doch noch im Vollschrittmodus)? Muss also im Bascom-Programm eine Bitfolge für jeden der 4 Ports in eine Schleife gepackt werden, wie im RN-Wissen vorgeschlagen, oder gibts ne bessere Alternative, PWM???
    Gruß

  5. #5
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Mit 23 Ohm je Spulenhälfte, sind die Daten wohl für den unipolaren Betrieb. Für die ganze Spule hat man dann 46 Ohm und als Strom für die gleiche verlustleistung etwa 350 mA, bzw, für die gleiche Kraft 200 mA. MIt 200-300 mA solle der Treiber klarkommen. Das wäre dann bei einer Spannung von etwa 10-15 V. Bei mehr Spannung halt ein Widerstand dazu. Bei Weniger Spannung hat man halt weniger Strom und entsprechend weniger Drehmoment.

    Für das Programm wird wohl am einfachsten sein, wenn man sich 1 oder 2 konstante Arrays definiert, und dann damit die Postion (Schrittnummer) in die Bitfolge umrechnet. Leider sind die Leitungen auch noch auf 2 Ports verteilt. Wie man das dann Zeitlich Steuert ist etwas Geschmackssache.
    Möglich wäre ein Lösung mit Wartezeiten oder auch eine Lösung ganz im Interrupt, inclusive Beschleunigung und Bremsen.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    26.07.2009
    Beiträge
    8
    OK danke, ich werds dann erstmal mit weniger Spannung versuchen und die Temperatur des Treibers beobachten. Gibts schon irgendwo Beispielcode, wie man die Ansteuerung umsetzt?

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    26.07.2009
    Beiträge
    8

    terminal-problem

    Moin Leute,

    so, nach langer Zwangspause habe ich nun endlich alles beisammen, Schrittmotor mit Endstufe von nanotech und auch ein Steuerprogramm für den Mega32 geschrieben (mein erster Microcontroller-Programmierversuch) und es funktioniert sogar! Ich möchte per RS232 n Motoren ansprechen (erstmal nur einen zu testen).

    Es gibt da jedoch folgendes Problem:
    Es funktioniert nur mit dem Terminal-Emulator der Bascom-Entwickungsumgebung. Wenn ich z.B. das Terminal v1.9b von der RN-Control CD benutze, gehts nicht. Das Windows Hyperterminal hängt sich bei meiner Eingabe sogar auf, die Begrüßungsausgabe vom uC kommt jedoch noch an. Hier mal der Code, wie gesagt, es sind meine ersten Schritte in Sachen Programmierung:

    Code:
    '  -------------- RN-Control übliche _____________________
    Declare Function Tastenabfrage() As Byte
    
    $regfile = "m32def.dat"
    $framesize = 40
    $swstack = 40
    $hwstack = 64
    
    $crystal = 16000000                                         'Quarzfrequenz
    $baud = 9600
    Config Scl = Portc.0                                        'Ports fuer IIC-Bus
    Config Sda = Portc.1
    
    Config Adc = Single , Prescaler = Auto                      'Für Tastenabfrage und Spannungsmessung
    Config Pina.7 = Input                                       'Für Tastenabfrage
    Porta.7 = 1                                                 'Pullup Widerstand ein
    Dim Taste As Byte
    Dim Ton As Integer
    
    I2cinit
    Start Adc
    'Sound Portd.7 , 400 , 450                                   'BEEP
    'Sound Portd.7 , 400 , 250                                   'BEEP
    'Sound Portd.7 , 400 , 450                                   'BEEP
    Print
    Print "**** RN-Control  V1.4 *****"
    Print "Steuerung des Schrittmotortreibers SMC11"
    Print
    '  -------------- Ende RN-Control übliche _____________________
    
    Config Pina.1 = Output
    Config Pina.2 = Output
    Config Pina.3 = Output
    
    Declare Sub Serial0charmatch()
    Declare Sub Auseinanderklabustern()
    Declare Sub Drive(motor2drive As Integer)
    '  ---------------------------------------------------------------
    
    Config Serialin = Buffered , Size = 9 , Bytematch = 13
    Enable Interrupts
    
    '  ---------------------------------------------------------------
    Dim Drive_data As String * 7
    Dim M As String * 7 , D As String * 7 , T As String * 7
    Dim Incoming_data As String * 7
    
    Dim Motor2drive As Integer
    Dim Direction2drive As Integer
    Dim Time2drive As Long
    
    Dim Motornumbers As Integer
    Dim Direction As Integer
    Dim Maxtime As Long
    Motornumbers = 0
    Direction = 1
    Maxtime = 99999
    
    '  ---------------------------------------------------------------
    
    Do
       !NOP
       Waitms 500
    Loop
    End
    
    '  ---------------------------------------------------------------
    Sub Serial0charmatch()
    
       'Daten vom Buffer auslesen
       Input Incoming_data Noecho
       Drive_data = Incoming_data                               ' drive_data from incoming_data (RS232)
       'Print "Data recieved"
       'Print Incoming_data
       Print Drive_data
       'Print "Data send"
       Clear Serialin
          If Drive_data <> "Nononono" And Len(drive_data) = 7 Then
             Call Auseinanderklabustern
             Incoming_data = "Nononono"
          Else
             Print "WRONG INPUT, have to be 7 numbers (MotornumberDirectionTime): MDTTTTT"
          End If
    End Sub
    
     '  ---------------------------------------------------------------
    Sub Auseinanderklabustern()
    
    Local E As Integer
    
       M = Left(drive_data , 1)
       Print "Motornumber (0..99): " ; M                        ' M is motor (0..99)
    
       D = Mid(drive_data , 2 , 1)
       Print "Direction (0:forward, 1:reverse): " ; D           ' D is direction (0:forward, 1:reverse)
    
       T = Right(drive_data , 5)
       Print "Time [ms] (0..99999): " ; T                       ' T is time im ms (0..99999)
    
       Motor2drive = Val(m)
       Direction2drive = Val(d)
       Time2drive = Val(t) / 2                                  ' 500Hz
    
       If Motor2drive > Motornumbers Or Direction2drive > Direction Then
          Print "Only Motor Nr.0 installed"
          Print "For Direction choose 0 or 1"
       Else
          Call Drive(motor2drive)
       End If
    
    End Sub
    
    Dim N As Long
    Sub Drive(0)
       For N = 1 To Time2drive
          Porta.1 = 0
          Waitus 1000
          Porta.1 = 1
          Waitus 1000
          Porta.2 = Direction2drive
          Porta.3 = 1                                           'Enable modus checken
       Next N
       Print "Fertig!"
    
    End Sub
    Wo ist der Unterschied zwischen dem Bascom Terminal und dem "normalen" Hyperterminal? Warum werden meine Eingaben im normalen nicht verabeitet? Fehler der Baudrate etc. kann ich eigentlich ausschließen, hatte alles etliche male überprüft....

    Grüße,
    rob

  8. #8
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Vielleicht hat's was mit dem "Handshake" ?
    Check dich da mal durch
    http://www.rn-wissen.de/index.php/Te...rterm_Terminal
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Berechtigungen

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

LiFePO4 Speicher Test