-         

Ergebnis 1 bis 10 von 10

Thema: pwm- steuern Problem

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    07.01.2008
    Ort
    Aachen
    Alter
    29
    Beiträge
    45

    pwm- steuern Problem

    Anzeige

    hallo leute

    habe ein problem und zwar, erzeuge ich mit dem pic16f877 an ccp1 sprich PORTC,2 eine PWm. Diese Funktioniet auch einbandfrei.
    So mein Problem ist, diese PWm ist an einem L&203 enable eingang. Mit diesem baustein kann man dann je nach pwm die motorleistung steuern,. DIe polung der motoren kann man mit dem In1 ode rIn2 beeinflußen.
    SO mein problem sit, wenn ich eine Pwm erzeuge und den motor rechtsrum laufen lassen und er soll nach 10 sek in die andere richtung fahren macht er dies nicht.
    Kann mir jemand bitte weiterhelfen, wär echt spitze.

    hier sit noch der code für eine pwm:
    wie müsste ich ihn umstellen das nach einer zeit die räder rückwärtsfahren:

    Code:
    	LIST      p=16F877	; list directive to define processor
    	#include <p16F877.inc>; processor specific variable defs
    	__CONFIG H'3F39' ; _CP_OFF & _WDT_OFF & _PWRTE_ON & _RC_OSC
    	ERRORLEVEL -302 ; unterdrücke Warnungen zur Bank-Auswahl
    	ERRORLEVEL -203
    
    
    
    
    ;**************************************************************
    ;*
    ;* Pinbelegung
    ;*    ---------------------------------- 
    ;*    PORTA: 
    ;*        1 
    ;*        2 
    ;*        3 
    ;*        4 
    ;*    PORTB: 
    ;*        1 
    ;*        2 
    ;*        3 
    ;*        4 
    ;*        5 
    ;*        6 
    ;*        7 
    ;*    PORTC: 
    ;*        1 
    ;*        2 PWM-Ausgang 
    ;*        3 
    ;*        4 
    ;*        5 
    ;*        6 
    ;*        7 
    ;*
    ;**************************************************************
    ;**********************************************************
    	Counter1  			EQU  	H'20'
    	Counter2  			EQU  	H'21'
    	Counter3  			EQU  	H'22'
    	Zahl				EQU		H'23'
    	Zahl_2				EQU		H'24'
    
    
    ; Anfangsinitialisierung
    
    Initialisierung
    
    	bsf		STATUS,RP0
    	clrf	TRISB
    	clrf	TRISD
    		
    	bcf		STATUS,RP0
    	clrf	PORTC
    	clrf	PORTB
    	bsf		PORTB,5
    	bcf		PORTB,4
    	clrf	Zahl
    	
    
    init
    ; Vorteiler 16:1 und Timer2 einschalten
        BsF    T2CON,T2CKPS1  ; Vorteiler 16:1
        bcf		T2CON,T2CKPS0
    	BSF    T2CON,TMR2ON   ; Timer2 ein
    
    ; Frequenz auf 10 kHz einstellen
        BSF    STATUS,RP0     ; Bank1
        MOVLW  D'90'
        MOVWF  PR2            ; 2,5 kHz
        BCF    STATUS,RP0     ; Bank1
    
    ; Tastverhältnis auf 50% einstellen
        MOVLW  D'62'	;62
        MOVWF  CCPR1L         ; 50% von 124
    
    ; RC2/CCP1 auf Ausgang stellen
        BSF    STATUS,RP0     ; Bank1
        BCF    TRISC, 2       ; RC2: output=0
        BCF    STATUS,RP0     ; Bank 0
    
    ; PWM MODE mit CCP1 initialisieren
        CLRF   CCP1CON        ; CCP1-Modus aus
        BSF    CCP1CON,CCP1M3 ; CCP1-Modus PWM-Mode
        BSF    CCP1CON,CCP1M2
    
       loop
    	
    
    	call	Verzögerung_1s
    	call	Verzögerung_1s
    	call	Verzögerung_1s
    	bcf		PORTB,5
    	bsf		PORTB,4
    	call	Verzögerung_1s
    	call	Verzögerung_1s
    	call	Verzögerung_1s
    	goto	loop
    
    
    
    	#include "Verz\Verz_a.inc"
    
    
    end

  2. #2
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.970

    Re: pwm- steuern Problem

    Zitat Zitat von Redals1311
    DIe polung der motoren kann man mit dem In1 ode rIn2 beeinflußen.
    Ich habe aber in deinem Code In1 und rIn2 nicht gesehen.

    MfG

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    07.01.2008
    Ort
    Aachen
    Alter
    29
    Beiträge
    45
    ja muss ja auch nciht

    habe dafür die PINS PORTB,5 und PORTB,4
    diese sind ausschlagebend für die Polung

  4. #4
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.970
    O.K.

    Sie müssen aber für die Richtungänderung seine Zustände ändern und das sehe ich in Deinem Code nicht, nur immer PORTB,5=0 und PORTB,4=1.

    MfG

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    07.01.2008
    Ort
    Aachen
    Alter
    29
    Beiträge
    45
    doch weiter unten

    hier habe ich anderen code sollte aber das gleihe bewirken =)

    weißt du du den was ich meine?
    hast du nicht noch ideeen?


    Code:
    	LIST      p=16F877	; list directive to define processor
    	#include <p16F877.inc>; processor specific variable defs
    	__CONFIG H'3F39' ; _CP_OFF & _WDT_OFF & _PWRTE_ON & _RC_OSC
    	ERRORLEVEL -302 ; unterdrücke Warnungen zur Bank-Auswahl
    	ERRORLEVEL -203
    
    
    
    
    ;**************************************************************
    ;*
    ;* Pinbelegung
    ;*    ---------------------------------- 
    ;*    PORTA: 
    ;*        1 
    ;*        2 
    ;*        3 
    ;*        4 
    ;*    PORTB: 
    ;*        1 
    ;*        2 
    ;*        3 
    ;*        4 
    ;*        5 
    ;*        6 
    ;*        7 
    ;*    PORTC: 
    ;*        1 
    ;*        2 PWM-Ausgang 
    ;*        3 
    ;*        4 
    ;*        5 
    ;*        6 
    ;*        7 
    ;*
    ;**************************************************************
    ;**********************************************************
    	Counter1  			EQU  	H'20'
    	Counter2  			EQU  	H'21'
    	Counter3  			EQU  	H'22'
    	Zahl				EQU		H'23'
    	Zahl_2				EQU		H'24'
    	ADW_1				EQU		H'25'
    
    ; Anfangsinitialisierung
    
    Initialisierung
    
    	bsf		STATUS,RP0
    	clrf	TRISB
    	clrf	TRISD
    		
    	bcf		STATUS,RP0
    	clrf	PORTC
    	clrf	PORTB
    ;	bsf		PORTB,5
    ;	bcf		PORTB,4
    
    	
    
    init
    	clrf	PORTB
    	bsf		PORTB,4
    	
    ; Vorteiler 16:1 und Timer2 einschalten
        BsF    T2CON,T2CKPS1  ; Vorteiler 16:1
        bcf		T2CON,T2CKPS0
    	BSF    T2CON,TMR2ON   ; Timer2 ein
    
    ; Frequenz auf 10 kHz einstellen
        BSF    STATUS,RP0     ; Bank1
        MOVLW  D'90'
        MOVWF  PR2            ; 2,5 kHz
        BCF    STATUS,RP0     ; Bank1
    
    ; Tastverhältnis auf 50% einstellen
        MOVLW  D'47'	;62
        MOVWF  CCPR1L         ; 50% von 124
    
    ; RC2/CCP1 auf Ausgang stellen
        BSF    STATUS,RP0     ; Bank1
        BCF    TRISC, 2       ; RC2: output=0
        BCF    STATUS,RP0     ; Bank 0
    
    ; PWM MODE mit CCP1 initialisieren
        CLRF   CCP1CON        ; CCP1-Modus aus
        BSF    CCP1CON,CCP1M3 ; CCP1-Modus PWM-Mode
        BSF    CCP1CON,CCP1M2
    
    loop
    
    	
    ; ADC-Vorbereitungen:
    ; ADC speed für (fosc/32) MHz einstellen  
    	bsf     ADCON0, 7      ; ADCS1=1
    	bcf     ADCON0, 6      ; ADCS0=0
    ; ADC einschalten
    	bsf     ADCON0, 0      ; ADON=1
    
    
      	clrf	ADW_1
    	bcf     ADCON0, 5      
    	bcf     ADCON0, 4      
    	bcf     ADCON0, 3      
        ;call	Verzögerung_1s
    	bsf     ADCON0, 2 
    
    warte_auf_ADW:    
    
    	btfsc   ADCON0, 2      
    	goto    warte_auf_ADW 
        movf    ADRESH,W      
        movwf   ADW_1
    	movlw	D'100'
    	subwf	ADW_1,W
    	btfsc	STATUS,C
    	goto	Signal
     	
    	
    
    goto	loop
    
    Signal
    
    	clrf	PORTB
    	bsf		PORTB,5
    	
    ; Vorteiler 16:1 und Timer2 einschalten
        BsF    T2CON,T2CKPS1  ; Vorteiler 16:1
        bcf		T2CON,T2CKPS0
    	BSF    T2CON,TMR2ON   ; Timer2 ein
    
    ; Frequenz auf 10 kHz einstellen
        BSF    STATUS,RP0     ; Bank1
        MOVLW  D'90'
        MOVWF  PR2            ; 2,5 kHz
        BCF    STATUS,RP0     ; Bank1
    
    ; Tastverhältnis auf 50% einstellen
        MOVLW  D'62'	;62
        MOVWF  CCPR1L         ; 50% von 124
    
    ; RC2/CCP1 auf Ausgang stellen
        BSF    STATUS,RP0     ; Bank1
        BCF    TRISC, 2       ; RC2: output=0
        BCF    STATUS,RP0     ; Bank 0
    
    ; PWM MODE mit CCP1 initialisieren
        CLRF   CCP1CON        ; CCP1-Modus aus
        BSF    CCP1CON,CCP1M3 ; CCP1-Modus PWM-Mode
        BSF    CCP1CON,CCP1M2
    
    loop2
    
    	
    ; ADC-Vorbereitungen:
    ; ADC speed für (fosc/32) MHz einstellen  
    	bsf     ADCON0, 7      ; ADCS1=1
    	bcf     ADCON0, 6      ; ADCS0=0
    ; ADC einschalten
    	bsf     ADCON0, 0      ; ADON=1
    
      	clrf	ADW_1
    	bcf     ADCON0, 5      
    	bcf     ADCON0, 4      
    	bcf     ADCON0, 3      
        ;call	Verzögerung_1s
    	bsf     ADCON0, 2 
    
    warte_auf_ADW2:    
    
    	btfsc   ADCON0, 2      
    	goto    warte_auf_ADW 
        movf    ADRESH,W      
        movwf   ADW_1
    
    	movlw	D'100'
    	subwf	ADW_1,W
    	btfsc	STATUS,C
    	goto	init
     	
    	
    
    goto	loop2
    
    
    
    	#include "Verz\Verz_a.inc"
    
    
    end

  6. #6
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.970
    Bleiben wir, bitte, bei einem Code, sonst bringt es nichts.

    Ich habe noch mal dein ersten Code genauer angeschaut. Du initialisierst zwar PORTB,5=1 und PORTB,4=0, aber später läuft das Programm in endloser Schleife "loop" mit PORTB,5=0 und PORTB,4=1. Was soll die Drehrichtung ändern?

    MfG

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    07.01.2008
    Ort
    Aachen
    Alter
    29
    Beiträge
    45
    miris gerade aufgefallen,, ich habe den falschen code hoch geladen, und zwar sollte der code bewirken das der motor zuerst rechts rum dreht sprich PORTB,5 = 1 und PORTB,4 = 0

    und nach 3 sekunden soll sich die drehrichtung ändern.
    PORTB,5 = 0 und PORTB,4 = 1
    In diesem fall sollte der Motor links herum laufen.

    Mein problem is , wie ich es realisieren kann

  8. #8
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.970
    Ganz einfach: so wie bisher mit PORTB,5=1 und PORTB,4=0 initialisieren, mit "call" 3s Verzögerung aufrufen und danach in die endlose Schleife "loop" mit PORTB,5=0 und PORTB,4=1 springen.

    MfG

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    07.01.2008
    Ort
    Aachen
    Alter
    29
    Beiträge
    45
    ja so wie ich da oben habe ....

    ich habe einen sensor der mir eine spannung ausgibt. Der µC soll die SPannung verarbeiten, wenn ein Hinderniss bzw. Gegensand zu nah am sensor ist, soll der mOtor in die gegen gesetzte richtung fahren.
    beide programme oben sind nicht funktionstüchtig

  10. #10
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.970
    Der PIC macht alles, aber nur das, was im Programm steht. Versuche, bitte, ein Programmablaufdiagramm zu erstellen. Wie man das macht, steht in "Wiki":

    http://www.roboternetz.de/wissen/ind.../PIC_Assembler

    In jedem Beitrag schreibst du etwas neues dazu, aber ich bin bisher nicht in der Lage mir dein Problem klar vorzustellen. Ich vermute nur, dass der A/D Wandler soll die Spannung vom Sensor messen und je nach Wert den Motor steuern.

    MfG

Berechtigungen

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