ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:17.88KB ,
资源ID:17288959      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17288959.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(电调程序Word文档格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

电调程序Word文档格式.docx

1、 unsigned char tmp_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.Analog6+; Strom-; else #ifdef _32KHZ OCR1A = tmp_pwm; OCR1B = tmp_pwm; OCR2 = tmp_pwm; #endif #ifdef _16KHZ void DebugAusgaben(void) D

2、ebugOut.Analog0 = Strom; DebugOut.Analog1 = Mittelstrom; DebugOut.Analog2 = PPM_Signal; DebugOut.Analog3 = OCR2;void PWM_Init(void) PWM_OFF; TCCR1B = (1 CS10) | (0 CS11) | (0 CS12) | (0 WGM12) | (0 WGM13) | (0 ICES1) | (0 ICNC1);void Wait(unsigned char dauer) dauer = (unsigned char)TCNT0 + dauer; wh

3、ile(TCNT0 - dauer) & 0x80);void RotBlink(unsigned char anz)sei(); / Interrupts ein while(anz-) Delay_ms(300); PORTC &= ROT; Delay_ms(1000);char Anwerfen(unsigned char pwm) unsigned long timer = 300,i; DISABLE_SENSE_INT; PWM = 5; SetPWM(); Manuell(); MinUpmPulse = SetDelay(300); while(!CheckDelay(Min

4、UpmPulse) FastADConvert(); 120) STEUER_OFF; RotBlink(10); return(0); PWM = pwm; while(1) for(i=0;itimer; i+) if(!UebertragungAbgeschlossen) SendUart(); else DatenUebertragung(); Wait(100); / warten DebugAusgaben(); 60) / Abschalten wegen Kurzschluss timer-= timer/15+1; if(timer 25) if(TEST_MANUELL)

5、timer = 25; else return(1); Phase+; Phase %= 6; AdConvert(); if(SENSE) PORTD = GRUEN;#define TEST_STROMGRENZE 120unsigned char DelayM(unsigned int timer) while(timer-) (TEST_STROMGRENZE + RuheStrom) FETS_OFF; return(1);unsigned char Delay(unsigned int timer)#define HIGH_A_EIN PORTB |= 0x08#define HI

6、GH_B_EIN PORTB |= 0x04#define HIGH_C_EIN PORTB |= 0x02#define LOW_A_EIN PORTD |= 0x08#define LOW_B_EIN PORTD |= 0x10#define LOW_C_EIN PORTD |= 0x20void MotorTon(void) unsigned char ADR_TAB9 = 0,0,2,1,3,4,5,6,7; unsigned int timer = 300,i; unsigned int t = 0; unsigned char anz = 0,MosfetOkay = 0, gre

7、nze = 50; Delay_ms(300 * ADR_TABMotorAdresse); cli();/Globale Interrupts Ausschalten uart_putchar(n); Strom_max = 0; DelayM(50); RuheStrom = Strom_max; Strom = 0; if(UDR = ) t = 65535; grenze = 40;_ else t = 1000; / Ausf黨rlicher Testt;i+) LOW_A_EIN; DelayM(1); Delay(5); HIGH_A_EIN; grenze + RuheStro

8、m) anz = 4;4 break; Delay(10000); LOW_B_EIN; HIGH_B_EIN; grenze + RuheStrom) anz = 5;5break; LOW_C_EIN; HIGH_C_EIN; grenze + RuheStrom) anz = 6;6 if(anz) while(1) RotBlink(anz); / bei Kurzschluss nicht starten/+/+ High-Mosfets auf Schalten testen SENSE_A; / Low B ein / Low C ein#define TONDAUER 4000

9、0 #define SOUND_E 1 / 1#define SOUND1_A 300#define SOUND2_A 330#define SOUND3_A 360 i 50) MosfetOkay |= 0x01; else MosfetOkay &= 0x01; PORTB = 0; Delay(SOUND1_A); / Low A ein(TONDAUER / SOUND1_A); / Test B if(MessAD(1) 50) MosfetOkay |= 0x02;= 0x02;(TONDAUER / SOUND3_A); / Test C if(MessAD(2) 50) Mo

10、sfetOkay |= 0x04;= 0x04; Delay(SOUND2_A);/+ Low-Mosfets auf Schalten testen/ SENSE_B; 128) MosfetOkay &= 0x08; else MosfetOkay |= 0x08;/+= 0x20; else MosfetOkay |= 0x20; Delay(SOUND3_A);= 0x10; else MosfetOkay |= 0x10;/Hauptprogrammint main (void) char altPhase = 0; int test = 0; unsigned int Blink,

11、TestschubTimer; unsigned int Blink2,MittelstromTimer,DrehzahlMessTimer,MotorGestopptTimer; DDRC = 0x08; PORTC = 0x08; DDRD = 0x3A; PORTD = 0x00; DDRB = 0x0E; PORTB = 0x31;#define ADRESSOFFSET 0#if (MOTORADRESSE = 0) PORTB |= (ADR1 + ADR2); / Pullups f黵 Adresswahl for(test=0;test500;test+); if(PINB &

12、 ADR1) if (PINB & ADR2) MotorAdresse = 1 + ADRESSOFFSET; else MotorAdresse = 2 + ADRESSOFFSET; else ADR2) MotorAdresse = 3 + ADRESSOFFSET; else MotorAdresse = 4 + ADRESSOFFSET; HwVersion = 11;#else MotorAdresse = MOTORADRESSE; HwVersion = 10;#endif if(PIND & 0x80) HwVersion = 12; IntRef = 0xc0; DDRD

13、 = 0xBA; UART_Init(); Timer0_Init(); sei();/Globale Interrupts Einschalten PWM_Init(); InitIC2_Slave(0x50); InitPPM(); Blink = SetDelay(101); Blink2 = SetDelay(102); MinUpmPulse = SetDelay(103); MittelstromTimer = SetDelay(254); DrehzahlMessTimer = SetDelay(1005); TestschubTimer = SetDelay(1006);Che

14、ckDelay(MinUpmPulse) if(SollwertErmittlung() break; GRN_ON; PWM = 0; SFIOR = 0x08; / Analog Comperator ein ADMUX = 1; MinUpmPulse = SetDelay(10); DebugOut.Analog1 = 1; PPM_Signal = 0;SollwertErmittlung() MotorTon(); / Pullups wieder einschalten / zum Test der Hardware; Motor dreht mit konstanter Dre

15、hzahl ohne Regelung if(TEST_MANUELL) Anwerfen(TEST_MANUELL); / kommt von dort nicht wieder while (1)TEST_SCHUB) PWM = SollwertErmittlung(); /I2C_TXBuffer = PWM; / Antwort 黚er I2C-Bus if(MANUELL_PWM) PWM = MANUELL_PWM; / + if(Phase != altPhase) / es gab eine Kommutierung im Interrupt MotorGestoppt =

16、0; ZeitFuerBerechnungen = 0; / direkt nach einer Kommutierung ist Zeit MinUpmPulse = SetDelay(250); / Timeout, falls ein Motor stehen bleibt altPhase = Phase;PWM) / Sollwert = 0 MotorAnwerfen = 0; / kein Startversuch / nach 1,5 Sekunden den Motor als gestoppt betrachten 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