- 12V Akku mit 280 Ah bauen         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 18

Thema: ALLEGRO Treiberstufe

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    02.02.2006
    Ort
    8160 Weiz
    Alter
    44
    Beiträge
    39

    ALLEGRO Treiberstufe

    Hallo,
    ich bin neu im Forum und einfach begeistert von dieser Seite!
    Bin ein Bascom und allgemein ein Controller-Neuling und habe folgendes Problem:

    Baue gerade eine Schrittmotorsteuerung und würde gerne den A3973 von Allegro verwenden.
    Diesen Baustein muss ich aber mit zwei 19 Bit Wörter initialisieren.
    Wie soll ich das am besten anstellen?
    Denke der Befehl SHIFTOUT ist das richtige, komme aber nicht ganz klar damit.
    Wie und wo soll ich die Wertigkeit der einzelnen Bits setzen?

    Bitte um Hilfe,
    Martin

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Ist eigentlich ganz einfach.

    Du nimmst als Träger eine Variable das Typs Long und setzt die ersten (oberen) 19 Bit mit deinen gewünschten Werten und schickst die Vsriable dann mit Shiftout Data,Clock,Variable,0 bzw. 1,19 raus.

    Wenn du lieber die untersten 19 Bit der Variable nehmen willst dann eben mit.

    Shiftout Data,Clock,Variable,2 bzw. 3,19


    Die einzelnen Bits setzt du eben mit And und 2^N oder du gibt 0 und 1 an und läst das Bitmuster der Variable einfach rotieren (1 oder 0 setzen und dann shift Left um eins)

    Oder hab ich deine Frage nicht richtig verstanden ?
    Gruß
    Ratber

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    02.02.2006
    Ort
    8160 Weiz
    Alter
    44
    Beiträge
    39
    Hallo,

    anbei ein Auszug des Datasheets.

    Word0 Bit Assignments----------Word1 Bit Assignments

    BIT FUNKTION---------------------BIT FUNKTION
    D0 Word select = 0-----------------D0 Word select = 1
    D1 Bridge 1, DAC, LSB-------------D1 Blank-time LSB
    D2 Bridge 1, DAC, bit 2------------D2 Blank-time MSB
    D3 Bridge 1, DAC, bit 3------------D3 Off-time LSB
    D4 Bridge 1, DAC, bit 4------------D4 Off-time bit 1
    D5 Bridge 1, DAC, bit 5------------D5 Off-time bit 2
    D6 Bridge 1, DAC, MSB-------------D6 Off-time bit 3
    usw.....

    Ich muss 38 Bit an den Treiber senden.
    Je nach Konfiguration wird die Wertigkeit der einzelnen Bit eingestellt.
    Der Datensatz mit den 38 Bit wird in der Folge nicht mehr verändert.
    Die 0 und 1 werden einmal festgelegt und in der Regel nicht mehr verändert.

    zB:
    Word0:
    0101000111000110011

    Word1:
    1001011000110001101
    ---------------------------------------------------------------------------------
    Dim A as long
    shiftout Portd.0, Portd.1, A, 0, 19

    Wie setze ich die einzelnen Bit?
    A = 1001011000110001101& 1001011000110001101wird wohl nicht funktionieren.

    Und was hat es mit der clock auf sich.
    Kann ich einen x-beliebigen Portpin hernehmen?

    MfG
    Martin

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    anbei ein Auszug des Datasheets.
    Yo,hab ich gestern bzw. Heut Früh schon gesehen.
    Is immer das erste was ich mit ziehe.

    Zum Rest:


    Ja wie gesagt,du kannst es dir eigentlich aufteilen wie es dir beliebt.
    Bei Serout werden ja keinerlei zusätzliche Informationen übertragen also köntest du auch eine Variable al Bitarray definieren.
    Also zb. Dim Daten(38) as Bit
    Damit hast du Daten(1) bis Daten(38) die du bequem per Schleife berbeiten kannst.
    Senden kannst3 die dann auch gut per Schleife.
    (Pseudocode)
    For x =1 to 38
    Serout blabla daten(x)
    next

    Oder du fasst das in eine mehrteilige Byte oder Word Variable ein.
    Kannst aber einfach auch nur 2 Long nehmen.

    Ein Byte ist zb. mit a = &B01001011
    Word a= &B0100101101001011
    usw.



    Und was hat es mit der clock auf sich.
    Kann ich einen x-beliebigen Portpin hernehmen?
    Ja,beim Befehl Serout gibst du für Daten und Clock beliebige Pins an.
    Die müssen nur verfügbar und nicht anderweitig belegt sein sonst nix.
    Gruß
    Ratber

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    02.02.2006
    Ort
    8160 Weiz
    Alter
    44
    Beiträge
    39
    Dankeschön für die rasche und gute Hilfe!!!

    Habe zwar schon fast das Bascom AVR Buch gelesen mir fehlen aber anscheinend noch einige "wichtige" Grundlagen.
    ZB.: Was bedeutet &B vor den Bits?

    Gibt es irgendwo gute Schulungsunterlagen bzgl. Grundkenntnisse, denn ich will wirklich nicht mit solchen grundlegenden Sachen im Forum nerven.


    Dankeschön,
    Martin

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    ZB.: Was bedeutet &B vor den Bits?
    Naja,wenn du einer Bariable einen Wert gibst dann weiß Bascom ja nicht in welchem Zahlensystem.
    Ohne angaben wird Dezimal erwartet.
    Einer Hexadeziameln stellt man ein "&" voran
    Binär kommt mit "&b"

    Also 96 = &60 = &b01100000


    Gibt es irgendwo gute Schulungsunterlagen bzgl. Grundkenntnisse, denn ich will wirklich nicht mit solchen grundlegenden Sachen im Forum nerven.
    Neben dem Handbuch von Bascom und den mitgelieferten Beispielen zb. das hier ansässsige Wiki und auch die ganze Seite von www.MCSelec.com

    Das Forum hier ist ja auch dafür da.
    Aber am meisten lernt man wenn man einfach die Befehle ausprobiert.

    Es gibt keinen universellen Stil beim Programieren.
    Jeder entwickelt da so seinen eigenen Stil und wie man es macht hängt auch von der aufgabenstellung ab.
    Man kann natürlich von den anderen lernen und abschauen.

    Ich wüßte jetzt nix konkretes im Web aber vieleicht die Anderen.
    Gruß
    Ratber

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    02.02.2006
    Ort
    8160 Weiz
    Alter
    44
    Beiträge
    39
    Es funktioniert leider noch immer nicht.
    Glaube ich hab noch immer grobe Schnitzer drin.

    Config Portb = Output

    Dim Word0 As Long
    Dim Word1 As Long

    Motor Alias Portb.2
    Strobe Alias Portb.3
    Sleepmode Alias Portb.4

    Word0 = &B0010000010000011101
    Word1 = &B1001100011000010001

    Sleepmode = 1

    Strobe = 0
    Shiftout Portb.0 , Porb.1 , Word0 , 1
    Shiftout Portb.0 , Portb.1 , Word1 , 1
    Strobe = 1

    MfG
    Martin

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Ja da fehlt noch die Zahl der Bits die du rausschieben willst.
    Ohne schiebt er die komplette Variable raus und Long hat 4 Bytes also 32 Bits.

    Damit wird der Allegro nix anfangen können.
    Gruß
    Ratber

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    02.02.2006
    Ort
    8160 Weiz
    Alter
    44
    Beiträge
    39
    Also so?

    Shiftout Portb.0 , Porb.1 , Word0 , 1, 19
    Shiftout Portb.0 , Portb.1 , Word1 , 1, 19

    Muss ich bei der pclock noch irgendetwas einstellen,
    und muss ich diesen Pin mit der Datenleitung verbinden?

    Derzeit habe ich nämlich nichts im Programm mit Verbindung Portb.1 eingestellt.


    MfG
    Martin

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Ja,fassen wir mal zusammen.

    Port B.0 und B.1 sollten als Output definiert sein sonst kommt da nicht viel raus.

    Zum Befehl:

    Shiftout Portb.0 , Portb.1 , Word0 , x, 19,Delay
    Shiftout Portb.0 , Portb.1 , Word1 , x, 19,Delay

    Für Delay trägst du dann die Verzögerung un µs ein damit du nicht zu schnell auf den Baustein taktest.
    Kannste am anfang mal mit 100 beginnen und wenn die Komunikation hinterher steht kannste den Wert dann reduzieren oder vieleicht auch weglassen.

    Für X trägste je nach Sendeweise 0-3 ein.
    Ich weiß nicht ob du das LSB zuerst schickst oder das MSB.
    Welche Flanke da den Anfang bildet weiß ich jetzt auch nicht.
    Da müßte ich ins Datenblatt vom Allefro schauen.
    Kannste aber auch einfach probieren.
    Gruß
    Ratber

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test