Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

pic16f877 l298 pwm sorunu

Başlatan delcullu, 02 Mayıs 2012, 11:30:44

delcullu

Mini sumo projemiz için bir devre tasarladık devrede 877'nin pwm bacaklarını l298 enable a ve enable b bacaklarına verdim. motorları ileri hareket etmesi için komut yazdım. Pwm çıkışını ölçtüğümde verdiğim pwm değerine göre çıkış voltajı değişiyor. Fakat motorları takıp devreyi çalıştırdığımda motorlar bir süre çalıştıktan sonra duruyor. pwm bacaklarına baktım picin 0 gösteriyor. Pic pwm sinyalini niçin keser? l298 ile picin arasına direnç bağlamam gerekir mi? l298in enable bacaklarına direk 1 verdiğimde çalışıyor fakat pwm kullanmam lazım.

void set_motor(int sol,int sag)
{
Pwm1_Set_Duty(sol);
Pwm2_Set_Duty(sag);
}
main(){
PWM1_Init(40000);
PWM2_Init(40000);
Pwm1_Start();
Pwm2_Start();
PortB=0;
while (1){
PortD.F4=1;
PortD.F5=0;
PortD.F6=0;
PortD.F7=1;
set_motor(255,255);
}
}

ibrsel

L298 in Enable bacaklarına PWM vermek yerine 1K ile pull up yap..1. motor için IN1-IN2 pinlerini, 2.Motor için IN3-IN4 pinlerini kullan.

IN1=1 ; IN2=0   (1. motor ileri )
IN1=0 ; IN2=1   ( 1. motor geri) mantığı ile motorlarını sürebilirsin.

delcullu

Alıntı yapılan: ibrsel - 02 Mayıs 2012, 13:04:49
L298 in Enable bacaklarına PWM vermek yerine 1K ile pull up yap..1. motor için IN1-IN2 pinlerini, 2.Motor için IN3-IN4 pinlerini kullan.

IN1=1 ; IN2=0   (1. motor ileri )
IN1=0 ; IN2=1   ( 1. motor geri) mantığı ile motorlarını sürebilirsin.

zaten dediğiniz şekilde bağladım. PortD.f4, PortD.f5 input 1 ve 2ye  PortD.f6 ve PortD.f7 input 3 ve 4 e bağlı onlara programdaki gibi 0 ve 1 verdim zaten bahsettiğim gibi pwm kullanmam lazım motoru yavaşlatmak hızlandırmak için. enable bacaklarına direkt 1 verince zaten çalışıyor maksat 877 nin ccp1 ve ccp2 bacaklarını enable'a bağlayarak pwm almak ama motor çalıştıktan bir süre sonra pic pwm sinyalini kesiyor.

ibrsel

Aşağıda çizgi izleyen robot ta kullandığım devrenin basitleştirilmiş hali var.Devredeki butonlar ile PWM değerini değiştiril LCD de görebilir ve motor da değişim hızını gözlemleyebilirsin.
Alıntı Yap
'********************************************************
Device = 16F877A
    Config xt_osc , wdt_off , pwrte_off , lvp_off , boden_off ,cp_off ,wrt_off
    Declare Xtal=4
'********************************************************
All_Digital  true
    TRISC=%00110000  : PORTC=0
    TRISD=%00000000  : PORTD=0 '' LCD D portuna bağlı   
''*******************************************************
Declare LCD_DTPin PORTD.4      '' LCD tanımlamaları
Declare LCD_ENPin PORTD.3
Declare LCD_RSPin PORTD.2
'''******************************************************* 
'-------------------  HPWM TANIMLAMALARI  ------------------------------------------
Declare CCP1_Pin PORTC.2   
''*******************************************************   
Dim duty As Byte
    duty=127

basla:
    HPWM 1,duty,512
    Print At 1,1,"DUTY:",Dec3 duty
    If PORTC.5=1 Then
       duty=duty+1 : DelayMS 50
       If duty>=251 Then duty=250
    EndIf
    If PORTC.4=1 Then
       duty=duty-1 : DelayMS 50
       If duty<=5 Then duty=6
    EndIf
GoTo basla




Burada da dosya hali mevcut.

http://www.dosyaupload.net/311pwm.rar


delcullu

Cevaplar için teşekkürler arkadaşlar sorunu çözdüm. Pic'e ve motor sürücüye beslemeyi aynı regüle devresinden veriyordum devre üzerine sadece pice voltaj verecek şekilde 7805 ve giriş ve çıkışına kondansatör bağladım sorun halloldu. Teşekkürler ilginiz için.