Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: vardal57 - 16 Eylül 2018, 15:35:49

Başlık: 18f2431 Açı kontrolü
Gönderen: vardal57 - 16 Eylül 2018, 15:35:49
Arkadaşlar merhaba 18f2431 ile blcd kontrolü yapmak istiyorum kodum aşağıdaki gibi fakat 3 faz arası açıyı nasıl ayarlayabılırım hangi register bunu ayarlamamı sağlıyor ?

#include <18F2431.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
#device adc=10;
 
//#define OSC_8MHZ
//#use delay(clock=20000000)
 
  #fuses H4,NOWDT,NOMCLR //Frequency = Fosc / (4 * (period+1) *prescale)
#use delay(clock=40000000)
 
 
 
 /*
 
unsigned int16 sin_tabletbir[26]={10, 28, 45, 62, 78, 94, 107, 120, 131, 140, 147, 153, 156, 157, 156, 153, 147, 140, 131, 120, 107, 94, 78, 62, 45, 28};
 
unsigned int16 sin_tabletiki[26]={10, 28, 45, 62, 78, 94, 107, 120, 131, 140, 147, 153, 156, 157, 156, 153, 147, 140, 131, 120, 107, 94, 78, 62, 45, 28};
 
unsigned int16 sin_tabletuc[26]={10, 28, 45, 62, 78, 94, 107, 120, 131, 140, 147, 153, 156, 157, 156, 153, 147, 140, 131, 120, 107, 94, 78, 62, 45, 28};

 */
 
int8 bir = 0;
int8 iki = 0;
int8 uc  = 0;
int16 zaman = 0;

void main ()
{
 
 
 
 
 
//setup_power_pwm_pins(PWM_FREE_RUN ,PWM_OFF,PWM_OFF,PWM_OFF);
//setup_power_pwm(PWM_CLOCK_DIV_128|PWM_FREE_RUN,1,0,200,0,1,0);
//setup_power_pwm_pins(PWM_OFF,PWM_OFF,PWM_COMPLEMENTARY,PWM_OFF);

 
 setup_power_pwm_pins(PWM_COMPLEMENTARY,PWM_COMPLEMENTARY,PWM_COMPLEMENTARY);
 

setup_power_pwm(PWM_CLOCK_DIV_128|PWM_FREE_RUN| PWM_DEAD_CLOCK_DIV_16,1,0,40,0,1,60);
 
 

 
  //set_power_pwm0_duty(159);   //8 başla 159 cihazda 26 tablo var
 
 
//setup_timer_0(T0_INTERNAL  |T0_DIV_1);
//enable_interrupts(INT_TIMER0); // int_timer0 kesmesini aktif yaparl

 setup_timer_1(T1_INTERNAL  |T1_DIV_BY_1);
 enable_interrupts(INT_TIMER1); // int_timer0 kesmesini aktif yaparl
enable_interrupts(GLOBAL); // Aktif edilen kesmelere izin ver
 
set_tris_a(0b00000000); // RA0 ucu giriş olarak ayarlandı.
set_tris_b(0b00000000); // RB0 portu tümüyle çıkış olarak ayarlandı.
set_tris_c(0b00000000); // RB0 portu tümüyle çıkış olarak ayarlandı.
 
 
 
 
 
output_b(0x00);
output_c(0x00);
 
delay_ms(100);





basla:
 
 
 
 
 
goto basla;
}

 

#INT_TIMER1
void timer0_kesme () // Kesme fonksiyonu ismi
{
set_timer1(60000);//64820
 set_power_pwm0_duty(85);   //3100
set_power_pwm2_duty(85);   //3100
set_power_pwm4_duty(85);   //3100

 /*
 set_power_pwm0_duty(sin_tabletbir[bir]);   //3100
  set_power_pwm2_duty(sin_tabletiki[iki]);   //3100
 set_power_pwm4_duty(sin_tabletuc[uc]);   //3100
 
 bir++;
if(bir>25)
{
bir=0;
}
 
iki++;
if(iki>25)
{
iki=0;
}

uc++;
if(uc>25)
{
uc=0;
}
 
 */

}
 
Başlık: Ynt: 18f2431 Açı kontrolü
Gönderen: apsis - 16 Eylül 2018, 20:15:02
Motorun sensörlü mü? sensörsüz mü?
Yazılımla kafana göre açı ayarlayamazsın. Datasheet 197.sayfaya bakarsan sensörlerden ya da BEMF'den gelen sinyalleri nasıl okuyup çıkışları nasıl yönlendireceğini tablolarla göstermiş.
OVDCOND ve OVDCONS ile halledilebilir.
18F2431 için bunların kullanılmadığını yazıyor ama ben sanki kullandığımı haztırlıyorum. Eve geçince bir daha bakarım.
Başlık: Ynt: 18f2431 Açı kontrolü
Gönderen: vardal57 - 17 Eylül 2018, 13:53:41
Motorumda sensör yok dırek bır adc okutarak frekansı ayarlamak ıstıyorum
Başlık: Ynt: 18f2431 Açı kontrolü
Gönderen: apsis - 17 Eylül 2018, 17:34:50
Sensor yoksa sensorless kontrol yapısını bakman lazım(BEMF). BEMF ile aldığın komutasyonlara göre bahsettiğim register ile çıkış komutasyonlarını ayarlayabilisin. Yani kafadan açı ayarlamazsın
Sensörsüz kontrol için linke bak güzelce anlatmış adam.
http://www.avislab.com/blog/brushless04/ (http://www.avislab.com/blog/brushless04/)
Başlık: Ynt: 18f2431 Açı kontrolü
Gönderen: vardal57 - 17 Eylül 2018, 17:48:53
Açıkcası sunu anlayamadım register le ayarlamadan dırek olarak faz farkını nasıl yapıyorlar

setup_power_pwm(PWM_CLOCK_DIV_64|PWM_FREE_RUN| PWM_DEAD_CLOCK_DIV_2,1,10000,40,10000,1,50);

buradaki 10000 değeri mi bu farkı yapıyor acaba ?
Başlık: Ynt: 18f2431 Açı kontrolü
Gönderen: elektronik - 17 Eylül 2018, 18:08:29
linkte arduino ile yapılmış sensörsüz bldc motor sürücü devresi var. size fikir verebilir.

https://simple-circuit.com/arduino-sensorless-bldc-motor-controller-esc
Başlık: Ynt: 18f2431 Açı kontrolü
Gönderen: apsis - 17 Eylül 2018, 18:16:18
ovdcons registerine hangi fonksiyonun erişiyorsa onunla yapılıyor. Ben CCS C bilmiyorum. Sadece genel mantığından bahsettim sana. O fonksiyonun argüman tanımlarını yazabilirsen belki yardımcı olabilirim.