BTM7710GP dc motor kontrol rampa sorunu

Başlatan ertuğrul54, 15 Eylül 2017, 17:28:25

ertuğrul54

merhaba arkadaşlar  hazır motor sürücüsü olarak  BTM7010GP kullanıyorum  infeneonun 
yazdığım kodda  3 adet adc var 1)  motor dahili  hız ayarı 2) harici motor hız ayarı 3) ve en önemlisi rampa süresini belirleyen adc
motorun ilk hareketi yavaştan  1 numaralı adc deki  hıza  gitmesi  ama bir türlü beceremedim  bu rampa değerlerinin bir formülü varmıdır yokmudur çözemedim kafama göre formüller yaptım  onlarda olmadı



/*********************main.c**************************//
#include <18F45K22.h>
#device	adc =10
#opt 1
#fuses H4,NOPROTECT,NOPUT,NOPBADEN,MCLR,PLLEN,PRIMARY_ON,BROWNOUT,BORV42
#use delay(clock=40Mhz, oscillator=10Mhz)


#DEFINE  PORTA       0xF80
#DEFINE  PORTB       0xF81
#DEFINE  PORTC       0xF82
#DEFINE  PORTD       0xF83
#DEFINE  PORTE       0xF84

#DEFINE  LATA        0xF89
#DEFINE  LATB        0xF8A
#DEFINE  LATC        0xF8B
#DEFINE  LATD        0xF8C
#DEFINE  LATE        0xF8D




#define strt_stop 1
#define run_brake	2
#define	ccw_cw	4
#define	int_ext	8
#define	alarm_res 16


//**************Digital  input tanımları *************************

#BIT   ariza=PORTD.4 // status flag
#BIT   alarm_reset=PORTB.0
#BIT   int_ext_speed=PORTB.1
#BIT   dir=PORTB.2
#BIT   run=PORTB.3
#BIT   start_stop=PORTB.4
//************************************************************

//*****************Digital  Outputlar ********************************

#BIT   alarmout=LATE.0
#BIT   speedout=LATE.1
#BIT	 errled=LATD.0
#BIT	 runled=LATD.1

//************************************************************


/* port'lar input    lat'ler  output*/
//#BIT    led=LATE.0         // OUTPUT LED*/

 

unsigned 	int i;
unsigned 	char rampa_time_carpan = 4;
unsigned 	int rampa_total_zaman;
unsigned 	int periyod;
unsigned 	int dogan;
unsigned 	long 	max ;
unsigned 	long 	ramp;

//ayrıca float a geçince 3.92000008 değeri neden çıkar 

//unsigned 	int i;
//float	 rampa_time_carpan = 3.92;
//float 	 rampa_total_zaman;
//float 	 periyod;
//unsigned int 	 dogan;
//unsigned 	long 	max ;
//unsigned 	long 	ramp;
//unsigned int q;

/////////////////____timer2 _____////////////////////
#byte T2CON = 0xFBA 
#byte PR2  =  0xFBB

///////////////////////////////////////////////////////

void motor_rampa_speed1();
void motor_rampa_speed2();
void adc_oku();
void rampa_int_motor_sag();
void rampa_int_motor_sol();
void rampa_ext_motor_sag();
void rampa_ext_motor_sol();
void int_motor_sag();
void int_motor_sol();
void ext_motor_sag();
void ext_motor_sol();
void motor_stop();
void hata();
void rampa_kalkis();
void adc_oku();
void motor_sinyalleri(long sinyal);


#int_timer1 
void timer1_kesme () 
{
 set_timer1(65505); 
 
 i++; 
 
 if (i==31)
 i=0;
}


void main() 
{ 
 		//delay_ms(1000);

		setup_adc(ADC_CLOCK_DIV_32);//ADC_TAD_MUL_20//ADC_CLOCK_DIV_32
		setup_adc_ports(sAN0 | sAN1 | sAN4 | VSS_VDD   );
                setup_timer_2(T2_DIV_BY_4,248,1); // setup_timer_2(T2_DIV_BY_4,249,1) 
		setup_ccp1(CCP_PWM);
              T2CON=0b00110100;
             PR2=150;

            setup_timer_1(T1_INTERNAL | T1_DIV_BY_8);
           set_timer1(65505);  
 
 
 enable_interrupts(INT_timer1); 
 enable_interrupts(GLOBAL); 

		set_tris_a(0b11111111);
    set_tris_b(0b11111111);
    set_tris_c(0b00000000);
    set_tris_d(0b00010000);
    set_tris_e(0b11111000); 

unsigned int sonuc =0;
		
		while(true){
			sonuc=0;
			if(!start_stop)		sonuc+=strt_stop;	
//			if(run)						sonuc+=run_brake;
//			if(dir)						sonuc+=ccw_cw;
//			if(int_ext_speed)	sonuc+=int_ext;
//			if(alarm_reset)		sonuc+=alarm_res;
			motor_sinyalleri(sonuc);
				
		}
	
}
////////////////////////////////////////////
void motor_sinyalleri(long sinyal) {
    switch (sinyal) {
        case 1:int_motor_sag();break;
        //case 2:int_motor_sol();break;
        default:break;
		}
}

void int_motor_sag()
{		
		setup_CCP1(CCP_PWM_FULL_BRIDGE | CCP_PWM_L_H );//L-H
		adc_oku();
set_pwm1_duty(max);
		if(ramp){
		set_pwm1_duty(ramp);
		periyod+1;
		}
			else {periyod=0;}
}

void rampa_kalkis(){
			rampa_total_zaman = ramp*rampa_time_carpan;
			periyod=rampa_total_zaman/max;
	}

void adc_oku(){
			set_adc_channel(0);// internal potans kanal	
			delay_ms(15);
			max=read_adc();// internal potans kanal	

			set_adc_channel(1);// rampa potans kanalı
			delay_ms(15);
			ramp=read_adc();// rampa potans kanal
}


tekosis

#1
şema varmı? Simülasyonda yazılımı test ettiniz mi?
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

ertuğrul54

Normal olarak sağa sola hareket ettirebiliyorum ve durduraniliyorum

mehmet

Bu foruma yazdıklarımız;
F.K. 1-ğ ve 1-h kapsamındadır. Üye olurken bu kuralları
kabul etmekteyiz.

https://www.picproje.org/index.php/topic,65932.0.html
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr