Gönderen Konu: step motor hız kontrol sorunu  (Okunma sayısı 5879 defa)

Çevrimdışı Berkay Turgay

  • OTOKON Üyesi
  • *
  • İleti: 2
step motor hız kontrol sorunu
« : Ağustos 27, 2014, 06:17:38 ÖS »
  mrb, Atmega 328 kullanarak yaptığım step motor hız ve yön kontrol devresinde ADC den dolayı hız sorunu yaşıyorum. yön kontrolünü 2 butonla, hız kontrolünü ise potansiyometreden aldığım analog veriyle sağlıyorum. Motor butona bastığımda dönerken sürekli hız değiştiriyor. potansiyometrenin orta bacağını ölçtüğümde ise her iki yöndede herhangi bir gerilim değişikliği olmuyor. yani sorun ADC çevriminde. motor dönerken her 30 mSn de bir pottan hız kontrolü sağlamak için ADC conversion complete kesmesini timer0 overflow ile tetikledim ve ADC yi 125kHz de kullanıyorum... lütfen biri bana yardım etsin

Kod: [Seç]

#include <avr/io.h>
#define F_CPU 8000000
#include <util/delay.h>
#include <avr/interrupt.h>

volatile int v[4]={3,6,12,9},temp,i,j,k;

int Read_adc(int);
int saga_don();
int sola_don();

void timer0_init(){

TCNT0=0;
TIMSK0=(1<<TOIE0);
TCCR0B=0X05; // prescalar 1024
sei();

}

// (1024/8*10^6)*255=32.6 mSn


ISR(ADC_vect){

temp=ADCW;

}

ISR(TIMER0_OVF_vect){

}

int saga_don(){

while(bit_is_clear(PINB,4)){

for (i=0; i<=3; i++){
PORTB=v[i];
gecikme(temp);
_delay_us(125);
}

}

PORTB=0x00;

_delay_ms(50);

}

int sola_don(){

while(bit_is_clear(PINB,5)){

for (j=3; j>=0; j--){
PORTB=v[j];
gecikme(temp);
_delay_us(125);
}

}

PORTB=0x00;

_delay_ms(50);
}

void adc_init(){

ADMUX= 0x45; // referance voltage is Avcc, ADC pin is selected 5
ADCSRA = 0xAE;  // prescalar is used 64, ADEN,ADATE,ADIE,ADPS1,ADPS2 bits are set
ADCSRB |=(1<<ADTS2); // trigger source is timer0 overflow
}

  void gecikme(int z){
 
  for(k=0; k<=z; k++)
  _delay_us(5);
 
  }

void step_kontrol(){

while(1){

if(bit_is_set(PINB,5)){ // SAĞA DÖN

saga_don();

}

else if(bit_is_set(PINB,4)){ // SOLA DÖN

sola_don();


 }
 
 else{

while( (PINB & 0X30)==0X00 ){

PORTB=0x00;

}

 }

}

}

int main(){

DDRB= 0x0f;

adc_init();
timer0_init();

    while(1){

   step_kontrol();

}
return 0;
}







 

Çevrimdışı Giray Balcı

  • Mezun olmuş OTOKON'cu
  • *
  • İleti: 1471
Ynt: step motor hız kontrol sorunu
« Yanıtla #1 : Ağustos 29, 2014, 12:05:33 ÖÖ »
Merhaba Berkay,

adc çevrimi ve timer kesmeleriyle ilgili çok bilgim yok, kodun o kısımlarını fazla anlamadım ama şöyle bir şey sorayım. Step hızını sabit bir sayı olarak verdiğinde (analog okumadan) aynı sorun oluyor mu? Butonları dirençle toprağa bağladın mı acaba? Devre şemanı da atabilirsen ona da bakalım bir. Son olarak v dizinde yani b portu çıkışlarında sorun olabilir mi? sanki arada çeyrek adımlardan birinin yeri ters gibi geldi. 0011 - 0110 - 1001 - 1100 yerine 0011 - 0110 - 1100 - 1001 daha mantıklı geldi nedense :D

Çevrimdışı Berkay Turgay

  • OTOKON Üyesi
  • *
  • İleti: 2
Ynt: step motor hız kontrol sorunu
« Yanıtla #2 : Ağustos 29, 2014, 02:40:58 ÖS »
mrb, adımlarda sorun yok giray dediğin gibi işliyor(0011,0110,1100,1001 ) butonlarıda bağladım zaten bağlamasam kendiliğinden set olurlardı, sorun ADC çevriminde ama çözemiyorum. forumda atmel programlamayı iyi bilen biri var mı acaba biliyomusun?
« Son Düzenleme: Ağustos 29, 2014, 02:49:56 ÖS Gönderen: Berkay Turgay »