电调程序Word文档格式.docx

上传人:b****5 文档编号:17288959 上传时间:2022-11-30 格式:DOCX 页数:17 大小:17.88KB
下载 相关 举报
电调程序Word文档格式.docx_第1页
第1页 / 共17页
电调程序Word文档格式.docx_第2页
第2页 / 共17页
电调程序Word文档格式.docx_第3页
第3页 / 共17页
电调程序Word文档格式.docx_第4页
第4页 / 共17页
电调程序Word文档格式.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

电调程序Word文档格式.docx

《电调程序Word文档格式.docx》由会员分享,可在线阅读,更多相关《电调程序Word文档格式.docx(17页珍藏版)》请在冰豆网上搜索。

电调程序Word文档格式.docx

unsignedchartmp_pwm;

tmp_pwm=PWM;

if(tmp_pwm>

MaxPWM)

{

tmp_pwm=MaxPWM;

PORTC|=ROT;

}

if(Strom>

MAX_STROM)

OCR1A=0;

OCR1B=0;

OCR2=0;

PORTD&

=~0x38;

DebugOut.Analog[6]++;

Strom--;

}

else

#ifdef_32KHZ

OCR1A=tmp_pwm;

OCR1B=tmp_pwm;

OCR2=tmp_pwm;

#endif

#ifdef_16KHZ

}

voidDebugAusgaben(void)

DebugOut.Analog[0]=Strom;

DebugOut.Analog[1]=Mittelstrom;

DebugOut.Analog[2]=PPM_Signal;

DebugOut.Analog[3]=OCR2;

voidPWM_Init(void)

PWM_OFF;

TCCR1B=(1<

<

CS10)|(0<

CS11)|(0<

CS12)|(0<

WGM12)|

(0<

WGM13)|(0<

ICES1)|(0<

ICNC1);

voidWait(unsignedchardauer)

dauer=(unsignedchar)TCNT0+dauer;

while((TCNT0-dauer)&

0x80);

voidRotBlink(unsignedcharanz)

sei();

//Interruptsein

while(anz--)

Delay_ms(300);

PORTC&

=~ROT;

Delay_ms(1000);

charAnwerfen(unsignedcharpwm)

unsignedlongtimer=300,i;

DISABLE_SENSE_INT;

PWM=5;

SetPWM();

Manuell();

MinUpmPulse=SetDelay(300);

while(!

CheckDelay(MinUpmPulse))

FastADConvert();

120)

STEUER_OFF;

RotBlink(10);

return(0);

PWM=pwm;

while

(1)

for(i=0;

i<

timer;

i++)

if(!

UebertragungAbgeschlossen)SendUart();

elseDatenUebertragung();

Wait(100);

//warten

DebugAusgaben();

60)

//AbschaltenwegenKurzschluss

timer-=timer/15+1;

if(timer<

25){if(TEST_MANUELL)timer=25;

elsereturn

(1);

Phase++;

Phase%=6;

AdConvert();

if(SENSE)

PORTD^=GRUEN;

#defineTEST_STROMGRENZE120

unsignedcharDelayM(unsignedinttimer)

while(timer--)

(TEST_STROMGRENZE+RuheStrom))

FETS_OFF;

return

(1);

unsignedcharDelay(unsignedinttimer)

#defineHIGH_A_EINPORTB|=0x08

#defineHIGH_B_EINPORTB|=0x04

#defineHIGH_C_EINPORTB|=0x02

#defineLOW_A_EINPORTD|=0x08

#defineLOW_B_EINPORTD|=0x10

#defineLOW_C_EINPORTD|=0x20

voidMotorTon(void)

unsignedcharADR_TAB[9]={0,0,2,1,3,4,5,6,7};

unsignedinttimer=300,i;

unsignedintt=0;

unsignedcharanz=0,MosfetOkay=0,grenze=50;

Delay_ms(300*ADR_TAB[MotorAdresse]);

cli();

//GlobaleInterruptsAusschalten

uart_putchar('

\n'

);

Strom_max=0;

DelayM(50);

RuheStrom=Strom_max;

Strom=0;

if(UDR=='

'

){t=65535;

grenze=40;

_'

}elset=1000;

//Ausf黨rlicherTest

t;

i++)

LOW_A_EIN;

DelayM

(1);

Delay(5);

HIGH_A_EIN;

