Picproje Elektronik Sitesi

ENDÜSTRiYEL OTOMASYON => Motorlar & Sürücüler => Konuyu başlatan: bulut_01 - 24 Eylül 2012, 01:42:47

Başlık: BLDC sürücü sonunda bitti !
Gönderen: bulut_01 - 24 Eylül 2012, 01:42:47
iyi geceler arkadaslar bitirdiğim bldc brushless sürücü devresi bitti proteus similasyon basarılı.motor hızını
1-255 ile duty ayarlanıyor devre protatip olup gelıstırılebılır ıstege baglı motora göre frekans ayarlayabılırsınız kodu ve sema asagıdadır. tek sorum bu motor normali kac herz frekansda calısır ? örnek harddisk motoru.

(http://e1209.hizliresim.com/11/s/dbpd4.jpg)

#include <18f1330.h>
#fuses INTRC_IO,NOWDT,NOMCLR
#use delay(clock=40M,oscillator=10M)
#use fast_io(a)
#use fast_io(b)

int16 duty1=0;
int16 duty2=0;
int16 duty3=0;

int16 p=200;  // duty oranı (1-255) hız ayar.
   
int1 f=0;
int1 l=0;
int1 e=0;

      void main()
{
   setup_power_pwm_pins(PWM_ODD_ON,PWM_odd_on,PWM_odd_on,PWM_odd_on);
   setup_power_pwm(PWM_CLOCK_DIV_64|PWM_FREE_RUN,1,0,4095,0,1,0);
   setup_adc_ports(NO_ANALOGS);
   setup_adc( ADC_OFF );

   set_tris_a(0b000000111);
   set_tris_b(0x00);
 

while(1)
  {
f=input(pin_a0);
l=input(pin_a1);
e=input(pin_a2); 
 
  if ((f==1)&&(l==0)&&(e==1))      //101
   {
        duty3=p*64;
      set_power_pwm4_duty(duty3);
     output_high(pin_b4);
    }
  else if ((f==1)&&(l==0)&&(e==0))
  {
  set_power_pwm4_duty(duty3*0);
  output_low(pin_b4);
  }

   if ((f==1)&&(l==0)&&(e==0))    // 100
  {
     duty3=p*64;
      set_power_pwm4_duty(duty3);
      output_high(pin_b0);
  }
   else if ((f==1)&&(l==1)&&(e==0))
  {
  set_power_pwm4_duty(duty3*0);
  }
delay_ms(1);

if ((f==1)&&(l==1)&&(e==0))       //110
    {
     duty2=p*64;
      set_power_pwm2_duty(duty2);
     } 
  else if ((f==0)&&(l==1)&&(e==0))   
    {
    set_power_pwm2_duty(duty2*0);
    output_low(pin_b0);
}

if ((f==0)&&(l==1)&&(e==0))       //010
   {
    duty2=p*64;
    set_power_pwm2_duty(duty2);
    output_high(pin_b6);
    } 
   else  if ((f==0)&&(l==1)&&(e==1))
    {
    set_power_pwm2_duty(duty2*0);
   }

if ((f==0)&&(l==1)&&(e==1))     //011
   
    {
         duty1=p*64;
      set_power_pwm0_duty(duty1);
     }
    else  if ((f==0)&&(l==0)&&(e==1))
     {
     set_power_pwm0_duty(duty1*0);
     output_low(pin_b6);
     }
     
if ((f==0)&&(l==0)&&(e==1))     //001
   {
     duty1=p*64;
      set_power_pwm0_duty(duty1);
       output_high(pin_b4);
  }
else  if ((f==1)&&(l==0)&&(e==1))
  {
  set_power_pwm0_duty(duty1=0x00);
}
  }
   }
   
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: z - 24 Eylül 2012, 01:51:50
Güç katında mosların sürümü yanlış olmuş dolayısı ile bu devre şemasını gerçekte çalıştıramazsın. (Protesusda herşey toz pembe)
Bu tip motorlar 0 ile max devir arasında herhangi bir devirde çalıştırılabilir. Dolayısı ile çalışma frekansı oldukça geniştir.
Ancak geniş devir aralığında kullanacaksan motor akımından da geribesleme gerekir.
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: marecrisium - 24 Eylül 2012, 02:35:54
Alıntı yapılan: z - 24 Eylül 2012, 01:51:50
Güç katında mosların sürümü yanlış olmuş dolayısı ile bu devre şemasını gerçekte çalıştıramazsın. (Protesusda herşey toz pembe)
Bu tip motorlar 0 ile max devir arasında herhangi bir devirde çalıştırılabilir. Dolayısı ile çalışma frekansı oldukça geniştir.
Ancak geniş devir aralığında kullanacaksan motor akımından da geribesleme gerekir.

Mosfetleri sürmedeki yanlışlık sürücü bir entegre veya transistör devresi kullanılmaması mı hocam?
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: z - 24 Eylül 2012, 05:47:49
Emetor yada source izleyici devrelerde çıkış voltajı giriş voltajından düşüktür. Şeması verilen devrede üst moslar bu yapıdadır. Bu durumda 5v dan mosların eşik voltajını çıkartırsak motor sargıları için geriye çok düşük voltaj kalır. Üstelik üst anahtarlar lineer bölgede kalırlar.  Bu nedenlerle gerçek uygulamada çalışmaz.

Mosların önüne sürücü konmalı ya da eğer motor 5v ile beslenecekse hiç olmazsa üst moslar P tipine çevrilmeli.
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: bulut_01 - 24 Eylül 2012, 08:24:29
sayın arkadaslar yukardakı sema temsilidir gercekde mos sürücüsü ve feedback devreye eklenecek vs vs ayrıntılar.
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: pisayisi - 24 Eylül 2012, 10:39:36
Kodlardan sonra asıl sürücüü devre için de epeyce kafa yormak gerekecek gibi duruyor...
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: teknikelektronikci - 24 Eylül 2012, 11:26:56
Alıntı yapılan: pisayisi - 24 Eylül 2012, 10:39:36
Kodlardan sonra asıl sürücüü devre için de epeyce kafa yormak gerekecek gibi duruyor...

Amerikayi tekrar kesfetmeye gerek yok arkadaslar cikis kati 6 IGBT veya Moslu 3 faz cikis kati bunun icin nette bolca sema olmakla birlikte cesitli üreticilerin cok güzel programlari var kafa yormaniz gereken kisim bence yazilim arkadasimizda isin mantigini gösteren fikir vermesi acisindan bir program yazmis paylasmis Tesekürler
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: bulut_01 - 24 Eylül 2012, 12:50:23
donanım olarak sahsen benı kasmaz full bıtırp uygulamaya gecdıgım gun vıdeo sunu yayınlarım asıl burda önemli nokta hızlı bır yazılım ve mcu gerisi tefferuattır.
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: rree - 24 Eylül 2012, 13:22:14
---PWM ile hızı nasıl değiştiriyorsun onun ile ilgisi nedir?. Ben daha önce  asenkron motor için bir program yazmıştım. Pwm ile motor akımını ayarlıyordum. Timer 1 ile hızı. Pwm ile hız değitirme mantığınız nedir öğrenebilirmiyim.
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: halilgalic - 24 Eylül 2012, 13:33:17
hocam ccsc de yeniyim "set_pwm1_duty(duty)" ile "set_power_pwm4_duty(duty3)" arasındaki fark ne anlayamadım teşekkürler

"
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: skara1214 - 24 Eylül 2012, 16:43:07
Alıntı yapılan: halilgalic - 24 Eylül 2012, 13:33:17
hocam ccsc de yeniyim "set_pwm1_duty(duty)" ile "set_power_pwm4_duty(duty3)" arasındaki fark ne anlayamadım teşekkürler

"
ilki  her mikroişlemcide olan ccp modulundeki pwm nin duty_cycle nin ayarlama ikincisi ise bazı pic modellerinde bulunan 6 adet olan power pwm modülünün duty sini ayarlama
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: teknikelektronikci - 25 Eylül 2012, 09:58:37
Alıntı yapılan: bulut_01 - 24 Eylül 2012, 12:50:23
donanım olarak sahsen benı kasmaz full bıtırp uygulamaya gecdıgım gun vıdeo sunu yayınlarım asıl burda önemli nokta hızlı bır yazılım ve mcu gerisi tefferuattır.

ufak BLDC Motorlar ve ufak gerilim ve akimlarla  calisacaksaniz  dediginizde haklisiniz
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: SERRO EFE - 25 Eylül 2012, 10:08:16
Elimde atıl bulunan mitsubishi power modül ile 2kw bi brushess motor için sürücü yaptım. Güç katı tasarımını çok rahatlatıyor. Sadece yazılım düşünüyorsunuz. Tavsiyem temin edebilirseniz hazır modül kullanmanız.
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: bulut_01 - 25 Eylül 2012, 22:52:02
Alıntı yapılan: teknikelektronikci - 25 Eylül 2012, 09:58:37
ufak BLDC Motorlar ve ufak gerilim ve akimlarla  calisacaksaniz  dediginizde haklisiniz
hocam güç fark etmez ister 10 wattlık olsun ıster 10kw olsun yaparız evelallah para tek mesele ne kadar köfte o kadar ekmek elımde var bıtane 200 watt cıvarında blcd brus. motor bu hastanelerın gırıs camlı fotosellı kapısının motoru bu hayvan max kac rpm yapar sunu bılmiyorum bu motorların özellıgı surucu frekansınız artıgında onla beraber ters orantı olarak tork dusuyor ne kadar frekans o kadar dusen tork kucuk frekanslarda max tork alınıyor ornek 50 ıle 200 hz arası bıtırebılırsım zaman bulup burda yayınlarım pcb tasarımı ıle
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: teknikelektronikci - 27 Eylül 2012, 10:28:58
Alıntı yapılan: bulut_01 - 25 Eylül 2012, 22:52:02
hocam güç fark etmez ister 10 wattlık olsun ıster 10kw olsun yaparız evelallah para tek mesele ne kadar köfte o kadar ekmek elımde var bıtane 200 watt cıvarında blcd brus. motor bu hastanelerın gırıs camlı fotosellı kapısının motoru bu hayvan max kac rpm yapar sunu bılmiyorum bu motorların özellıgı surucu frekansınız artıgında onla beraber ters orantı olarak tork dusuyor ne kadar frekans o kadar dusen tork kucuk frekanslarda max tork alınıyor ornek 50 ıle 200 hz arası bıtırebılırsım zaman bulup burda yayınlarım pcb tasarımı ıle

o zaman size bol sans ve basari ;)

