Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: ertuğrul54 - 15 Eylül 2017, 17:28:25

Başlık: BTM7710GP dc motor kontrol rampa sorunu
Gönderen: ertuğrul54 - 15 Eylül 2017, 17:28:25
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
}

Başlık: Ynt: BTM7710GP dc motor kontrol rampa sorunu
Gönderen: tekosis - 15 Eylül 2017, 17:59:09
şema varmı? Simülasyonda yazılımı test ettiniz mi?
Başlık: Ynt: BTM7710GP dc motor kontrol rampa sorunu
Gönderen: ertuğrul54 - 15 Eylül 2017, 18:07:15
Normal olarak sağa sola hareket ettirebiliyorum ve durduraniliyorum
Başlık: Ynt: BTM7710GP dc motor kontrol rampa sorunu
Gönderen: mehmet - 19 Eylül 2017, 19:30:32
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