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
}
şema varmı? Simülasyonda yazılımı test ettiniz mi?
Normal olarak sağa sola hareket ettirebiliyorum ve durduraniliyorum
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