grenze+RuheStrom){anz=4;

4'

break;

Delay(10000);

LOW_B_EIN;

HIGH_B_EIN;

grenze+RuheStrom){anz=5;

5'

break;

LOW_C_EIN;

HIGH_C_EIN;

grenze+RuheStrom){anz=6;

6'

if(anz)while

(1)RotBlink(anz);

//beiKurzschlussnichtstarten

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

//+High-MosfetsaufSchaltentesten

SENSE_A;

//LowBein

//LowCein

#defineTONDAUER40000

#defineSOUND_E1//1

#defineSOUND1_A300

#defineSOUND2_A330

#defineSOUND3_A360

i<

(TONDAUER/SOUND2_A);

i++)

//TestA

Delay(SOUND_E);

if(MessAD(0)>

50){MosfetOkay|=0x01;

}else{MosfetOkay&

=~0x01;

};

PORTB=0;

Delay(SOUND1_A);

//LowAein

(TONDAUER/SOUND1_A);

//TestB

if(MessAD

(1)>

50){MosfetOkay|=0x02;

=~0x02;

(TONDAUER/SOUND3_A);

//TestC

if(MessAD

(2)>

50){MosfetOkay|=0x04;

=~0x04;

Delay(SOUND2_A);

//+Low-MosfetsaufSchaltentesten

//SENSE_B;

128){MosfetOkay&

=~0x08;

}else{MosfetOkay|=0x08;

//++++++++++++++++++++++++++++++++++++

=~0x20;

}else{MosfetOkay|=0x20;

Delay(SOUND3_A);

=~0x10;

}else{MosfetOkay|=0x10;

//Hauptprogramm

intmain(void)

charaltPhase=0;

inttest=0;

unsignedintBlink,TestschubTimer;

unsignedintBlink2,MittelstromTimer,DrehzahlMessTimer,MotorGestopptTimer;

DDRC=0x08;

PORTC=0x08;

DDRD=0x3A;

PORTD=0x00;

DDRB=0x0E;

PORTB=0x31;

#defineADRESSOFFSET0

#if(MOTORADRESSE==0)

PORTB|=(ADR1+ADR2);

//Pullupsf黵Adresswahl

for(test=0;

test<

500;

test++);

if(PINB&

ADR1)

if(PINB&

ADR2)MotorAdresse=1+ADRESSOFFSET;

elseMotorAdresse=2+ADRESSOFFSET;

else

ADR2)MotorAdresse=3+ADRESSOFFSET;

elseMotorAdresse=4+ADRESSOFFSET;

HwVersion=11;

#else

MotorAdresse=MOTORADRESSE;

HwVersion=10;

#endif

if(PIND&

0x80){HwVersion=12;

IntRef=0xc0;

}

DDRD=0xBA;

UART_Init();

Timer0_Init();

sei();

//GlobaleInterruptsEinschalten

PWM_Init();

InitIC2_Slave(0x50);

InitPPM();

Blink=SetDelay(101);

Blink2=SetDelay(102);

MinUpmPulse=SetDelay(103);

MittelstromTimer=SetDelay(254);

DrehzahlMessTimer=SetDelay(1005);

TestschubTimer=SetDelay(1006);

CheckDelay(MinUpmPulse))

if(SollwertErmittlung())break;

GRN_ON;

PWM=0;

SFIOR=0x08;

//AnalogComperatorein

ADMUX=1;

MinUpmPulse=SetDelay(10);

DebugOut.Analog[1]=1;

PPM_Signal=0;

SollwertErmittlung())MotorTon();

//Pullupswiedereinschalten

//zumTestderHardware;

MotordrehtmitkonstanterDrehzahlohneRegelung

if(TEST_MANUELL)Anwerfen(TEST_MANUELL);

//kommtvondortnichtwieder

while

(1)

TEST_SCHUB)PWM=SollwertErmittlung();

//I2C_TXBuffer=PWM;

//Antwort黚erI2C-Bus

if(MANUELL_PWM)PWM=MANUELL_PWM;

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

if(Phase!

=altPhase)//esgabeineKommutierungimInterrupt

MotorGestoppt=0;

ZeitFuerBerechnungen=0;

//direktnacheinerKommutierungistZeit

MinUpmPulse=SetDelay(250);

//Timeout,fallseinMotorstehenbleibt

altPhase=Phase;

PWM)//Sollwert==0

MotorAnwerfen=0;

//keinStartversuch

//nach1,5SekundendenMotoralsgestopptbetrachten

if(CheckDelay(MotorGestopptTimer))

MotorGestoppt=1;

if(MotorGestoppt)MotorAnwerfen=1;

//Startversuch

MotorGestopptTimer=SetDelay(1500);

if(MotorGestoppt&

&

!

TEST_SCHUB)PWM=0;

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

ZeitFuerBerechnungen++)

if(MotorGestoppt)

//GRN_ON;

if(SIO_DEBUG)

DebugAusgaben

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小学作文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1