ccp1 ve ccp2 ile pwm ile dc motor sağ-sol ve devir kontrol

Başlatan turkbowling, 07 Şubat 2008, 18:48:51

turkbowling

protonda pic16f877 ile
bir dc motoru h-bridge ile sağa sola devir ayarlı olarak döndürmek istiyorum
ccp1 ve ccp2 çıkışlarını kullanmak istiyorum
şimdi portd.0 a 1 verdiğimde adin0 daki analog değere göre ccp1 çıkışı aktif olacak ve motor
h-biridge köprüsünden motoru sola döndürecek
portd.1 e 1 verdiğimde ccp1 sıfırlanacak ccp2 aktif olacak gene adin0 analog değerine göre
motoru sağa döndürecek...
yapmak istediğim bu;

motor devrini bu şekilde kontrol edebiliyorum fakat kodu geliştirip denemelerim başarısız oluyor

nerde hata yapıyorum yardımcı olursanız sevinirim
teşekkürler


'_________________________çalışan kod________________________________________________
DEVICE 16F877
XTAL=4

Declare ADIN_RES 8          ' Çözünürlük 8 Bit
Declare ADIN_TAD FRC  
Declare ADIN_STIME 50       ' Örnekleme zamanı 50us
CCP1_PIN = PORTC.2          ' Donanımsal PWM 1.Kanalı PORTC.2
CCP2_PIN = PORTC.1         ' Donanımsal PWM 2.Kanalı PORTC.1

Dim dutu As Word

TRISA = %00000001          ' PORTA.0(Analog) giriş olarak ayarlandı '
TRISB = %00000000
TRISC = %00000000                  ' PORTC Çıkış Yapıldı
TRISD = %00000001

PORTC = 0                  'Portlar
PORTD = 0                  'temizlendi

ADCON1 = %00000000         ' PORTA.0 analog girişi kuruldu

'///////////////////////////////////////////////////////////////////
basla:
portd.2=1  'pic devrede
dutu = ADIn 0          

HPWM 1, dutu, 255

goto basla
       



'///////////////////////////////////////////////////////////////////

'________________________hatalı kod________________________________________________
DEVICE 16F877
XTAL=4

Declare ADIN_RES 8          ' Çözünürlük 8 Bit
Declare ADIN_TAD FRC

Maxim

bu kodu bi incele istersen


Device 16F877 
XTAL=4 

Declare ADIN_RES 8 ' Çözünürlük 8 Bit 
Declare ADIN_TAD FRC 
Declare ADIN_STIME 50 ' Örnekleme zamanı 50us 
CCP1_PIN = PORTC.2 ' Donanımsal PWM 1.Kanalı PORTC.2 
CCP2_PIN = PORTC.1 ' Donanımsal PWM 2.Kanalı PORTC.1  

TRISA = %00000001 ' PORTA.0(Analog) giriş olarak ayarlandı ' 
TRISB = %00000000 
TRISC = %00000000 ' PORTC Çıkış Yapıldı 
TRISD = %00000011 

PORTC = 0 'Portlar 
PORTD = 0 'temizlendi 

ADCON1 = %00000000 ' PORTA.0 analog girişi kuruldu 

Dim dutu As Byte
Dim dutu1 As Byte

'/////////////////////////////////////////////////////////////////// 
basla:

If PORTD.0 = 1 Then
ADIn 0 ,dutu   
HPWM 1, dutu, 255
HPWM 2,    0, 255
Else
dutu = 0 
EndIf

If PORTD.1 = 1 Then
ADIn 0 ,dutu1
HPWM 2, dutu1, 255
HPWM 1,     0, 255
Else
dutu1 = 0
EndIf

HPWM 1, dutu, 255
HPWM 2, dutu1, 255

GoTo basla

turkbowling

teşekkürler kod çalıştı  yanlız bir problemim daha var bilginiz varsa paylaşırsanız sevinirim..

pwm ile devir kontrollerinde motorun güç kaybetmemesi grekiyor diye biliyorum ama motor devrini düşürdüğümde motorun gücüde düşüyor

benzer bir problem yaşadınızmı teşekkürler...

http://www.govana.net/sitelerim/projelerim/index.php   burdaki projem için grekli  
teşekkürler

mihri

Motor devrinin sabit kalarak değişken torkları vermesini istiyorsan geri beslemeli bir sistem tasarlamalısın. PID yada FUZZY algritması ile düşük devirde dahi istediğin torku alırsın.
"Eppur si muove!"

turkbowling

teşekkür ederim bir araştırayım......
iyi çalışmalar