1. Home
  2. Chat
  3. Forum
  4. Kalender
    1. Termine
    2. Karte
  5. Lexikon
    1. Letzte Änderungen
  6. Marktplatz
    1. Bewertungen
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Artikel
  • Forum
  • Termine
  • Lexikon
  • Marktplatz-Eintrag
  • Seiten
  • Erweiterte Suche
  1. PA-Forum
  2. Forum
  3. Selbstbau
  4. Selbstbau und Reparatur Technik

Motorsteuerung per DMX gesucht. Tipps?

  • treibsand
  • 20. September 2005 um 14:48
  • treibsand
    Verifiziert
    Reaktionen
    1.564
    Beiträge
    9.426
    Marktplatz Einträge
    1
    • 20. September 2005 um 14:48
    • #1

    Moin.

    Für's Puppentheater bräuchte ich jetzt eine Möglichkeit, Gleichstrom-E-Motore (12V/~6W) per DMX vom Lichtpult aus zu steuern.
    Dummerweise sowohl vorwärts, als auch Rückwärts... :?
    Und dann liesse sich das ja auch Geschwindigkeitsregulieren...

    Das ganze dann 2 mal.
    Hat irgendjemand zufälligerweise Schaltungsvorschläge oder fertige Schaltungen oder weiß, wo ich sowas finde?

    Danke.

    ...hauptberuflicher Sarkastiker.

  • Michael D
    Beiträge
    721
    • 20. September 2005 um 15:03
    • #2

    Son teil hab ich mal gebaut mit nem Transistor, der per PWM die Motorleistung regelt und ein Relais mit zwei Umschaltern für die Richtungskontrolle...
    Hier is der Asm Code, die Hardware kannste dir ja dann gerade drum rum aufbauen:

    ---
    ; DMX PWM Code
    ;
    ; Speed: 8Mhz
    ; Input: DMX 512 TTL Signal (250000 Baud)
    ; Output: PWM & Direction Signal (TTL)
    ; Target: AT90S2313
    ;
    ; Port B,0-7 -> 9x DIP (1-8)
    ; Port D,6 -> 9x DIP (0)
    ;
    ; Port D,0 (RxD) -> 75176,Y
    ; Port D,1 (TxD) -> NC
    ; Port D,2 -> NC
    ; Port D,3 -> PWM
    ; Port D,4 -> Direction
    ; Port D,5 -> DMX OK LED


    .include "2313def.inc"

    ; Definitions

    .equ PWM =3 ;PWM Output Pin
    .equ DIR =4 ;Direction Select
    .equ DMX_OK =5 ;DMX OK LED

    .def PWM_IN_H =r4
    .def PWM_IN_L =r5
    .def PWM_STAT_H =r6
    .def PWM_STAT_L =r7

    .def SREG_BACK =r8
    .def DMX_IND_H =r20
    .def DMX_IND_L =r21
    .def DMX_STATE =r22
    .def DMX_BYTE =r23 ;Wird nur im UART Interrupt verwendet
    .def INT_LOAD =r23 ;Wird nur in anderen Interrupts verwendet
    .def INT_TEMP =r24 ;Must be r24 because of an adiw Instruction
    .def TEMP =r25 ;Must be r25 because of an adiw Instruction
    ; r26,r27 (X) -> DMX Startadress
    ; r28,r29 (Y) -> Current DMX Adress
    ; r30,r31 (Y) -> Temp DMX Adress


    .org $0000
    ;Interrupts
    rjmp RESET
    reti
    reti
    reti
    reti
    reti
    reti
    rjmp RX_INT
    reti
    reti
    reti


    ;UART Interrupt
    RX_INT: in SREG_BACK,SREG ;Save SREG
    in DMX_BYTE,UDR
    sbic UCR,1 ;Break?
    rjmp NO_BREAK
    ldi YL,0x00
    ldi YH,0x00
    cbr DMX_STATE,1 ;Clr Wait_for_next_Break
    sbr DMX_STATE,2 ;Set DMX_STATEwas_in_last_Frame
    rjmp ENDE_RX_INT
    NO_BREAK: sbrc DMX_STATE,0 ;Is Wait_for_next_Break set?
    rjmp ENDE_RX_INT
    sbrs DMX_STATE,1 ;No! -> Was there a Break in the last Frame?
    rjmp DATA_BYTE_REC
    tst DMX_BYTE ;Yes! -> Is DMX_BYTE = 0?
    brbc 1,SET_WB_U_EXIT
    cbr DMX_STATE,2
    ldi DMX_IND_H,0xFF
    ldi DMX_IND_L,0xFF
    rjmp ENDE_RX_INT
    DATA_BYTE_REC: cp YH,XH
    brlo INC_Y_U_EXIT
    cp YL,XL
    brlo INC_Y_U_EXIT
    mov ZL,XL
    mov ZH,XH
    rjmp TEST_X_PLUS_0
    TEST_X_PLUS_0: cp YL,ZL
    brne TEST_X_PLUS_1
    cp YH,ZH
    brne TEST_X_PLUS_1
    mov r0,DMX_BYTE
    rjmp INC_Y_U_EXIT
    TEST_X_PLUS_1: adiw r30,0x01
    cp YL,ZL
    brne TEST_X_PLUS_2
    cp YH,ZH
    brne TEST_X_PLUS_2
    mov r1,DMX_BYTE
    rjmp INC_Y_U_EXIT
    TEST_X_PLUS_2: adiw r30,0x01
    cp YL,ZL
    brne SET_WB_U_EXIT
    cp YH,ZH
    brne SET_WB_U_EXIT
    mov r2,DMX_BYTE
    rjmp INC_Y_U_EXIT
    INC_Y_U_EXIT: adiw r28,0x01
    rjmp ENDE_RX_INT
    SET_WB_U_EXIT: sbr DMX_STATE,1 ;Set WAIT_FOR_NEXT_BREAK Bit and Exit
    ENDE_RX_INT: out SREG,SREG_BACK
    reti


    ;Main Routines:
    READ_DMX_START: clr XH
    in XL,PINB ;Read DMX Startadress
    com XL
    lsl XL
    rol XH
    in TEMP,PIND
    com TEMP
    andi TEMP,0x40
    lsr TEMP
    lsr TEMP
    lsr TEMP
    lsr TEMP
    lsr TEMP
    lsr TEMP
    or XL,TEMP
    ret


    RESET: ldi TEMP,low(RAMEND) ;Set SP to last Byte in RAM
    out SPL,TEMP

    ;Init Watchdog Timer
    ldi TEMP,0x0D ;Enable Watchdog Timer with 0.49s Timeout
    out WDTCR,TEMP

    ;Set TRI-States
    ldi TEMP,0x00
    out DDRB,TEMP
    ldi TEMP,0xFF
    out PORTB,TEMP
    ldi TEMP,0x38
    out DDRD,TEMP
    ldi TEMP,0x41
    out PORTD,TEMP

    ;Init Variables
    ldi TEMP,0x00 ;Set Channel Registers and Current DMX Adress to 0x00
    mov r0,TEMP
    mov r1,TEMP
    mov r2,TEMP

    ;Init 16 Bit Timer
    ldi TEMP,0x00
    out TCNT1H,TEMP ;Set Timer Count Registers (High Register first!)
    ldi TEMP,0x00
    out TCNT1L,TEMP
    ldi TEMP,0x01
    out TCCR1B,TEMP ;Enable 16 Bit Timer with full OSC Speed

    ;Init UART for DMX Data Receive
    clr XL ;Clear DMX Start Register
    clr XH
    ldi DMX_STATE,0x01 ;Init DMX Status Register
    out UBRR,DMX_STATE ;Load UART Bautrate Register with 0x01
    sbi UCR,7 ;Enable RX Interrupt
    sbi UCR,2 ;Enable 9-Bit Mode
    sbi UCR,4 ;Enable RX-UART

    sei ;Enable Globale Interrupt


    MAIN: rcall READ_DMX_START
    wdr ;Watchdog Reset


    MAIN_PROC: ;Process Data
    mov TEMP,r0
    cpi TEMP,0x80
    brsh MAIN_PROC_DIR2
    cbi PORTD,DIR
    rjmp MAIN_PROC_END
    MAIN_PROC_DIR2: sbi PORTD,DIR
    nop
    MAIN_PROC_END: mov PWM_IN_H,r1 ;-> 12 Bit Resolution
    mov PWM_IN_L,r2
    lsr PWM_IN_H
    ror PWM_IN_L
    lsr PWM_IN_H
    ror PWM_IN_L
    lsr PWM_IN_H
    ror PWM_IN_L
    lsr PWM_IN_H
    ror PWM_IN_L


    MAIN_PWM: ;PWM
    ldi TEMP,0x0F ;12 Bit PWM Only
    and PWM_IN_H,TEMP
    in PWM_STAT_L,TCNT1L ;Get Timer, Low byte first at read
    in PWM_STAT_H,TCNT1H
    and PWM_STAT_H,TEMP
    cp PWM_STAT_L,PWM_IN_L
    cpc PWM_STAT_H,PWM_IN_H
    brlo MAIN_PWM_OFF
    cbi PORTD,PWM
    rjmp MAIN_PWM_END
    MAIN_PWM_OFF: sbi PORTD,PWM
    nop ;Avoid Jitter
    MAIN_PWM_END:


    MAIN_DMX_IND: ;DMX Indicator Count check
    clr TEMP
    cp DMX_IND_L,TEMP
    cpc DMX_IND_H,TEMP
    breq MAIN_DMX_L_OFF
    subi DMX_IND_L,0x01
    sbci DMX_IND_H,0x00
    sbi PORTD,DMX_OK
    rjmp MAIN_DMX_END
    MAIN_DMX_L_OFF: cbi PORTD,DMX_OK
    clr r0
    clr r1
    clr r2
    MAIN_DMX_END:


    rjmp MAIN


    .exit

    http://www.digital-enlightenment.de/
    USB DMX Interface, Mediensteuerung, Demultiplexer, Multiplexer, Dimmer, Relaisboard, Art-Net

  • TomyN
    Profi
    Reaktionen
    1.755
    Beiträge
    6.778
    Termine
    26
    Marktplatz Einträge
    2
    • 20. September 2005 um 17:59
    • #3

    :shock:

    Nun ja...
    Ich würde einfach 0..10V nehmen, und dann basteln. Zwei Kanäle, einer für die Motoransteuerung (die 0..10V noch etwas verstärken, Sichwort Emitterfolger), und einen für die Umschaltung eines Relais, mit dem man den Motor umpolen kann. Wenn man's gut machen will, dann baut man noch eine Sicherheitsschaltung ein, damit man nur die Polarität wechselt wenn der Motor steht (dann lebt das Relais deutlich länger).

    Tomy

    SIM II Operator und Dante Level I-II-III (Dante sogar dreimal :)
    Jugendschwimmabzeichen, Rettungsschwimmabzeichen in Bronze
    Meine kommerziellen Softwareprodukte SATlive und LevelCheck

  • Henne
    Beiträge
    1.580
    • 20. September 2005 um 18:44
    • #4

    Wieso :shock: ?

    Der Code ist nicht wahnsinnig toll kommentiert (wozu auch?).
    Den Kram in einer IDE mit hübschen Syntax Highlighting und Tabulatoren und Einiges wird klar :D

    Äquivalent dazu sind meine Tuts:
    http://www.hoelscher-hi.de/hendrik/light/asm.shtm

    Assembler DMX-Empfang brauchst Du um DMX zu empfangen (Wer hätte das gedacht :oops: )
    Da dran die PWM-Sektion drangebappt und nach Wünschen modifiziert und man kommt auch zum Ziel.
    Das Target-Board ist ja auch dort beschrieben...

    Ich würde glaube ich dafür den Transceiver nehmen, den LED-Code (macht PWM) draufklatschen, jumpern bis es passt und glücklich sein.

    Die Richtungsumkehr hatte ich mal für ein Lasersystem implementiert. Diesen Code müsste ich nur mal irgendwann auf den neuen Transceiver portieren...

    Viele Grüße, Hendrik

    Henne's Sites

  • StefanKrupop
    Profi
    Beiträge
    587
    • 20. September 2005 um 18:59
    • #5

    Ansonsten hat Henne's Board auch genug Prozessorpower, um die Firmware in C zu schreiben. Die ersten zwei Sachen hab ich noch in Assembler geschrieben, dann hab ich AVRGCC ausprobiert. Selbst wenn der Code nicht optimiert ist, gab's bisher keine Timing-Probleme.

    DMXControl - Meine Freeware-DMX-Software

  • Henne
    Beiträge
    1.580
    • 20. September 2005 um 19:27
    • #6

    Aber das is uncool :D

    - womit die ewige Diskussion wieder gestartet wäre -

    Henne's Sites

  • Sven M
    Profi
    Beiträge
    2.530
    • 20. September 2005 um 19:44
    • #7

    Jaa...
    tolle diskussion die ich sehr liebe:-)
    Ich nutze Codevision für die AVRs..
    DMX Empfang und das Erzeugen von PWM per timerinterrupt? kein Thema.
    Ich habe neulich mal ein paar sachen Probiert die ich noch aus dem Studium wusste, z.B. ob man Schleifen lieber aufwärts oder abwärts zählen lässt - kein Unterschied nach dem C Compiler.
    Der Assembleroutput ist so gut, da fällt mir keine Verbesserung mehr ein. Und mal ehrlichgesagt, DMX Empfang ist doch eigentlich ne recht einfache Übung.

    Was sagt der Raver auf der Techno-Party, wenn sein Extasy aufhört zu wirken?

    "Was ist denn das für eine sch... Mucke hier?"

  • manuela
    Beiträge
    9.103
    • 20. September 2005 um 19:51
    • #8

    Gleichstrommotorsteuerung in 2 Drehrichtungen passiert zwischen 2 Gegentaktendstufen, also die klassische Brückenschaltung. Dabei wird der N links zusammen mit dem P rechts angesteuert, andersrum der N rechts zusammen mit dem P links. Das ergibt eine 100% umkehrfähige Ansteuerung OHNE dieses Relais.
    Parallel zu den Endstufen ist Freilaufdiode zu setzen.
    Die Ansteurung erfolgt wahlweise über Eingang A ( vorwärts ) oder Eingang B ( rückwärts ) mit einer PWM die das Tempo festlegt.

    am Besten Darlingtons dafür nehmen.

    viel Spaß :)

    die Feuerzeuge der Gäste sind kleine Sterne die am Himmel unseres Alltags weiterleuchten.

  • Michael D
    Beiträge
    721
    • 20. September 2005 um 19:56
    • #9
    Zitat

    Ich würde einfach 0..10V nehmen, und dann basteln.

    Wenn man ein DMX Signal empfangen will braucht man wohl oder übel einen Controller. Wenn der daraus 0..10V erzeugen soll wird er das vermutlich per PWM machen. Es macht wenig Sinn dieses PWM dann in eine Gleichspannung umzuwandeln und mit einem verlustbehafteten Verstärker dem Motor zuzuführen.

    Zitat

    Der Code ist nicht wahnsinnig toll kommentiert (wozu auch?).

    Vor allem ging hier im Forum die Formatierung (Tabulatoren) kaputt.
    Die unterschiedlichen Teile sind markiert. Der Code ist ja auch nicht sonderlich kompliziert. Ich dachte nur, weil ich mal genau so ein gefordertes Teil gebaut habe, ich schreib mal den Code hier rein und den Rest kann man sich ja dann flott zusammen bauen. Ich hab dafür den Code jetzt aber nicht extra aufbereitet...

    http://www.digital-enlightenment.de/
    USB DMX Interface, Mediensteuerung, Demultiplexer, Multiplexer, Dimmer, Relaisboard, Art-Net

  • Michael D
    Beiträge
    721
    • 20. September 2005 um 20:03
    • #10
    Zitat

    Das ergibt eine 100% umkehrfähige Ansteuerung OHNE dieses Relais.

    Klar geht das auch ohne Relais, aber das is viel mehr Aufwand... Vier Transis statt einem (die möglicherweise auch noch gekühlt werden wollen) und für jeden Transi (vor allem die PNP) eine Ansteuerung.
    Wenn der Motor nicht laufend umgepolt wird und es ein Einzelstück werden soll (so hört es sich hier ja an) würd ich mir überlegen, ob ich diesen Aufwand treiben will...

    http://www.digital-enlightenment.de/
    USB DMX Interface, Mediensteuerung, Demultiplexer, Multiplexer, Dimmer, Relaisboard, Art-Net

  • Henne
    Beiträge
    1.580
    • 20. September 2005 um 20:57
    • #11

    Michael hat in allen Punkten Recht.

    Sven im Übrigen auch - Alles ist einfach wenn man's kann: Differentiation, Integration, Matritzenrechnung ist ansich auch billig - aber erzähl das mal einem 10.Klässler. Wieso sollte das hier anders sein?

    Grüße, Hendrik

    Ansich bin ich wie Manu auch Fan von Brücken - is aber hier Overkill...[/code]

    Henne's Sites

  • Sven M
    Profi
    Beiträge
    2.530
    • 20. September 2005 um 21:21
    • #12

    J, wenn man das Signal sowieso empfangen hat kann man damit auch schnell einen Motor ansteuern. Da hängt der Aufwand nur von der Leistung des Motors ab:-)

    Was sagt der Raver auf der Techno-Party, wenn sein Extasy aufhört zu wirken?

    "Was ist denn das für eine sch... Mucke hier?"

  • manuela
    Beiträge
    9.103
    • 21. September 2005 um 06:48
    • #13
    Zitat von "Michael D"

    Klar geht das auch ohne Relais, aber das is viel mehr Aufwand... Vier Transis statt einem (die möglicherweise auch noch gekühlt werden wollen) und für jeden Transi (vor allem die PNP) eine Ansteuerung.
    Wenn der Motor nicht laufend umgepolt wird und es ein Einzelstück werden soll (so hört es sich hier ja an) würd ich mir überlegen, ob ich diesen Aufwand treiben will...

    ob man die kühlen muß ist fraglich weil PWM. Und das mit der Ansteuerung stimmt so nicht, das bekommt nur 2 Steuerleitungen, wie das Relais auch.

    die Feuerzeuge der Gäste sind kleine Sterne die am Himmel unseres Alltags weiterleuchten.

  • Henne
    Beiträge
    1.580
    • 21. September 2005 um 08:36
    • #14

    ...es gibt auch fertige H-Brücken ICs...

    Henne's Sites

  • manuela
    Beiträge
    9.103
    • 21. September 2005 um 08:41
    • #15

    wir hatten das Thema hier als ich die Druckmaschine repariert habe :P
    Im Datenblatt dieses ICs ist der Schaltplan für die dafür verwendbare Brücke enthalten.

    die Feuerzeuge der Gäste sind kleine Sterne die am Himmel unseres Alltags weiterleuchten.

  • Henne
    Beiträge
    1.580
    • 21. September 2005 um 09:05
    • #16

    Jep.

    Und, Treibsand, wie hast Du Dich entschieden? :D

    Henne's Sites

  • treibsand
    Verifiziert
    Reaktionen
    1.564
    Beiträge
    9.426
    Marktplatz Einträge
    1
    • 21. September 2005 um 10:01
    • #17

    Moin, moin liebe Mitstreiter... :D

    Ich hab mir gestern Abend nochmals gründlich die vorhandene Technik angeschaut und folgendes entschieden:

      1. Ich bin nicht (mehr) tief genug in der Materie, um irgendwelche Micro-, Macro oder sonstige Controller zu programmieren und die Schaltungen darauf abzustimmen.
      2. Vorhanden sind einige MA Demuxer mit noch einigen freien Kanälen, womit eine externe Schaltung zwecks PWM fast überflüssig wäre. Als FoH-Mann hat man halt was gegen irgendwelche "Aussetzter", so kurz sie auch sein mögen - auch, wenn man sie garnicht hört... :wink:
      3. Die Theaterleitung/Regie hat sich nun doch noch nicht ganz entschieden, ob die Steuerung vom Pultplatz oder doch durch den/die Schau-&Puppenspieler erfolgen soll.
      Damit ist das Projekt so erstmal auf Eis gelegt. :evil:

    Trotzdem erstmal Danke, vielleicht muss ich ja doch nochmal in meinen Bastelkisten kramen und die Motorrelais ausgraben.
    Da tatsächlich immer nur einer der Puppenlifte fahren soll, bräuchte ich nicht unbedingt mehrere Umschaltkanäle und der Aufwand mit ein wenig diskreter Elektrik/-tronik doch bedeutsam geringer. :wink:
    Aber persönlich würde ich eine seperate Einkanallösung bevorzugen.

    Danke,
    Peter

    ...hauptberuflicher Sarkastiker.

