Elektrotekno.com Ana Sayfa || Programlanabilir Cihaz ve Elemanlar || Microchip Pic Serisi


pic reset sorunu yardım

Kayıt: 14 Tem 2009
Mesajlar: 221

Offline
salih-46
Tarih: 05 01 2010 17:24

Merhaba
Arkadaşlar 877a'nın iki pwm kanalını kullanarak iki tane redüktörlü dc motorun "pi" ile hız kontrolünü yapmaya çalışıyorum motor sürücü olarak l298 kullanıyorum l298'in çıkış uçları boşta iken her iki çıkıştada 0-12v arası pwm sinyallerini gürebiliyorum ama yükü bağlayınca pic resetleniyor bu neden olabilir acaba
yardımcı olursanız sevinirim aşagıya şemayı ve her iki picdeki ccs c kodlarını ekliyorum
pic reset sorunu yardım

???????????????soldaki????????????????????????????????????
#INCLUDE <16F877A.H>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#device adc=10
#INCLUDE <math.h>
#USE DELAY (CLOCK=4000000)
#use fast_io(c)
#use fast_io(d)
#use rs232(baud=35714,xmit=pin_c6,rcv=pin_c7,stop=1,parity=n)
float out=0,integral=0,error=0,pre_error=0,set_point,yedek;
unsigned int8 i,x,y,yon,Kp,Ki,yedek2;
unsigned int16 dout=0;
byte deger[4];
//#define set_point deger[2]
#define Kp deger[0]
#define Ki deger[1]
#byte tmr1l= 0x0e
#byte tmr1h =0x0f
///////////////////////////////////////////////////////////////
#int_timer0
void timer_kesme0()
{
output_high(pin_d0);
putc('s');
/////////////////////
yedek=tmr1l;
yedek2=tmr1l;
tmr1l=0;
set_timer0(139); //190 sorun çıkartıyor 139 da sonuç iyi
/////////////
error=set_point-yedek; //hata bulunuyor tmr1l encoder değeri
integral=integral+((error+pre_error)/2)*0.04; //integral işlemi>>185 için 18ms
out=Kp*error+Ki*integral; //çıkış
///////////////////////
if(out>1023)
{
out=1023;
}
if (out<0)
{
out=0;
}
dout=floor(out);
//
delay_ms(2);
putc(yedek2);
x=make8(dout,0);
delay_ms(2);
putc(x);
y=make8(dout,1);
delay_ms(2);
putc(y);
pre_error=error;
delay_ms(15);
output_low(pin_d0);
}
/////////////////////////////////////////////////////////////////
void main()
{
set_tris_d(0x80);
output_d(0x00);
set_tris_c(0x81);
output_c(0x00);
setup_adc(adc_clock_div_32);
setup_adc_ports( AN0_AN1_AN2_AN3_AN4 );// BU AYARLAR İÇİN C/PİCC/DEVİCES/877A KLASÖRÜNÜN İÇİNE BAK
setup_timer_1(t1_div_by_1|t1_external); //encoder pulsleri sayılıyor
setup_timer_0(rtcc_internal|rtcc_div_256);//timer0 kuruldu
enable_interrupts(global);
delay_ms(1000);
while(1)
{
while(input(pin_d7)==1)
{
disable_interrupts(int_timer0);
for(i=0;i<3;i++)
{
set_adc_channel(i);
delay_us(100);
deger[i]=read_adc();// 2>>set_point, 0>>Kp, 1>>Ki
printf("%c",deger[i]);
delay_ms(10);
}
delay_ms(100);
Kp=deger[0];
Ki=deger[1];
set_point=deger[2];//=deger[2];
out=0;dout=0;integral=0;
}
/////////////////
while(input(pin_d7)==0)
{
enable_interrupts(int_timer0);
set_timer1(0);
set_timer0(139);//kesme süresi 40ms 139 da sonuç iyi
while(input(pin_d7)==0);
}
}}


