PIC Assembly - PIC C PIC16F877A ile DC Motor PWM Hız Kontrolü By Burak Ablay Posted on 26 Ocak 2015 6 min read 47 0 54,836 Paylaş ! Facebook Paylaş ! Twitter Paylaş ! Google+ Paylaş ! Reddit Paylaş ! Pinterest Paylaş ! Linkedin Paylaş ! Tumblr DC motor Merhaba arkadaşlar bu çalışmamız bir önceki çalışmamızın devamı niteliğinde olacaktır.Bir önceki çalışmada DC motoru ileri-geri hareket ettirmiştik.DC motor ve yön konularında bilgiler verilmişti bu sebeple bu çalışma PWM ile bilgiler verilerek başlanılacaktır. DC MOTOR HIZ KONTROL TEKNİKLERİ DC motorun hız kontrolünde DC motorun hız kontrolünde iki yöntem kullanılır. Birincisi gerilim kontrolü, ikincisi ise faz kontrolüdür. Gerilim kontrolü şekilde gösterildiği gibi mikrodenetleyiciye ihtiyaç duyulmadan ayarlı bir güç kaynağı ile yapılmaktadır. İkinci yöntemde PWM sinyal kullanılır. Bu uygulama devresinde 16F877 entegresi kullanılacaktır. Çünkü bu mikrodenetleyicinin CCP1 (RC1) ve CCP2 (RC2) bacakları PWM çıkış üretir. Üretilen PWM sinyalin periyodu sabit fakat darbe genişliği değişebilen bir kare dalga sinyaldir. Kare dalga sinyalin darbe genişliği (duty saykılı) azalırsa ortalama gerilim azalır ve motorun hızı düşer. Sinyalin darbe genişliği artarsa motorun hızı artar. Şekil 2.7’de kare dalga sinyal gösterilmiştir. pwm DEVRENİN ŞEMASI Devre Şeması DEVRENİN MALZEMELERİ PİC 16F877A 4 Mhz mikrodenetleyici X1= 4Mhz kristal C1 = C2 = 22pf R1=R2=R3=R4= 10K, R5=R6=R7=1K DC motor, buton RV1= 1K potansiyometre Q1=Q2= BD 135 Q3=Q4= BD140, Q5= BC237, DEVRENİN ASSEMBLY KODU [php] ; ====MOTOR HIZ VE YÖN KONTROL UYGULAMA PROGRAMI========= LIST P=16F877 INCLUDE "P16F877.INC" CALL PORT_KUR ;PORT_KUR alt programına git CALL ANALOG_KUR ;ANALOG_KUR alt programına git CALL PWM_KUR ;PWM_KUR alt programına git BSF ADCON0,GO ;A/D çevrimi başlat DON BTFSS PIR1,ADIF ;A/D çevrim bitti mi? GOTO DON ;Hayır geri dön MOVF ADRESH,W ;Evet sayıyı W’ye aktar MOVWF CCPR1L ;PWM darbeyi üret TUS_ARA BTFSS PORTD,0 ;DUR butonuna basılı mı? CALL DUR ;evet DUR alt programına git BTFSS PORTD,1 ;GERI butonuna basılı mı? CALL GERI ;evet GERI alt programına git BTFSS PORTD,2 ;ILERI butonuna basılı mı? CALL ILERI ;evet ILERI alt programına git GOTO TUS_ARA ;Hayır tuş ara PORT_KUR ;=================================================== BSF STATUS,5 ;Bank 1’e geç MOVLW H’01’ MOVWF TRISA ;PortA 0.bit giriş CLRF TRISB ;PortB çıkış CLRF TRISC ;PortC çıkış MOVLW H’FF’ MOVWF TRISD ;PortD giriş BCF STATUS,5 ;Bank 0’a geç RETURN ANALOG_KUR ;================================================= MOVLW B’10000001′ ;A/D çevrimi aktif MOVWF ADCON0 ;Kanal 0 aktif BSF STATUS,5 ;Bank 1’e geç MOVLW B’00001110′ ;Sayıyı sola kaydır MOVWF ADCON1 ;ADRESH’a yükle BCF STATUS,5 ;Bank 0’a geç RETURN PWM_KUR ;===================================================== CLRF TMR2 ;TMR2 temizle CLRF CCPR1L ;CCPR1L temizle BSF STATUS,5 ;Bank 1 e geç MOVLW D’255′ ;PR2 registerine 255 sayısını yükle MOVWF PR2 ;Peryod=1638.4μs BCF STATUS,5 ;Bank 0 a geç MOVLW B’00001100′ ;Pst=1:1 TMR2=ON Pre=1:16 MOVWF T2CON ;T2CON registerini kur MOVLW B’00001100′ ;CCP1XY=0 CCP1M=1100(PWM) MOVWF CCP1CON ;CCP1CON registerini kur RETURN DUR ;========================================================== BSF PORTB,0 ;PortB.0 = “1” BSF PORTB,1 ;PortB.1= “1” RETURN GERI ;=========================================================== BCF PORTB,0 ;PortB.0= “0” BSF PORTB, ;PortB.1= “1” RETURN ILERI ;=========================================================== BSF PORTB,0 ;PortB.0=”1” BCF PORTB,1 ;PortB.1=”0” RETURN END [/php] HEX Dosyasını BURADAN indirebilirsiniz.. Devrenin videosunu aşağıda bulabilirsiniz…