yukaridaki yaziyi yazmamin sebebi kendim bire bir program ve pcb si ile ugrasmis olmasamda tecrübe ile sabitdir
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: salim ALTIN - 30 Eylül 2012, 09:33:45
Merhaba

Alıntı Yap
max kac rpm yapar sunu bılmiyorum bu motorların özellıgı surucu frekansınız artıgında onla beraber ters orantı olarak tork dusuyor ne kadar frekans o kadar dusen tork kucuk frekanslarda max tork alınıyor ornek 50 ıle 200 hz arası bıtırebılırsım zaman bulup burda yayınlarım pcb tasarımı ıle

Tork; hesaplanıp imal edildiği kutup sayısına göre ön görülen maksimum çalışma hızına kadar düşmez (belki %10 değişim) sabit kalır.(Ön görülen voltaj ve akım değerleri çerçevesinde)  Bu hızın üzerindede çalışılabilir işte o zaman tork düşmeye başlar.
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: bulut_01 - 30 Eylül 2012, 18:43:01
tor
Alıntı yapılan: salim ALTIN - 30 Eylül 2012, 09:33:45
Merhaba

Tork; hesaplanıp imal edildiği kutup sayısına göre ön görülen maksimum çalışma hızına kadar düşmez (belki %10 değişim) sabit kalır.(Ön görülen voltaj ve akım değerleri çerçevesinde)  Bu hızın üzerindede çalışılabilir işte o zaman tork düşmeye başlar.

