Commit 8693434d authored by Pontus Giselsson's avatar Pontus Giselsson
Browse files

PI-control with triangle reference, no sync between pwm and control sampling

parent fdcac3af
......@@ -17,12 +17,11 @@
// reference generation variables
volatile int16_t ref = 0;
volatile int16_t ref = 200;
volatile int16_t refCount = 0;
volatile int8_t refFlag = 0;
// control variables
volatile unsigned char lbyte,hbyte;
volatile int16_t y;
......@@ -44,7 +43,7 @@ volatile int16_t Ksat = 51;//1; // 7 frac bits, h/Tr
volatile int16_t ctrl_log[log_len];
volatile int16_t error_log[log_len];
volatile int32_t I_log[log_len];
volatile int16_t skipSamples = 1;
volatile int16_t skipSamples = 30000;
volatile int16_t countSamples = 0;
volatile int16_t jj=0;
volatile int8_t stop = 0;
......@@ -156,8 +155,9 @@ SIGNAL(SIG_ADC)
*/
// write output, inverting mode means set pwm to 127-ctrl_out
// Original styrning med 7 bitar + direction
/*
u = (v+2)>>2; //7 frac bits to pwm
if (u > 127) {
......@@ -165,26 +165,16 @@ SIGNAL(SIG_ADC)
} else if (u < -128) {
u = -128;
}
*/
// upplsning p styrsignal [-104,103] fr att matcha sampelperiod
u = ((v*13+32)>>6);
if (u > 104) {
u = 104;
} else if (u < -105) {
u = -105;
}
if (u < 0) {
//PORTC = 0x80+(PORTC & 0x7F);
PORTC |= 0x80;
OCR1BL = (unsigned char) (104-(-u));
OCR1BL = (unsigned char) (128-(-u));
} else {
PORTC = (PORTC & 0x7F);
OCR1BL = (unsigned char) (105-u);
OCR1BL = (unsigned char) (127-u);
}
// For logging
countSamples++;
if (countSamples == skipSamples) {
......@@ -200,8 +190,6 @@ SIGNAL(SIG_ADC)
stop = 1;
sendData();
}
if (jj == 30)
ref = 100;
}
PORTA &= 0xef; //Turn off calculation timer
......@@ -211,7 +199,7 @@ SIGNAL(SIG_ADC)
/* reference square- or triangle wave generator with timer 0 */
SIGNAL(SIG_OVERFLOW0) {
int8_t rectangle = 1;
int8_t rectangle = 0;
refCount++;
if (rectangle == 1) {
if (refFlag == 0) {
......@@ -227,12 +215,12 @@ SIGNAL(SIG_OVERFLOW0) {
}
}
} else {
if (refCount <= 20) { // ref*2
ref -= 2;
if (refCount <= 40) { // ref
ref -= 10;
} else {
ref += 2;
ref += 10;
}
if (refCount == 40) { // ref*4
if (refCount == 80) { // ref*2
refCount = 0;
}
}
......@@ -264,25 +252,16 @@ int main()
// Reset Timer1 and set TOP-value to 128 (means 7-bit pwm-signal-> h_pwm=8.61 micros)
// 7 bit ctrl-signal and direction
//outp(0x00,OCR1AH);
//outp(0x7f,OCR1AL);
// 104-quant on ctrl-signal and direction
outp(0x00,OCR1AH);
outp(104,OCR1AL);
outp(0x7f,OCR1AL);
outp(0x00,TCNT1H);
outp(0x00,TCNT1L);
// 7 bit ctrl-signal and direction
//outp(0x00,OCR1BH);
//outp(0x7f,OCR1BL); // to not start motor-rotation before control
outp(0x00,OCR1BH);
outp(104,OCR1BL); // to not start motor-rotation before control
outp(0x7f,OCR1BL); // to not start motor-rotation before control
// 104-quant on ctrl-signal and direction
/* Timer 2 (control loop), prescaler 256, clear on compare match (28), -> h = 0.5 ms */
// outp(BV(WGM21)|BV(CS22)|BV(CS21),TCCR2);
......@@ -323,7 +302,7 @@ int main()
while (1) {
if (stop) {
cli();
OCR1BL = 0x7f;
OCR1BL = 0xff;
}
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment