Subversion Repositories BL-Ctrl

Compare Revisions

Ignore whitespace Rev 57 → Rev 58

/trunk/analog.c
31,7 → 31,7
while (((ADCSRA & 0x10) == 0));
ADMUX = sense; // zurück auf den Sense-Kanal
i = ADCW * 4;
if(i > 200) i = 200;
// if(i > 300) i = 300;
Strom = (i + Strom * 7) / 8;
if (Strom_max < Strom) Strom_max = Strom;
ADCSRA = 0x00;
/trunk/main.c
12,7 → 12,7
#include "main.h"
 
unsigned int PWM = 0;
unsigned int Strom = 0; //ca. in 0,1A
unsigned int Strom = 0,RuheStrom; //ca. in 0,1A
unsigned char Strom_max = 0;
unsigned char Mittelstrom = 0;
unsigned int Drehzahl = 0; // in 100UPM 60 = 6000
145,13 → 145,13
Delay_ms(1000);
}
 
#define TEST_STROMGRENZE 90
#define TEST_STROMGRENZE 120
unsigned char DelayM(unsigned int timer)
{
while(timer--)
{
FastADConvert();
if(Strom > TEST_STROMGRENZE)
if(Strom > (TEST_STROMGRENZE + RuheStrom))
{
FETS_OFF;
return(1);
169,12 → 169,13
return(0);
}
 
/*
void ShowSense(void)
{
if(SENSE_H) { PORTC |= ROT; } else { PORTC &= ~ROT;}
 
}
 
*/
#define HIGH_A_EIN PORTB |= 0x08
#define HIGH_B_EIN PORTB |= 0x04
#define HIGH_C_EIN PORTB |= 0x02
188,7 → 189,7
unsigned char ADR_TAB[5] = {0,0,2,1,3};
unsigned int timer = 300,i;
unsigned int t = 0;
unsigned char MosfetKurzschluss = 0, MosfetOkay = 0,anz = 0;
unsigned char anz = 0,MosfetOkay = 0, grenze = 50;
 
PORTC &= ~ROT;
Delay_ms(300 * ADR_TAB[MotorAdresse]);
196,7 → 197,10
cli();//Globale Interrupts Ausschalten
uart_putchar('\n');
STEUER_OFF;
 
Strom_max = 0;
DelayM(50);
RuheStrom = Strom_max;
// uart_putchar(RuheStrom + 'A');
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+ High-Mosfets auf Kurzschluss testen
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
235,7 → 239,6
if(DelayM(3))
{
anz = 3;
MosfetKurzschluss = 0x01;
uart_putchar('7');
}
FETS_OFF;
245,7 → 248,7
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+ LOW-Mosfets auf Schalten und Kurzschluss testen
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(UDR == ' ') {t = 65535; uart_putchar('_');} else t = 1000; // Ausführlicher Test
if(UDR == ' ') {t = 65535; grenze = 40; uart_putchar('_');} else t = 1000; // Ausführlicher Test
Strom = 0;
for(i=0;i<t;i++)
{
256,7 → 259,7
HIGH_A_EIN;
DelayM(1);
FETS_OFF;
if(Strom > 40) {anz = 4; uart_putchar('4'); break;}
if(Strom > grenze + RuheStrom) {anz = 4; uart_putchar('4'); break;}
Delay(5);
}
Delay(10000);
271,7 → 274,7
HIGH_B_EIN;
DelayM(1);
FETS_OFF;
if(Strom > 40) {anz = 5; uart_putchar('5'); break;}
if(Strom > grenze + RuheStrom) {anz = 5; uart_putchar('5'); break;}
Delay(5);
}
 
287,7 → 290,7
HIGH_C_EIN;
DelayM(1);
FETS_OFF;
if(Strom > 40) {anz = 6; uart_putchar('6'); break;}
if(Strom > grenze + RuheStrom) {anz = 6; uart_putchar('6'); break;}
Delay(5);
}
 
