avatar_elektro77

555 te yumuşak kalkış ve duruş

Başlatan elektro77, 20 Aralık 2018, 14:39:12

elektro77

Merhabalar.
555 ile yapılmış motor sürücü devresinde potansiyometre kullanmadan, motorun yumuşak kalkışını ve yumuşak yavaşlamasını nasıl sağlarım.
farklı bir anlatımla: çıkış genliğini pot kullanmadan nasıl yumuşak genişletip ve daraltabilirim.
Kulladığım sürücü şeması ektedir.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

#1
yukarıdaki devreyi analiz edebilecek biri varmı aramızda.
1-buradaki diyotların fonksiyonu nedir.!!!
2-çıkış olarak neden klasik olarak 3.pin değilde 7.pin kullanılmış.
3-potansiyometrenin orta ucu neden 3. pinde
5- 5.pin ne işe yarar. buradaki kondansatörü koymasak ne olur.
6- 6. pinde neden testere sinyal görüyorum.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

furkan41

potansiyometre yerine PFC nin bir entegresi vardı I2C protokolü ile cıkış voltajını ayarlıyordun öyle bir şey olabilir diyotların neden koyulduğunu bilmiyorum 555 in türkce bilgileri yer alıyor internette bol bol uygulamada var iç yapısına bakarak anlayabilirsin. ben 555 in kendisini hiç sevmem o yüzden pek ilgilenmiyorum.

ete

Hem soft start ile kalkacak hemde soft stop ile duracak olan bir pwm motor kontrol sistemini Pic1822 ile yaptım.
Sistemde 1 adet buton bulunmakta ve Toggle çalışmaktadır. Basınca sistem açık ise Soft Stop ile kapatıyor , sistem kapalı konumda ise Soft Start ile açıyor. Uzun zamandır bu tür işlerle uğraşıyorum. Önceden yaptığım araştırmalarda soft start süresi yaklaşık motorlarda 3 sn olarak kullanılıyor. Stop süreside aynı şekilde olacaktır.
Bu süre Duty değerine göre değişiklik arzeder. Bu nedenle akıllıca bir hesap yapıp Duty ne olursa olsun süre 3 sn dolayında olmalıdır.  Neden duty ya göre fark ettiğini ise şöyle açıklayabiliriz. Soft Start sıfırdan Duty seviyesine gelinceye kadar 0 to duty şeklinde bir döngü ile bu işi yapar. Diyelimki 5Khz lik bir PWM frekansı kullanıyoruz. Pot seviyesi bize duty oranını verecektir. Max duty oranında Duty=400 olacaktır. Bu durumda 0-400 e bir döngü kurulmalı ama Duty %50 de ise 0-200 aralığında bir döngü kurulacaktır. Döngü esnasında duty artışları arasına pause x koyularak toplam sürenin 3000 ms dolaylarında olması sağlanır.

Programın açık kodlarını vermedim. Bilerek vermedim. Bedavadan hazıra konulmasın ama en azından yapacaklara bir ilham verir diye düşündüm.
Devre şemasının versiyon farklılığı (V.8.8.Sp1) açılmama ihtimaline karşın jpg olarak da ekledim.

Ete

elektro77

hocam yine yapmışsınız yapacağınızı. devre 10 numara çalışıyor.
en azından bu devrede freakans nedir onu söylermisiniz. Belki eğer izin verirseniz böylece bunu kullanma ihtimalim olabilir.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Motor sözkonusu olunca ideal freans 5Khz dir. Buda 5Khz de çalışıyor.

Ete

elektro77

peki bu devreyi 12f675 e veya 629 a  uyarlayabilirmisiniz hocam. elimde o var da. gerçektede denemek istiyorumda.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

birde hocam devrede kristal varmı. yoksa dahili osilotörmü.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Bu devre yalnızca 12F1822 veya 12F683 ile yapılabilir donanımsal PWM si olan işlemciler bunlar. Diğerlerinde bu özellik yok.

Şemada ne görüyorsanız bütün mazleme odur ayrıca kristal vs bağlanmayacaktır. Dahili OSC ile 8Mhz de çalışmaktadır.

Ete

elektro77

#9
Alıntı yapılan: ete - 21 Aralık 2018, 15:43:56
Hem soft start ile kalkacak hemde soft stop ile duracak olan bir pwm motor kontrol sistemini Pic1822 ile yaptım.
Sistemde 1 adet buton bulunmakta ve Toggle çalışmaktadır. Basınca sistem açık ise Soft Stop ile kapatıyor , sistem kapalı konumda ise Soft Start ile açıyor. Uzun zamandır bu tür işlerle uğraşıyorum. Önceden yaptığım araştırmalarda soft start süresi yaklaşık motorlarda 3 sn olarak kullanılıyor. Stop süreside aynı şekilde olacaktır.
Bu süre Duty değerine göre değişiklik arzeder. Bu nedenle akıllıca bir hesap yapıp Duty ne olursa olsun süre 3 sn dolayında olmalıdır.  Neden duty ya göre fark ettiğini ise şöyle açıklayabiliriz. Soft Start sıfırdan Duty seviyesine gelinceye kadar 0 to duty şeklinde bir döngü ile bu işi yapar. Diyelimki 5Khz lik bir PWM frekansı kullanıyoruz. Pot seviyesi bize duty oranını verecektir. Max duty oranında Duty=400 olacaktır. Bu durumda 0-400 e bir döngü kurulmalı ama Duty %50 de ise 0-200 aralığında bir döngü kurulacaktır. Döngü esnasında duty artışları arasına pause x koyularak toplam sürenin 3000 ms dolaylarında olması sağlanır.

Programın açık kodlarını vermedim. Bilerek vermedim. Bedavadan hazıra konulmasın ama en azından yapacaklara bir ilham verir diye düşündüm.
Devre şemasının versiyon farklılığı (V.8.8.Sp1) açılmama ihtimaline karşın jpg olarak da ekledim.

Ete
Saatlerdir bu yazınızı belki 50 belki 60 kere okudum ama hala kafamda bir algoritma belirmedi.
Konuyu birazdaha açabilir misiniz hocam.
Pici çinden siparis ettim en azindan gelinceye kadar uğraşırım
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

Hocam En azından pic basicte yapılmıs soft start ve soft stop ozelligi olamadan kaynak kodlarini gondersenizde onun uzerinde calissak.
Internette hep mikroc veya farkli dillerde olanlari var.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Neden hep örnek aramak zorundasın acaba? İşin temelini öğrenerek kendince bir şeyler yapmayı düşünmüyorsun?.
Basic derslerinde HPWM 10 bit olarak nasıl oluşturulduğu detaylı anlatılmış durumda.
Bu sinyalin yaratılması için aşağıdakilerin yapılması gerekiyor.
Öncelikle PWM frekansına karar vermek gerekiyor. Buna 5Khz olarak karar veriyorum.
Açıyorum PicMulticalc programını (sitede linki vs var internette de her yerde var). Orada menüden PWM yi seçiyorum.
Osc frekansı olarak 8 Mhz seçiyorum. PWM frekansı olarak da 5Khz seçiyorum. Bana iki seçenek sunuyor. 1/4 bölme oranına göre max Duty değeri 400 , PR2=99 ve ikinci seçenek olarak da 1/16 bölme oranına göre Max.Duty değeri 100 ve PR2=24 seçenekleri. İkinci seçenekde çözünürlük 8 bit olduğu için (100 değeri nedeni ile) birinci seçeneği tercih ediyorum.
Ardından Programa geçiyorum. PR2=99 veriyorum Timer2 kullanılıyor ve buradan bölme oranını veriyorum ve TMR2 yi aktif ediyorum (T2CON = %00000101)
Şimdi PWM modülünden sinyali aktif etmem gerekiyor. Yani modüle PWM seçeneğini vermem gerek.
CCP1CON = %00001100 komutu bu işi yapıyor.
Artık sinyal aktif vaziyette ve geriye duty değerini verip sinyali çıkartmaya kalıyor.
Duty değeri ;
PWM_VER:
        X=DUTY
        CCP1CON.4=X.0
        CCP1CON.5=X.1
        CCPR1L=x>>2     
        RETURN
komutları ile veriliyor. Bu komutların anlamı şöyle; 10 bitlik olan PWM duty değerinin 8 bit olduğundan dolayı bu 10 bitin ilk 2 bitini (0 ve1 nolu bitleri) CCP1CON.4 ve CCP1CON.5 bitlerine veriliyor. Ardından kalan bilgiyi 2 bit sağa kaydırınca elimizde 8 bitlik net bir değer kalmış oluyor. Bunuda götürüp CCPR1L registerine verince duty gerekli yerlere yerleşmiş oluyor. Bütün işin espirisi bu kadar işte.
Program bu anlatılanları ana görev olarak yapıyor. Gerisinde tuş kontrolü ve soft start soft -stop işlerini yapmış oluyor. Onuda nasıl olması gerektiğini zaten anlattım.

Bütün bu HPWM mantığı Basic derslerimde anlatılmış durumda neden okumuyorsun çok merak ediyorum. Elinin altında kaynak var ama sen hazır istiyorsun öğrenmeye çalışsan daha iyi olacak bence.
Ete

elektro77

#12
Hocam uzun araştırmalar ve uğraşlardan sonra aşağıdaki gibi yaptım. fakat çalıştıramadım. nerede eksik var bi bakarmısınız?
birde soft olayından vazgeçtim. Yapmak istediğim şu:
2 adet buton ile pwm i minumum ile maximum arasında artırıp azaltmak istiyorum.birde devre ilk açılışta benim atadığım bir pwm değerinde açılmasını istiyorum. butonlar high da olduğu sürece artacak ve azalacak. bunu maxiumum ve minumum arasında 5 saniyede tamamlamasını veya yine benim değiştirebileceğim bir değerde olmasını istiyorum. fakat buton kullanımının nasıl olacağını bilemedim. yardımcı olursanız sevinirim.
bu devreyi L298 in enable girişine bağlamak ve butonla hız kontrolü yapmak için kullanmak istiyorum hocam.
DEFINE OSC 8
OSCCON=%01100001
CMCON0 = 7
ADCON0=%10000000