????????????????sağdaki??????????????????
#INCLUDE <16f877a.H>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#INCLUDE <math.h>
#USE DELAY (CLOCK=4000000)
#use fast_io(a)
#use fast_io(c)
/////////////////////////////////////////////////////////
#define LCD_DATA_PORT getenv("SFR:PORTD")
#define LCD_ENABLE_PIN PIN_E0
#define LCD_RS_PIN PIN_E2
#define LCD_RW_PIN PIN_E1
#define LCD_DATA0 PIN_D7
#define LCD_DATA1 PIN_D6
#define LCD_DATA2 PIN_D5
#define LCD_DATA3 PIN_D4
#INCLUDE <LCD.c>
///////////////////////////////////////////////////////////
#use rs232(baud=35714,xmit=pin_c6,rcv=pin_c7,stop=1,parity=n)
/////////////////////
float out=0,integral=0,error=0,pre_error=0,set_point=0,yedek=0;
int1 k=0;
unsigned int8 yon=0,i=0,Kp=0,Ki=0,yedek2;
unsigned int16 puls=0,dout=0;
byte data[3];
byte deger[3];
//#define Kp deger[0];
//#define Ki deger[1];
#byte tmr1l= 0x0e
#byte tmr1h =0x0f
//#define set_point deger[2];
///////////////////////////////////////////////////
#int_rda
rda_kesmesi()
{
output_high(pin_d0);
disable_interrupts(int_rda);
getc();
yedek=tmr1l;
yedek2=tmr1l;
tmr1l=0;
///////////////////////
error=set_point-yedek; //hata bulunuyor tmr1l encoder değeri
integral=integral+((error+pre_error)/2)*0.04; //integral işlemi>>185 için 18ms
out=Kp*error+Ki*integral; //çıkış
///////////////////////
if(out>1023)
{
out=1023;
}
if (out<0)
{
out=0;
}
dout=floor(out);
/////////////
for(i=0;i<3;i++)
{
data[i]=getc();
}
puls=make16(data[2],data[1]);
set_pwm1_duty(puls);//puls
set_pwm2_duty(dout);
k=1;
pre_error=error;
output_low(pin_d0);
}
//////////////////////////////////////////////////
void main(void)
{
set_tris_a(0x01);
output_a(0x00);
set_tris_c(0x81);
output_c(0x00);
setup_ccp1(ccp_pwm);
setup_ccp2(ccp_pwm);
setup_timer_2(t2_div_by_16,255,1); //bu şekilde pwm frekansı yaklaşık 250Hz çözünürlük 255
set_pwm1_duty(0);
set_pwm2_duty(0);
setup_timer_1(t1_div_by_1|t1_external); //encoder pulsleri sayılıyor
enable_interrupts(global);
lcd_init();
printf(lcd_putc,"\fPI DENETIM");
while(1)
{
//////////////////////////////////////////////////////////////
while(input(pin_a0)==1)
{
disable_interrupts(int_rda);
set_pwm1_duty(0);
set_pwm2_duty(0);
puls=0;dout=0;out=0;integral=0;
if(kbhit())
{
for(i=0;i<3;i++)
{
deger[i]=getc();
}
printf(lcd_putc,"\fKp=%u Ki=%u\nset=%u",deger[0],deger[1],deger[2]);
set_point=deger[2];
Kp=deger[0];
Ki=deger[1];
}
}
/////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
while(input(pin_a0)==0)
{
enable_interrupts(int_rda);
set_timer1(0);
while(input(pin_a0)==0)
{
enable_interrupts(int_rda);
if(k==1)
{
output_high(pin_d0);
printf(lcd_putc,"\fV1=%u pwm=%ld\nV2=%u pwm=%ld",data[0],puls,yedek2,dout);
k=0;
output_low(pin_d0);
}
}
}
//////////////////////////////////////////
}
}

???????????????????????????????????????
???????????????


Reklamlar
Kayıt: 19 Arl 2008
Mesajlar: 37
Konum: ARGE-MÜHENDİSİ
Offline
r_tekes
Tarih: 05 01 2010 18:09

Merhaba ,

Birkaç nedeni olabilir, Besleme çok iyi regüle edilmemiş olabilir, ortamda fazla manyetik alan olabilir,