343,7 → 346,6
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SENSE_B;
LOW_A_EIN; // Low A ein
#define SOUND2_A 500
for(i=0; i< (TONDAUER / SOUND2_A) ; i++)
{
HIGH_B_EIN; // Test B
392,15 → 394,15
Delay(SOUND8_A);
}
*/
if(!(MosfetOkay & 0x01)) { anz = 1; uart_putchar('A'); } else
if(!(MosfetOkay & 0x02)) { anz = 2; uart_putchar('B'); } else
if(!(MosfetOkay & 0x04)) { anz = 3; uart_putchar('C'); } else
if(!(MosfetOkay & 0x08)) { anz = 4; uart_putchar('a'); } else
if(!(MosfetOkay & 0x10)) { anz = 5; uart_putchar('b'); } else
if(!(MosfetOkay & 0x20)) { anz = 6; uart_putchar('c'); }
Delay_ms(300 * (4-ADR_TAB[MotorAdresse]));
if(!(MosfetOkay & 0x01)) { anz = 1; UDR='A'; } else
if(!(MosfetOkay & 0x02)) { anz = 2; UDR='B'; } else
if(!(MosfetOkay & 0x04)) { anz = 3; UDR='C'; } else
if(!(MosfetOkay & 0x08)) { anz = 4; UDR='a'; } else
if(!(MosfetOkay & 0x10)) { anz = 5; UDR='b'; } else
if(!(MosfetOkay & 0x20)) { anz = 6; UDR='c'; }
 
if(MosfetOkay != 0x3f) Delay_ms(1000);
if(anz) Delay_ms(1000);
 
RotBlink(anz);
uart_putchar('.');
542,6 → 544,8
PPM_Signal = 0;
 
if(!SollwertErmittlung()) MotorTon();
//MotorTon();
PORTB = 0x31; // Pullups wieder einschalten
 
// zum Test der Hardware; Motor dreht mit konstanter Drehzahl ohne Regelung
if(TEST_MANUELL) Anwerfen(TEST_MANUELL); // kommt von dort nicht wieder
559,7 → 563,7
{
MotorGestoppt = 0;
ZeitFuerBerechnungen = 0; // direkt nach einer Kommutierung ist Zeit
MinUpmPulse = SetDelay(50); // Timeout, falls ein Motor stehen bleibt
MinUpmPulse = SetDelay(250); // Timeout, falls ein Motor stehen bleibt
altPhase = Phase;
}
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
599,10 → 603,10
MittelstromTimer = SetDelay(50); // alle 50ms
if(Mittelstrom < Strom) Mittelstrom++;// Mittelwert des Stroms bilden
else if(Mittelstrom > Strom) Mittelstrom--;
if(Mittelstrom > LIMIT_STROM)// Strom am Limit?
if(Strom > MAX_STROM) MaxPWM -= MaxPWM / 32;
if((Mittelstrom > LIMIT_STROM))// Strom am Limit?
{
MaxPWM--;// dann die Maximale PWM herunterfahren
if(MaxPWM) MaxPWM--;// dann die Maximale PWM herunterfahren
PORTC |= ROT;
}
else
614,18 → 618,17
if(CheckDelay(DrehzahlMessTimer)) // Ist-Drehzahl bestimmen
{
DrehzahlMessTimer = SetDelay(10);
SIO_Drehzahl = (6 * CntKommutierungen) / (POLANZAHL / 2);
SIO_Drehzahl = CntKommutierungen;//(6 * CntKommutierungen) / (POLANZAHL / 2);
CntKommutierungen = 0;
if(PPM_Timeout == 0) // keine PPM-Signale
ZeitZumAdWandeln = 1;
}
 
 
if(TEST_SCHUB)
{
if(CheckDelay(TestschubTimer))
{
TestschubTimer = SetDelay(1500);
if(TEST_SCHUB)
{
switch(test)
{
case 0: PWM = 50; test++; break;
635,9 → 638,9
case 4: PWM = 150; test = 0; break;
default: test = 0;
}
}
}
// Motor Stehen geblieben
}
// Motor Stehen geblieben
if((CheckDelay(MinUpmPulse) && SIO_Drehzahl == 0) || MotorAnwerfen)
{
MotorGestoppt = 1;
/trunk/makefile
3,7 → 3,7
MCU = atmega8
#-------------------------------------------------------------------
HAUPT_VERSION = 0
NEBEN_VERSION = 35
NEBEN_VERSION = 36
#-------------------------------------------------------------------
 
# Output format. (can be srec, ihex, binary)