ben tork hız ıle duser yada artar demedım. ben torku yazılım ıle ayarlanıyor ve frekans artıkca tork dusuyor dedım.
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: gambit1244 - 01 Ekim 2012, 01:47:39
yorumları takip ediyorum arkadaşlar esc çalışmaları nasıl gidiyor?? pcb çıkınca basalım testlerini yapayım benim motorlarla :))

tabi malzemeleri bulursak :P
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: bulut_01 - 02 Ekim 2012, 11:27:56
İYİ geceler arkadaslar pcb + yazılım bitti projeye burda full olarak yayınlıyorum. pcb ilgili küçük bir kac not yazayım sürücü transıstorlerın oldugu beyaz yuvarlak uzerıne dırek fan monte edilebilir ve sogutucuya gerek yok devre 2 bagımsız besleme ıle calısmaktadır motor beslemesı 24 AC YADA DC ıle calışır. devrenın kontrol kısmınıda cep telefon sarj devresını kullanarak beslenmekdedır smps olarakda pcb uzerınde belirtmıs olup devre yazılım ve pcb ıle fulldur. pcb eksık yada hatalarım var ise yardımlarınızla duzeltırım devre 1 saatte çizdiğim için gözden kaçmıs yerler olabilir fark ettıysenınız uyarınız.devre küçük boyutta oldugu ıcın bıraz jumper bol bulunmaktadır.  ;D

(http://b1210.hizliresim.com/12/2/dl4ly.png)

(http://b1210.hizliresim.com/12/2/dl4n0.png)

#include <18f1330.h>
#fuses INTRC_IO,NOWDT,NOMCLR
#use delay(clock=40M,oscillator=10M)
#use fast_io(a)
#use fast_io(b)

int16 duty1=0;
int16 duty2=0;
int16 duty3=0;

int16 p=40 ;  // duty oranı (1-255)
   
int1 f=0;
int1 l=0;
int1 e=0;

      void main()
{
   setup_power_pwm_pins(PWM_ODD_ON,PWM_odd_on,PWM_odd_on,PWM_odd_on);
   setup_power_pwm(PWM_CLOCK_DIV_64|PWM_FREE_RUN,1,0,4095,0,1,0);
   setup_adc_ports(NO_ANALOGS);
   setup_adc( ADC_OFF );

   set_tris_a(0b000000111);
   set_tris_b(0x00);
 

while(1)
  {
f=input(pin_a0);
l=input(pin_a1);
e=input(pin_a2); 
 
  if ((f==1)&&(l==0)&&(e==1))      //101
   {
        duty3=p*64;
      set_power_pwm4_duty(duty3);
     output_high(pin_b4);
    }
  else if ((f==1)&&(l==0)&&(e==0))
  {
  set_power_pwm4_duty(duty3*0);
  output_low(pin_b4);
  }

   if ((f==1)&&(l==0)&&(e==0))    // 100
  {
     duty3=p*64;
      set_power_pwm4_duty(duty3);
      output_high(pin_b0);
  }
   else if ((f==1)&&(l==1)&&(e==0))
  {
  set_power_pwm4_duty(duty3*0);
  }
delay_ms(1);

if ((f==1)&&(l==1)&&(e==0))       //110
    {
     duty2=p*64;
      set_power_pwm2_duty(duty2);
     } 
  else if ((f==0)&&(l==1)&&(e==0))   
    {
    set_power_pwm2_duty(duty2*0);
    output_low(pin_b0);
}

if ((f==0)&&(l==1)&&(e==0))       //010
   {
    duty2=p*64;
    set_power_pwm2_duty(duty2);
    output_high(pin_b6);
    } 
   else  if ((f==0)&&(l==1)&&(e==1))
    {
    set_power_pwm2_duty(duty2*0);
   }

if ((f==0)&&(l==1)&&(e==1))     //011
   
    {
         duty1=p*64;
      set_power_pwm0_duty(duty1);
     }
    else  if ((f==0)&&(l==0)&&(e==1))
     {
     set_power_pwm0_duty(duty1*0);
     output_low(pin_b6);
     }
     
if ((f==0)&&(l==0)&&(e==1))     //001
   {
     duty1=p*64;
      set_power_pwm0_duty(duty1);
       output_high(pin_b4);
  }
else  if ((f==1)&&(l==0)&&(e==1))
  {
  set_power_pwm0_duty(duty1=0x00);
}
  }
   }
   


mesaj birleştirme:: 02 Ekim 2012, 10:38:26

bir küçük not daha sarj agletı smps kucuk bir operasyonla 18 vdc cevrilip sisteme veriliyor.
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: pisayisi - 02 Ekim 2012, 12:26:39
Şemada sıkıntı yok pcb de otomatik modda çizildi sanırım, devre tıkır tıkır çalışır ;D :Jumper evet fazla olmuş bu ancak lehimleme sırasında offf dedirtir insana... Bu arada motor hall sensor mu kullanıyor geribesleme bilgisi olarak?
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: bulut_01 - 02 Ekim 2012, 12:33:18
aynen hall sensor var pisayısı bende bıtane 200 watt cıvarında hayvan var onu bu sürücüyle koşturacam bakalım kaç nala koşacak  ;D
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: pisayisi - 02 Ekim 2012, 14:05:14
18f1330 pwm çıkışlarına deadtime ölü zaman eklemesi yapıyor mu yoksa hall bilgisine göre çıkışlar anlık mı değişiyor, seçilen pwm frekansı nedir?  bunların hepsi performansı belirleyecek etkenler tabii...
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: bulut_01 - 02 Ekim 2012, 14:25:56
hall gelen bilgiye göre anlık pwm degişiyor frekans sabit artırdıgımız zaman tork düşüyor ters orantılı frekans ıle tork yazılımda hız ve tork bılgılerı kodda gömülü hız ve tork bilgileri pic yeniden deger atanarak yapılıyor ben demo seklinde yazdım kodu bir buton ıle yada pot ıle hız ve tork ayarlamak ıcın ufak kod parcası eklemem lazım benım amacım bendekı motor max kac rpm yapar görmek bide dead time sabit %0 dır.
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: Kazım - 02 Ekim 2012, 17:08:16
Tebrik ederim ...
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: bulut_01 - 02 Ekim 2012, 18:36:15
Alıntı yapılan: graski - 02 Ekim 2012, 17:08:16
Tebrik ederim ...
eyw arkadasım bu uygulamayı zaman buldukca geliştireceğim.
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: gambit1244 - 02 Ekim 2012, 20:17:49
Alıntı yapılan: bulut_01 - 02 Ekim 2012, 18:36:15
eyw arkadasım bu uygulamayı zaman buldukca geliştireceğim.

çok başarılı ilk fırsatta karttan basıp deneyeceğim

hocam bunun malzeme ücreti nedir acaba hiç hesapladınızmı
elinize emeğinize sağlık
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: bulut_01 - 02 Ekim 2012, 21:01:09
60 ile 70 TL civarı tutar sanırım.
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: Veli B. - 02 Ekim 2012, 21:50:41
Naçizane bir öneri;
f;l;e için ayrı ayrı değişkenler tanımlamak yerine, 1 değişken tanımlayıp
0. bit f,
1. bit l,
2. bit e,
şeklinde atayabilirsiniz ve daha sonra direkt bu değişken üzerinden select case yapabilirsiniz, bu sayede her if+else if ile 6 karşılaştırma yapmaktan kurtulursunuz ve size ciddi hız sağlar.

set_power_pwm2_duty(duty2*0); burada 0 ile çarpma işleminin özel bir sebebi var mı, direkt sıfır yazmak ile aynı sonuca çıkacak ve gereksiz bir işlem ortadan kalkacak...
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: bulut_01 - 02 Ekim 2012, 22:17:21
önerin dikkate alacagım case komutu kullanacakdım ama neden vaz gecdım bılmıyorum 0 carpamk okanalı sıfırlamak carpmak mcu yorarsa da dırek sıfrlarım
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: SERRO EFE - 02 Ekim 2012, 22:22:25
Bi öneride benden gelsin A0-B2-B3 pinleri interrupt olarak ayarlanabiliyor. Hall efectleri bu pinlere bağlayıp kesmeleri aktif edersen ve 3 pini okuyup 1 değişkene kaydedip bu kaydettiğin değerle bir tablo üzerinden pwm pozisyonlarını vermen daha güzel olur. Bu sayede main içersinde başka işler yaptırabilirsin.
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: bulut_01 - 02 Ekim 2012, 22:30:10
sayın arkadaslar temel benden geliştrip güzel devre olacagına inanıyorum önerilerizi bekliyorum pcb hakkında yorum yok begendininiz sanırım  :)
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: bulut_01 - 07 Ekim 2012, 22:09:07
iyi aksamlar bu devredeyi arkadasların önerısıne uyarak daha fazla hız kazanmak ıcın kodda degısıklık yapdım yanlız bldc motor hall sensörlerınden aldıgım (101-100-110--010-011-001) bilgileri devamlı oldugu ıcın kodda devamlı kesmeye gidiyor ve kod switch satırına dallanmıyor. devamlı kesmede kaldıgı ıcın  sorum şu şekilde kesme sürekli oldugu ıcın  switch nasıl dallandırırım ?

#include <18f1330.h>
#fuses INTRC_IO,NOWDT,NOMCLR
#use delay(clock=40M,oscillator=10M)
#use fast_io(a)
#use fast_io(b)


int8 x ;
int16 duty1=0;
int16 duty2=0;
int16 duty3=0;
int16 p=50 ;

#int_RB
void RB_kesme ()

{

x=0;
if(input(pin_a1 ))
x=x+1;

if(input(pin_B2 ))
x=x+2;

if(input(pin_B3 ))
x=x+4;

disable_interrupts (int_RB);



switch (x)
{
case 1:
     
      output_low(pin_b4);
     
      duty3=p*64;
    set_power_pwm4_duty(duty3);
     output_high(pin_b0);
    break ;
   
case 2:
     
     output_low(pin_b0);
     
     duty2=p*64;
    set_power_pwm2_duty(duty2);
    output_high(pin_b6);
       break ;
case 3:
     set_power_pwm4_duty(duty3=0x00);
     
     
     duty2=p*64;
   set_power_pwm2_duty(duty2);
   output_high(pin_b0);
      break ;
case 4:
     set_power_pwm0_duty(duty1=0x00);
     output_low(pin_b6);
     
     duty1=p*64;
    set_power_pwm0_duty(duty1);
    output_high(pin_b4);
       break ;
case 5:
     set_power_pwm0_duty(duty1=0x00);
     
     
     duty3=p*64;
    set_power_pwm4_duty(duty3);
    output_high(pin_b4);
      break ;
case 6:
    set_power_pwm2_duty(duty2=0x00);
    output_low(pin_b6);
   
    duty1=p*64;
   set_power_pwm0_duty(duty1);
   output_high(pin_b6);
     break ;
}
}


           void main()
{
   setup_power_pwm_pins(PWM_odd_on,PWM_odd_on,PWM_odd_on,PWM_odd_on);
   setup_power_pwm(PWM_CLOCK_DIV_64|PWM_FREE_RUN,1,0,4095,0,1,0);
   setup_adc_ports(NO_ANALOGS);
   setup_adc( ADC_OFF );
   setup_comparator(NC_NC_NC);
   set_tris_a(0b000000011);
   set_tris_b(0b000001100);
   OUTPUT_B(0x00);
 
  clear_interrupt(INT_EXT);
  ext_int_edge(L_TO_H);
    enable_interrupts(GLOBAL);
   enable_interrupts(int_RB);

while(TRUE)
{

}
}
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: fryrmnd - 07 Ekim 2012, 22:21:43
disable_interrupts (int_RB);  kısmını kesmeye girdiğiniz gibi yazsanız. Çalışmasını pek bilimyorum ama ilk bakışta bu geldi aklıma.
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: bulut_01 - 07 Ekim 2012, 23:03:55
Alıntı yapılan: fryrmnd - 07 Ekim 2012, 22:21:43
disable_interrupts (int_RB);  kısmını kesmeye girdiğiniz gibi yazsanız. Çalışmasını pek bilimyorum ama ilk bakışta bu geldi aklıma.
kesmeye girdiği gibi derken ne demek istedin anlamadım acık yazarsan ?
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: fryrmnd - 07 Ekim 2012, 23:08:53
şimdi yanlış anlamadıysam

void RB_kesme ()

{

x=0;
if(input(pin_a1 ))
x=x+1;

if(input(pin_B2 ))
x=x+2;

if(input(pin_B3 ))
x=x+4;

disable_interrupts (int_RB);


kısmında

void RB_kesme ()

{
 

den sonra switch case e kadar olan kısımda kesme geliyor olabilir. O yüzden kesmeleri

void RB_kesme () dan sonra pasif (disable_interrupts (int_RB);) yapabilirsin.

yani kesme rutinine hemen girdiğinde.

yanlışım da olabilir tabii.

Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: skara1214 - 07 Ekim 2012, 23:11:53
hocam bu rb kesmesi düşündüğünüz kadar hızlı cevap vermiyor.Bence bundan vazgeçin.
yok illa bunu kullanacam diyorsanız disable_interrupts(int_rb) satırını direk interrupta girdiğinizde yazın.Ama göreceksinizki kaçıracak ve performans alamayacaksınız.İnterruptın sonundada  enable yazıp interruptı bitirin
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: bulut_01 - 07 Ekim 2012, 23:21:44
evt arkadaslar bu kesme algoritması kosunda fikirlerinizi bekliyorum.

mesaj birleştirme:: 07 Ekim 2012, 23:38:26

şuanda kod calısıyor sadece pıc ılk enerjı anında kesme olusdugu ıcın ılk anda calısmıyor ben hall gelen ucları swich ıle verdıgımde proteus ile similasyonda sınyalleri pıc calısıyor motor. ılk an pıc enerjılendıgı an kesmeden cıkıp swıch dallanmaması tek sorunum kodun son hali:

#include <18f1330.h>
#fuses INTRC_IO,NOWDT,NOMCLR
#use delay(clock=40M,oscillator=10M)
#use fast_io(a)
#use fast_io(b)


int8 x ;
int16 duty1=0;
int16 duty2=0;
int16 duty3=0;
int16 p=250 ;



#int_RB
void RB_kesme ()

{


disable_interrupts (int_RB);

x=0;
if(input(pin_a1 ))
x=x+1;

if(input(pin_B2 ))
x=x+2;

if(input(pin_B3 ))
x=x+4;

enable_interrupts (int_RB);



switch (x)
{
case 1:
     
      output_low(pin_b4);
     
      duty3=p*64;
    set_power_pwm4_duty(duty3);
     output_high(pin_b0);
    break ;
   
case 2:
     
     output_low(pin_b0);
     
     duty2=p*64;
    set_power_pwm2_duty(duty2);
    output_high(pin_b6);
       break ;
case 3:
     set_power_pwm4_duty(duty3=0x00);
     
     
     duty2=p*64;
   set_power_pwm2_duty(duty2);
   output_high(pin_b0);
      break ;
case 4:
     set_power_pwm0_duty(duty1=0x00);
     output_low(pin_b6);
     
     duty1=p*64;
    set_power_pwm0_duty(duty1);
    output_high(pin_b4);
       break ;
case 5:
     set_power_pwm0_duty(duty1=0x00);
     
     
     duty3=p*64;
    set_power_pwm4_duty(duty3);
    output_high(pin_b4);
      break ;
case 6:
    set_power_pwm2_duty(duty2=0x00);
    output_low(pin_b6);
   
    duty1=p*64;
   set_power_pwm0_duty(duty1);
   output_high(pin_b6);
     break ;
}
}


           void main()
{
   
   setup_power_pwm_pins(PWM_odd_on,PWM_odd_on,PWM_odd_on,PWM_odd_on);
   setup_power_pwm(PWM_CLOCK_DIV_64|PWM_FREE_RUN,1,0,4095,0,1,0);
   setup_adc_ports(NO_ANALOGS);
   setup_adc( ADC_OFF );
   setup_comparator(NC_NC_NC);
   set_tris_a(0b000000011);
   set_tris_b(0b000001100);
   OUTPUT_B(0x00);

 
  clear_interrupt(INT_EXT);
  ext_int_edge(L_TO_H);
    enable_interrupts(GLOBAL);
   enable_interrupts(int_RB);

while(TRUE)
{

}
}
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: iyildirim - 08 Ekim 2012, 00:24:24
Case bloğunda ki kod çok verimsiz.. 

Case kısmındaki kod tamamen kaldırılıp, yerine elektriksel döngünün 6 farklı durumu için hangi PWM kanallarının aktif olması gerektiği OVDCOND registerine göre yazılıp, bir diziye atılır. Devrenize göre de OVDCONS = 0x00 olmalı..
Sensörden okunan 3 bit den oluşturulacak bir sayı bu dizinin indisi olarak kullanılıp bütün case bloğunun yerine 1-2 clock harcayarak  PWM kanalı anahtarlaması IC kesmesinde yapılır.

Bunun dışında akım , hız, hızlanma gibi olmazsa olmaz kontroller eksik.. 

Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: bulut_01 - 08 Ekim 2012, 00:30:12
Alıntı yapılan: iyildirim - 08 Ekim 2012, 00:24:24
Case bloğunda ki kod çok verimsiz.. 

Case kısmındaki kod tamamen kaldırılıp, yerine elektriksel döngünün 6 farklı durumu için hangi PWM kanallarının aktif olması gerektiği OVDCOND registerine göre yazılıp, bir diziye atılır. Devrenize göre de OVDCONS = 0x00 olmalı..
Sensörden okunan 3 bit den oluşturulacak bir sayı bu dizinin indisi olarak kullanılıp bütün case bloğunun yerine 1-2 clock harcayarak  PWM kanalı anahtarlaması IC kesmesinde yapılır.

Bunun dışında akım , hız, hızlanma gibi olmazsa olmaz kontroller eksik..

dediklerine göre bir algoritma olusturursanız ve dedıgınız register kullanarak bi kod örnediği yazarsanız bu devreye baya katkınız olur.
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: iyildirim - 08 Ekim 2012, 00:33:10
Sensörün hangi konumunda hangi PWM kanallarının aktif olacağını hazırlarsan olur..

Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: bulut_01 - 08 Ekim 2012, 00:43:08
tabi
sensör bilgisi
    101 (set_power_pwm4_duty) output_high(pin_b4)
    100 (set_power_pwm4_duty) output_high(pin_b0)
    110 (set_power_pwm2_duty) output_high(pin_b0)
    010 (set_power_pwm2_duty) output_high(pin_b6)
    011 (set_power_pwm0_duty) output_high(pin_b6)
    001 (set_power_pwm0_duty) output_high(pin_b4)

tablo yukardekı gıbıdır her 3 bitlik veriden sonra önceki pwm kanalı sıfırlanmalıdır.
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: iyildirim - 08 Ekim 2012, 01:21:49
Global değişken olarak tanımlanacaklar..

char OvrArr[8], IOBArr[8];



Main içinde ana döngüden önce ;


//101 (set_power_pwm4_duty) output_high(pin_b4)
OvrArr[0b00000101] = 0b00010000;
IOBArr[0b00000101] = 0b00010000;

//100 (set_power_pwm4_duty) output_high(pin_b0)
OvrArr[0b00000100] = 0b00010000;
IOBArr[0b00000100] = 0b00000001;

//110 (set_power_pwm2_duty) output_high(pin_b0)
OvrArr[0b00000110] = 0b00000100;
IOBArr[0b00000110] = 0b00000001;

//010 (set_power_pwm2_duty) output_high(pin_b6)
OvrArr[0b00000010] = 0b00000100;
IOBArr[0b00000010] = 0b01000000;

//011 (set_power_pwm0_duty) output_high(pin_b6)
OvrArr[0b00000011] = 0b00000001;
IOBArr[0b00000011] = 0b01000000;


//001 (set_power_pwm0_duty) output_high(pin_b4)             
OvrArr[0b00000001] = 0b00000001;
IOBArr[0b00000001] = 0b00010000;


OVDCONS = 0x00;



Kesme içinde; 
Switch(x) bloku komple silinip yerine;

OVDCOND = OvrArr[x];
PORTB = IOBArr[x];


değişikliklerini yapınca söylemiş olduğum mantık ile çalışıyor olacak..
http://ww1.microchip.com/downloads/en/DeviceDoc/39758D.pdf (http://ww1.microchip.com/downloads/en/DeviceDoc/39758D.pdf) 
datasheetin sf:140 sayfasında detaylıca anlatılıyor..

Duty' yi herhangi bir yerde ayarlayabilirsiniz. Örneğin bir pota veya okunan bir bilgiye bağlı olarak hız ayarlanabilir. 
Eğer motorun sabit bir devirde dönmesi isteniyorsa kesmeden çıkarken bir timer kurup, kesmeye tekrar girdiğinde geçen süreye göre deviri hesaplayabilir ve duty ile oynayarak ayarlayabilirsiniz.
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: bulut_01 - 08 Ekim 2012, 01:34:56
suanda pc kapattım tel giiriyorım yarın bakarım koda ilginc komut ilk defa böle komut setı gordum pekı yazılımla frekans degıstırerek tork ayarıda yapsak guzel olmazmıydı?
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: iyildirim - 08 Ekim 2012, 01:56:24
Frekans, PWM frekansı ise verimlilikle ilgili.. Modeller için satilan BLDC motorların çoğu için 8khz lik bir frekans öneriliyor.
Tork ile devir ilişkili. Motor yüklenince ister istemez devri düşecek. Tork fazla olunca devir artacak. Bu da iki kesme arasındaki süreden anlaşılır. Devir düşüyorsa PWM duty uygun bir kontrol kullanılarak arttırılır.  Değişken yük altında istenen devir sabit tutulabiliyorsa motor zaten uygun tork ile çalışıyordur.
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: bulut_01 - 08 Ekim 2012, 08:28:31
yıldırım kardesım 8 khz yuksek frekans bu frekans motor yukdeyken hıc dönecegı sanmıyorum dusuk frekans yuksek tork alınıyor örnek 20 hz max tork gıbı frekans ıle tork ters orantılı olarak calısıyor.
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: Mucit23 - 08 Ekim 2012, 08:54:26
8Khz = PWM frekansı
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: bulut_01 - 08 Ekim 2012, 11:52:20
tamam frekans deyince bende pwm frekans diyorum 8 khz bldc motor ıcın yuksek frekans bu frekans pwmde tork çok dusecek kanısındayım.
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: teknikelektronikci - 08 Ekim 2012, 14:05:47
Alıntı yapılan: bulut_01 - 08 Ekim 2012, 11:52:20
tamam frekans deyince bende pwm frekans diyorum 8 khz bldc motor ıcın yuksek frekans bu frekans pwmde tork çok dusecek kanısındayım.

siz kac ile sürüyorsunuz ?
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: bulut_01 - 08 Ekim 2012, 14:33:21
max tork ıcın 20 hz civarı.
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: SERRO EFE - 08 Ekim 2012, 14:43:41
Hocam bence bi yanlışınız var 20hz çok düşük bi rakam.. Bi frekans metre yada scop ile pwm sinyalinin frekansını ölçün. En olmadı mevcut osc ayarlarını isis te uygulayıp pinin birinden %50 pwm çıkarıp frekansı ölçün. Ben 2 kw motoru 10-14 khz aralığında sürüyorum.
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: z - 08 Ekim 2012, 14:53:34
Farklı frekanslardan bahsediliyor gibime geliyor.
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: teknikelektronikci - 08 Ekim 2012, 14:59:26
kesinlikle arkadasin bahsetigi frekans farkli frekans osilaskopda farkli ölcmüs olsa insan yazdigi programdan bilir
siz bu devrenizi programinizi gercek hayatta denedinizmi ?
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: bulut_01 - 08 Ekim 2012, 15:18:56
efe kardesım ben proteusda sımılasyona göre konusuyorum frekans artıgında pwm in motor kalkıs tork dusuyor frekans dustukde motor kalkıs tork artıyr ben similasyon sonuclarına görre konusdum
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: pisayisi - 08 Ekim 2012, 19:11:52
Yaa iş proteusa kaldıysa sıfır hertz de bile motoru döndürcek. Gerçek devreyi kurup uygulamaya başladığınızda orda oluşabilcek sıkıntıları paylaşmak daha sağlıklı olacaktır. 20 hz gibi bir pwm frekansı olmaz olsa olsa blok komutasyonda oluşan toplam faz dalgasının frekansıdır o...
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: bulut_01 - 08 Ekim 2012, 20:54:50
Alıntı yapılan: pisayisi - 08 Ekim 2012, 19:11:52
Yaa iş proteusa kaldıysa sıfır hertz de bile motoru döndürcek. Gerçek devreyi kurup uygulamaya başladığınızda orda oluşabilcek sıkıntıları paylaşmak daha sağlıklı olacaktır. 20 hz gibi bir pwm frekansı olmaz olsa olsa blok komutasyonda oluşan toplam faz dalgasının frekansıdır o...

yaw ben kendimi anlatamıyorum. diyorumkı bu bldc denen zımbırtı motor kac khzde yada hangı frekansda calısır ? bunun yanıtını bulamadımkı kodu rotasını  o yöne çeviriyim arkadas demıs yukarda 8 khz o zaman ben f1330 hayvanı PLL özgür bırakıyım 8 khz degılde katalogunda 1023 hz frekans cıkabılırdıye bılıyorum PLL aktıfken pic 40 mhz kadar dahılı osc cıkamıyor diye biliyorum 32/4 = 8 mhz calısma hızımdan max 1 khz mı neydı katalogunda öncelıkle bu motor denen zımbırtı kac herz ÇALIŞIR?
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: ErsinErce - 08 Ekim 2012, 21:10:35
efektif sinyalin frekansı, PWM frekansı ve PWM güncelleme frekansları karışmış durumda

sanırım bu (PWM)modülasyonu kendiniz oluşturuyor sanıyorsunuz

bunları tek tek ele almak lazım

(http://www.infolytica.com/en/applications/ex0145/Line%20crrent.jpg)

(http://gearmotorblog.files.wordpress.com/2010/11/sensorless_blog_back-emf_11-15-2010mbm-crop.jpg)
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: bulut_01 - 08 Ekim 2012, 21:20:40
yıldırım arkadasımızın yayınladıgı kod ben derleyemedım burda hata nerdedir sizce ?

#include <18f1330.h>
#fuses INTRC_IO,NOWDT,NOMCLR
#use delay(clock=40M,oscillator=10M)
#use fast_io(a)
#use fast_io(b)


char OvrArr[8], IOBArr[8];



#int_RB
void RB_kesme ()

{
OVDCOND = OvrArr[x];
PORTB = IOBArr[x];

}


           void main()
{
   
   setup_power_pwm_pins(PWM_odd_on,PWM_odd_on,PWM_odd_on,PWM_odd_on);
   setup_power_pwm(PWM_CLOCK_DIV_128|PWM_FREE_RUN,1,0,4095,0,1,0);
   setup_adc_ports(NO_ANALOGS);
   setup_adc( ADC_OFF );
   setup_comparator(NC_NC_NC);
   set_tris_a(0b000000011);
   set_tris_b(0b000001100);
   OUTPUT_B(0x00);

 
  clear_interrupt(INT_EXT);
  ext_int_edge(L_TO_H);
  enable_interrupts(GLOBAL);
  enable_interrupts(int_RB);

//101 (set_power_pwm4_duty) output_high(pin_b4)
OvrArr[0b00000101] = 0b00010000;
IOBArr[0b00000101] = 0b00010000;

//100 (set_power_pwm4_duty) output_high(pin_b0)
OvrArr[0b00000100] = 0b00010000;
IOBArr[0b00000100] = 0b00000001;

//110 (set_power_pwm2_duty) output_high(pin_b0)
OvrArr[0b00000110] = 0b00000100;
IOBArr[0b00000110] = 0b00000001;

//010 (set_power_pwm2_duty) output_high(pin_b6)
OvrArr[0b00000010] = 0b00000100;
IOBArr[0b00000010] = 0b01000000;

//011 (set_power_pwm0_duty) output_high(pin_b6)
OvrArr[0b00000011] = 0b00000001;
IOBArr[0b00000011] = 0b01000000;


//001 (set_power_pwm0_duty) output_high(pin_b4)             
OvrArr[0b00000001] = 0b00000001;
IOBArr[0b00000001] = 0b00010000;


OVDCONS = 0x00 ;


while(TRUE)
{

}
}
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: necati - 08 Ekim 2012, 22:41:24
Bir de bunu inceleyin
http://www.servomagazine.com/downloads.php (http://www.servomagazine.com/downloads.php)
February 2009
BLDC Driver program & PCB file

Bldc driver ı ccsc ye çevirebilirmisiniz veya derleyip hex ve cof dosyasini yukleyebilirmisiniz
Başlık: Ynt: BLDC sürücü sonunda bitti !
Gönderen: gambit1244 - 09 Ekim 2012, 00:10:54
http://www.scorpionsystem.com/catalog/motors/s30_series_v2/SII-3008-1090KV/ (http://www.scorpionsystem.com/catalog/motors/s30_series_v2/SII-3008-1090KV/)

Motor Timing   5deg
Drive Frequency   8kHz

benim bugüne dek kullandıklarımın hepsi 8khz idi
çalışmalarınızda başarılar dilerim.