1. picin VDD ile VSS arasına 100mikrofarad mercimek kondansatör bağla,
2. Pic beslemesini kontrol et motorlar kalkış yaptığında beslemenin etkilenmediğinden emin ol
3. yapabilirsen Picin giriş çıkışlarını optokuplör ile izole et.
Başa dön
Kayıt: 17 Ekm 2007
Mesajlar: 50

Offline
DemirHan
Tarih: 05 01 2010 18:10

motor sürmek ve işlemciyi beslemek için aynı besleme devresini kullanıyorsan sorun çıkması normal farklı beslemeler kullanıp gnd lerini birleştirerek kullanabilirsin
Başa dön
Kayıt: 14 Tem 2009
Mesajlar: 221

Offline
salih-46
Tarih: 05 01 2010 20:40

pic reset


Cevaplarınız için teşekkür ederim devreyi 12v 1.3ah lık bir akü ile besliyorum 100nf kondansatör filan bağlı motorların çektiği akım da fazla bir akım değil atıyorum 400-500 ma ve motorlara akım uygulanmaya başladığında akımı takip ediyorum 150-130 ma bulmadan pic kendini resetliyor vede akünün voltajında bir düşmede olmuyor nedenini anlayamadım ama ayrı beslemeler vererek denemeyi düşünüyorum bakalım ne olacak birde tmr1'leri sayıcı olarak kullanıyorum encoderdan çıkan pulsler tmr1lere geliyorlar ama bundan birşey olacağını zannetmiyorum bakalım uğraşacağız
teşekkür ederim kolay gelsin
Başa dön
Kayıt: 27 Hzr 2009
Mesajlar: 171

Offline
emresensoy
Tarih: 05 01 2010 22:45

DemirHan yazmış
motor sürmek ve işlemciyi beslemek için aynı besleme devresini kullanıyorsan sorun çıkması normal farklı beslemeler kullanıp gnd lerini birleştirerek kullanabilirsin


bence de bu şekilde denemelisin
Başa dön
Kayıt: 05 Arl 2006
Mesajlar: 264
Konum: izmir
Offline
keremtosun
Tarih: 06 01 2010 11:51

edindiğim tecrübelerden dolayı maalesef pic manyetik bağışıklığı iyi olan bir işlemci değil. bu nedenle ayrı güçe devreleri kullanmanuı tavsiye ederim.
Başa dön
Kayıt: 20 Arl 2007
Mesajlar: 49

Offline
Elektroline
Tarih: 06 01 2010 18:38

hızlı optolarla sür , siemens bile sürücü entegrelerinin önünde mutlaka yüksek hızlı optolar kullanıyor.
Başa dön



pic reset sorunu yardım


Benzer Konular
- Kou Statik anahtarlama Sınav Soruları Yardım!!
- Assembly- TMR0 kesmesi ile ilgili yardım
- Asansör Fotosel, Boy Fotosel PCB yardım

- proje yardım

- Arkadaşlar çok acil yardım lütfen !!!
- HVDC' - acil yardım
- P-Mosfet sürme sorunu
- mono bass anfisi hakkında yardım
- pıc18f4550 adc sorunu

- Sayıcı Resetleme Sorunu

- Yardım isteği - SCADA kaydetme sorunu

Sitemize üyelik ve içeriğin indirilmesi tamamen ücretsizdir. Sitemizde paylaşılan tüm dokümanlar (Tezler, makaleler, ders notları, sınav soru cevaplar, projeler) paylaşımcıların bireysel çalışmaları olup telif hakları kendilerine aittir ya da açık bir şekilde kamusal alana yerleştirilmiş dokümanların birer kopyalarıdır. Kişilerin bireysel çalışmalarını sitemizde yüklemesinde, sitemizde paylaşıma teşvik eden puanlama sisteminin de etkisi büyüktür. Bunlara rağmen hala size ait olan ve burada bulunmasına izin vermediğiniz dokümanlar varsa iletişim bölümünden yöneticilere bildirmeniz durumunda derhal silineceklerdir.
Powered by phpBB | Translated by phpBB Turkiye | Ads by Google Adsense | Design by Crazy Bat based