Bu devre, ” *Elektronik devreler*, *16f877 ile dc motor hız kontrolü devresi* dc motor hız kontrolü devresi* hobi devreleri* ” ile etikenlendi.
16f877 ile dc motor hız kontrolü devresi
Dc motorlarda hız ayarı yapabilmek için gerilimi degiştirmemiz gerekiyor.16f877 de gerilim ayarı yapabilmek için pwm denilen bir sistem var. Pwm ile oynayarak dc motorun hızını kontrol edebiliriz.
16f877 in bacakları incelendiginde 2 farklı bacagından pwm alabiliriz.Bu çıkışları bildiginiz üzre direkt olarak motora baglayamıyoruz o yüzden ya motor sürücüsü ya da transistör kullanmamız gerekiyor.(Motoru direkt baglarsak entegrenin bacagını yakarız aşırı akımdan)
İlk kullandıgımız bc237 100ma e kadar dayanan basit bir entegredir ikinci kullandıgımız entegre ise bd140 güç transistörümüzdür.Motoru asıl sürdügümüz entegre bd140 dır.Bc237 yi bd140 ı sürmek için kullanıyoruz.Transistörlerin önüne koruma amaçlı dirençlerimizi koymamız gerekiyor.
RA0 ve RA1 e baglanan butonlarla pwm görev çevrimini arttırıp azaltıyoruz.Böylelikle hız kontrolü yapıyoruz.
Her devremde söyledigim gibi gene hatırlatıyım devreyi tek kaynaktan besliyoruz.Farklı kaynaklar kullanacaksak devre degişir. 5v a düşürmek için 7805 kullanın.
16f877 ile dc motor hız kontrolü devresi
/******************************************************
16f877 ile dc motor hız kontrolü devresi programı
PIC16F877 ile PWM Modu Uygulaması-1
*******************************************************/
#include <16f877.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.
#use fast_io(a) //Port yönlendirme komutları A portu için geçerli
#use fast_io(c) //Port yönlendirme komutları C portu için geçerli
int i=5; // Tamsayı tipinde değişken tanımlanıyor
/********* ANA PROGRAM FONKSİYONU********/
void main ( )
{
setup_psp(PSP_DISABLED); // PSP birimi devre dışı
setup_timer_1(T1_DISABLED); // T1 zamanlayıcısı devre dışı
setup_adc_ports(NO_ANALOGS); // ANALOG giriş yok
setup_adc(ADC_OFF); // ADC birimi devre dışı
set_tris_a(0x03); // RA0 ve RA1 pinleri giriş
set_tris_c(0x00); // RC0, RC1 ve RC2 pini giriş
setup_ccp1(CCP_PWM); // CCP1 birimi PWM çıkışı için ayarlandı
setup_ccp2(CCP_PWM); // CCP2 birimi PWM çıkışı için ayarlandı
setup_timer_2(T2_DIV_BY_16,170,1); // Timer2 ayarları yapılıyor//
set_pwm1_duty(i); // PWM1 çıkışı görev saykılı belirleniyor
while(1) // Sonsuz döngü
{
if (input(pin_a0)) // Eğer RA0 girişine bağlı butona basılırsa
{
delay_ms(20); // Buton arkı önleme gecikmesi
while(input(pin_a0)); // Basılı butondan el çekile kadar bekle
i+=3; // i=i+3 anlamındadır.
if (i>=170) // i değeri 170’dan büyükse i değeri 170 olsun
i=170;
set_pwm1_duty(i); // PWM1 çıkışı görev saykılı belirleniyor
}
if (input(pin_a1)) // Eğer RA1 girişine bağlı butona basılırsa
{
delay_ms(20); // Buton arkı önleme gecikmesi
while(input(pin_a1)); // Basılı butondan el çekile kadar bekle
i-=3; // i=i-3 anlamındadır.
if (i<5) // i değeri 5’den küçük ise i değeri 10 olsun
i=5;
set_pwm1_duty(i); // PWM1 çıkışı görev saykılı belirleniyor
}
}
}
Yapılan Yorum (1)
Aklımdaki soruların cevabını bu konuda buldum.Yararı oldu teşekkürler.
Bir Cevap Yazın