Hello guys i "All thanks to e*clipse" started trying the code on dspic30f6010a
serial comunication runs fine, configuration commands works just fine.. streaming part i'don't know how it works.. i someone wants to explain....
my configuration is:
current sensors: LEM LTS25-NP IN 8 AMPS RMS CONFIGURATION. with 13.33 A/V gain. i used 13.
Motor is ac induction motor with 230v 8.5A 2 pole motor 2850RPM
this is my configuration in software:
motor-type=1
kp=01000 ki=00010
current-sensor-amps-per-volt=0013
max-regen-position=0390
min-regen-position=0490
min-throttle-position=0510
max-throttle-position=0610
fault-throttle-position=0005
max-battery-amps=0008 amps
max-battery-amps-regen=0008 amps
max-motor-amps=008 amps
max-motor-amps-regen=008 amps
precharge-time=0050 tenths of a sec
rotor-time-constant=018 ms
pole-pairs=001
max-rpm=03000 rev/min
throttle-type=1
encoder-ticks=1024 ticks/rev
pi-ratio=062
raw-throttle=0513
but when the motor starts it oscillates and then it blocks.... i dont know why.. i'm sure that hardaware is ok because it works in openloop with 1162 app note's code..
i'm attaching also the modifactions done in the code.
Lines commented with SINGH are changed.
ACController.h
Code:
//#define PAULS_MOTOR
//#define ANDREWS_MOTOR
#define AC_INDUCTION_MOTOR_CONFIG
//#define DEBUG_MODE
#define OREGON_MOTOR_CONTROLLER
#define I_TRIS_THROTTLE _TRISB7 //B0 //previous settings singh
#define I_TRIS_CURRENT1 _TRISB0 //B1
#define I_TRIS_CURRENT2 _TRISB1 //B2
#define I_TRIS_INDEX _TRISB3 //B3
#define I_TRIS_QEA _TRISB4 //B4
#define I_TRIS_QEB _TRISB5 //B5
#define O_TRIS_CLEAR_FLIP_FLOP _TRISB6 //B6
#define I_TRIS_TEMPERATURE _TRISB2 //B7
#define I_TRIS_REGEN_THROTTLE _TRISB8 //B8
#define I_TRIS_DESAT_FAULT _TRISB9 //C13
#define I_TRIS_OVERCURRENT_FAULT _TRISB10 //C14
#define I_TRIS_UNDERVOLTAGE_FAULT _TRISB11 //E8
#define O_TRIS_LED _TRISA9 // high means turn ON the LED. //D1
#define O_TRIS_PRECHARGE_RELAY _TRISA10 // HIGH means turn ON the precharge relay. //D3
#define I_TRIS_GLOBAL_FAULT _TRISB12 //D2
#define O_TRIS_CONTACTOR _TRISA14 //D0
#define O_TRIS_CLEAR_DESAT _TRISB15 //F6
#define O_TRIS_BUFFER_ENABLE _TRISD11 //SINGH For enbling the buffer ic on pcb
#define O_TRIS_PWM_3H _TRISE5
#define O_TRIS_PWM_3L _TRISE4
#define O_TRIS_PWM_2H _TRISE3
#define O_TRIS_PWM_2L _TRISE2
#define O_TRIS_PWM_1H _TRISE1
#define O_TRIS_PWM_1L _TRISE0
#define I_LAT_THROTTLE _LATB7
#define I_LAT_CURRENT1 _LATB0
#define I_LAT_CURRENT2 _LATB1
#define I_LAT_INDEX _LATB3
#define I_LAT_QEA _LATB4
#define I_LAT_QEB _LATB5
#define O_LAT_CLEAR_FLIP_FLOP _LATB6
#define I_LAT_TEMPERATURE _LATB2
#define I_LAT_REGEN_THROTTLE _LATB8
#define I_LAT_DESAT_FAULT _LATB9
#define I_LAT_OVERCURRENT_FAULT _LATB10
#define I_LAT_UNDERVOLTAGE_FAULT _LATB11
#define O_LAT_LED _LATA9 // high means turn ON the LED.
#define O_LAT_PRECHARGE_RELAY _LATA10 // HIGH means turn ON the precharge relay.
#define I_LAT_GLOBAL_FAULT _LATB12
#define O_LAT_CONTACTOR _LATA14
#define O_LAT_CLEAR_DESAT _LATB15
#define O_LAT_BUFFER_ENABLE _LATB15
#define O_LAT_PWM_3H _LATE5
#define O_LAT_PWM_3L _LATE4
#define O_LAT_PWM_2H _LATE3
#define O_LAT_PWM_2L _LATE2
#define O_LAT_PWM_1H _LATE1
#define O_LAT_PWM_1L _LATE0
#define I_PORT_THROTTLE _RB7
#define I_PORT_CURRENT1 _RB0
#define I_PORT_CURRENT2 _RB1
#define I_PORT_INDEX _RB3
#define I_PORT_QEA _RB4
#define I_PORT_QEB _RB5
#define O_PORT_CLEAR_FLIP_FLOP _RB6
#define I_PORT_TEMPERATURE _RB2
#define I_PORT_REGEN_THROTTLE _RB8
#define I_PORT_DESAT_FAULT _RB9
#define I_PORT_OVERCURRENT_FAULT _RB10
#define I_PORT_UNDERVOLTAGE_FAULT _RB11
#define O_PORT_LED _RA9 // high means turn ON the LED.
#define O_PORT_PRECHARGE_RELAY _RA10 // HIGH means turn ON the precharge relay.
#define I_PORT_GLOBAL_FAULT _RB12
#define O_PORT_CONTACTOR _RA14
#define O_PORT_CLEAR_DESAT _RB15
#define O_PORT_BUFFER_ENABLE _RD11
#define O_PORT_PWM_3H _RE5
#define O_PORT_PWM_3L _RE4
#define O_PORT_PWM_2H _RE3
#define O_PORT_PWM_2L _RE2
#define O_PORT_PWM_1H _RE1
#define O_PORT_PWM_1L _RE0
ACController.c
Code:
// CH0 corresponds to ADCBUF0. etc...
// CH0=AN7, CH1=AN0, CH2=AN1, CH3=AN2.
// AN0 = CH1 = ADCurrent1 dspic30f6010a configurations by singh
// AN1 = CH2 = ADCurrent2 dspic30f6010a configurations by singh
// AN2 = CH3 = temperature dspic30f6010a configurations by singh
// AN7 = CH0 = ADThrottle dspic30f6010a configurations by singh
ADCurrent1 = ADCBUF1;
ADCurrent2 = ADCBUF2;
Ia = ADCurrent1; // CH1 = ADCurrent1
Ib = ADCurrent2; // CH2 = ADCurrent2.
Ia -= vRef1; // vRef1 is just a constant found at the beginning of the program, approximately = 512, that changes the current feedback from being centered at 512 to centered at 0. It's specific to current sensor #1.
Ib -= vRef2; // vRef2 is just a constant found at the beginning of the program, approximately = 512, that changes the current feedback from being centered at 512 to centered at 0. It's specific to current sensor #2.
// So, you must change the interval to [-4096, 4096], so as to match the throttle range below to make feedback comparable with commanded current. So...
Ia <<= 4; // Ia is now in [-4096, 4096] if it was in [-256, 256]. In other words, if it was in [-2*LEM Rating, 2*LEM Rating].
Ib <<= 4; // Ib is now in [-4096, 4096] if it was in [-256, 256]. In other words, if it was in [-2*LEM Rating, 2*LEM Rating].
Ic = -Ia - Ib;
Ib_times2 = (Ib << 1);
rawThrottle = ADCBUF0; //Singh
throttleSum += rawThrottle;
temperatureSum += ADCBUF3; //Singh