Anstehende Termine

  • PA-Forum Stammtisch LeatCon

    Dienstag, 6. Oktober 2026, 13:00 – 14:00
  • PA-Forum Stammtisch LeatCon

    Mittwoch, 7. Oktober 2026, 13:00 – 14:00
  • PA-Forum Stammtisch LeatCon

    Donnerstag, 8. Oktober 2026, 13:00 – 14:00
  • Competent Person for Event Rigging according to IGVW SQQ 2 | Level 1 | Munich (English)

    Dienstag, 13. Oktober 2026 – Freitag, 23. Oktober 2026
  • Combined seminar for experts in lifting gear and lifting beam systems (AnschlägerPlus)

    Dienstag, 13. Oktober 2026 – Donnerstag, 15. Oktober 2026

Letzte Themen

  1. Leatcon 2026 Forumstreffen

    skyper
    3. Oktober 2026 um 10:00
  2. Eminence Kappa 15 (LF) Bauvorschläge für Bassreflex oder Horn

    soundralf
    2. Oktober 2026 um 12:44
  3. Kleine PA und nur Fragen!!!

    Alex Bundschuh
    1. Oktober 2026 um 18:47
  4. Welche DI-Box/Line-Übertrager für Laptop/Kopfhörerausgang?

    wusel123
    30. September 2026 um 12:29
  5. Ersatzteilversorgung Lautsprecher (speziell Seeburg A3 MKII)

    Hanseat
    29. September 2026 um 18:25
  6. Neues Online-Simulationstool für Treiber / Gehäuse / Leistung / Filter

    Blancblue
    29. September 2026 um 13:16
  7. Subwoofer 80cm x 40cm x 80cm

    zegi
    28. September 2026 um 17:06
  8. Frontschaum in "Würfeloptik"

    Blancblue
    28. September 2026 um 15:41
  9. ADJ Entour Venue Hazer: Frage zum Heizelement

    skippa
    27. September 2026 um 10:16
  10. EU Cyber Resilience Act (CRA)

    alexanderjoseph
    26. September 2026 um 20:14
  1. Datenschutzerklärung
  2. Impressum
Community-Software: WoltLab Suite™