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; |