DEFINE ADC_BITS 10
DEFINE ADC_CLOCK 1
DEFINE ADC_SAMPLEUS 30

' ============= PWM Ayarları =========
CCP1CON = %00001100 'CCP1, PWM mode
PR2 = 249           'max Duty=1000 olacak %50 için 500 oluyor.249'
T2CON = %00000101   'TMR2 on
CCPR1L = 0

GPIO=0
TRISIO= %00000001
ANSEL = %01110001
WPU=0

HAM VAR WORD
DUTY VAR WORD
X var word

PAUSE 300

BASLA:
ADCIN 0,HAM
DUTY= (ham+1)*/250
PAUSE 100
IF X=DUTY THEN BASLA
X=DUTY
CCP1CON.4=X.0
CCP1CON.5=X.1
CCPR1L=x>>2

goto basla
end


"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

#13
Buton kontrolunu asagıdaki gibi yaptım. çalışıyor ama frekansı etkileyip etkilemediğimi bilmiyorum. Hocam bi bakarmısınız lütfen.
birde buton kontrolunde sorun var.Artırma tusuna basınca maksimumdan sonra 0 a dönüyor.
DEFINE OSC 4
OSCCON=%01100001
CMCON0 = 7
ADCON0=%10000000

DEFINE ADC_BITS 10
DEFINE ADC_CLOCK 1
DEFINE ADC_SAMPLEUS 30

' ============= PWM Ayarları =========
CCP1CON = %00001100 'CCP1, PWM mode
PR2 = 249           'max Duty=1000
T2CON = %00000101   'TMR2 on
CCPR1L = 0

GPIO=0
TRISIO= %00110001
ANSEL = %01110001
WPU=0

HAM VAR WORD
HAM=500
DUTY VAR WORD
X var word
artir var GPIO.4   'Arttırma
azalt var GPIO.5   'Azaltma 
PAUSE 300

BASLA:
IF artir=1 then
ham=ham+10
endif
IF azalt=1 then
ham=ham-10
endif
DUTY=(ham+1)*/250
PAUSE 100

IF X=DUTY THEN BASLA
X=DUTY
CCP1CON.4=X.0
CCP1CON.5=X.1
CCPR1L=x>>2
goto basla
end
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

#14
Hocam aşağıdaki yazılımı bendeki pbp nin desteklediği12f683 ile yaptım. Çalışıyor fakat buton kısmında sorunlar var.. Bi bakarmısınız. birde programda doğru olmayan yerler varsa düzeltebilirmisiniz. Devre ve yazılım ektedir.SAYGILARIMLA
@ DEVICE PIC12F683
@ DEVICE PIC12F683, FCMEN_OFF
@ DEVICE PIC12F683, IESO_OFF
@ DEVICE PIC12F683, WDT_ON
@ DEVICE PIC12F683, BOD_ON
@ DEVICE PIC12F683, PWRT_ON
@ DEVICE PIC12F683, PROTECT_OFF
@ DEVICE PIC12F683, MCLR_OFF
@ DEVICE PIC12F683, INTRC_OSC_NOCLKOUT
@ DEVICE PIC12F683, BOD_ON

DEFINE OSC 4
OSCCON=%01100001
CMCON0 = 7
ADCON0=%10000000

DEFINE ADC_BITS 10
DEFINE ADC_CLOCK 1
DEFINE ADC_SAMPLEUS 30

' ============= PWM Ayarları =========
CCP1CON = %00001100 'CCP1, PWM mode
PR2 = 249           'max Duty=1000 olacak %50 için 500 oluyor.249'
T2CON = %00000101   'TMR2 on, prescaler 1:4 'bu işlemcide PWM Timer2 ile çalışıyor.
CCPR1L = 0

GPIO=0
TRISIO= %00110001
ANSEL = %01110001
WPU=0
'--------------------------------------------------
dim var BYTE
sayi  VAR BYTE
pmw   con 1023   ' Pwm çözünürlüğü
motor_min con 0
hiz   con 1      ' Butona basarken değişim hızı, bu değer ile oynayarak hız değiştirilir
HAM   VAR WORD
DUTY  VAR WORD
X     var word
artir var GPIO.4   'Arttırma
azalt var GPIO.5   'Azaltma 
PAUSE 300
HAM=511            'başlangıctaki pwm değeri. değiştirilebilir.
'---------------------------------------------------


BASLA:

if ARTIR=1 and AZALT=0 and ham<pmw then   
sayi=sayi+1
if sayi>hiz then
ham=ham+64
sayi=0
endif
endif

if ARTIR=0 and AZALT=1 and ham>motor_min then   
sayi=sayi+1
if sayi>hiz then
ham=ham-64
sayi=0
endif
endif

DUTY=(ham+1)*/250
PAUSE 100

IF X=DUTY THEN BASLA
X=DUTY
CCP1CON.4=X.0
CCP1CON.5=X.1
CCPR1L=x>>2
goto basla
end
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

Powered by EzPortal