找回密码
 注册
关于网站域名变更的通知
查看: 4686|回复: 38
打印 上一主题 下一主题

德国MK项目BLDC电调程序的源码!

  [复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-23 13:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
德国MK项目BLDC电调程序的源码!
7 l9 v4 l  {. ^. m1 x7 I4 I; D" I4 k" _: P; `+ K5 X$ h& \, D- }& u* v
#include "main.h"
* [1 |: b1 q  N2 {' l) h% Hunsigned int  PWM = 0;
* l% o& z4 q# |! n1 Gunsigned int  Strom = 0; //ca. in 0,1A
/ R! m3 C8 J: ^- `8 o) ?/ o5 dunsigned char Strom_max = 0;4 A- Q& f. M' D- w3 ~: |) N3 x9 ~3 k' U
unsigned char Mittelstrom = 0;$ |' k* G% c7 G5 t  ^# Y
unsigned int  Drehzahl = 0;  // in 100UPM  60 = 6000
8 ~& ~7 b! q* }+ u$ Y" wunsigned int  KommutierDelay = 10;: d; \% Z& P, w" a& m
unsigned int  I2C_Timeout = 0;3 m' s2 V  ?$ b& P8 c! W, F
unsigned char SIO_Timeout = 0;  ?3 y7 }4 m9 h. v
unsigned int  SollDrehzahl = 0;
& c+ O5 v. _5 ^% junsigned int  IstDrehzahl = 0;
7 u  q: l) a9 ounsigned int  DrehZahlTabelle[256];//vorberechnete Werte zur DrehzahleRFassung" o: p% o0 D" i; e. m- y/ A
unsigned char ZeitFuerBerechnungen = 1;: |3 |6 \' t9 g5 e9 R6 k* V
unsigned char MotorAnwerfen = 0;
! B, D+ d. ]4 j# `; Q  Bunsigned char MotorGestoppt = 1;0 d& G0 X) i$ c4 G5 W
unsigned char MaxPWM = MAX_PWM;4 D- B* @! o" h
unsigned int  CntKommutierungen = 0;
+ t! A9 V& U: k: s( cunsigned int  SIO_Drehzahl = 0;
- ^4 H' J( C! t+ ?5 N  D' Yunsigned char ZeitZumAdWandeln = 1;) S  k8 D' Y& l2 K+ L
3 u9 p; ]8 \( M' a, @8 y& k" C) y
//############################################################################
) h/ H9 Y( _5 K+ K, G8 y) J//
1 E6 N$ l) Y% {2 R3 b. \void SetPWM(void)
- C) C: T6 Q* t! p3 m) s0 d% M5 K//############################################################################- j3 b4 y4 z$ i7 n+ ]: |
{8 T+ T8 O7 M' Z0 m% O% f5 V
    unsigned char tmp_pwm; : K9 t, d( y( N& f  }/ y; i
    tmp_pwm = PWM;
0 K1 u/ l* F7 ]$ T9 h6 T/ I    if(tmp_pwm > MaxPWM)    // Strombegrenzung
& M' M$ |: H0 k. |- i/ `8 s        {: v+ j8 U' T! q$ s
        tmp_pwm = MaxPWM;
5 ?0 m, v" r) E9 f5 h" j. A$ C  E        PORTC |= ROT; : E4 c3 k  Y" f& y0 r4 P7 e
        } $ f$ @- _! ^( d" }' P, r
    if(Strom > MAX_STROM)   // Strombegrenzung
7 r$ k/ d' f. U3 O, s$ k- R* ^. ~        {
  l" U) U" @; M        OCR1A = 0; OCR1B = 0; OCR2  = 0;, J% R0 }. Z  @+ j/ M  T) J+ Q5 M
        PORTC |= ROT; 2 e/ X1 s9 ]' b0 e* |( z
        Strom--;
* p- B! R9 Y, c* L  m! n        }
- U/ `$ @0 @! ^) e, i* H  a    else
( [8 n, G' i& M; f        {) O' F3 {3 }+ ]5 X2 F8 c7 h6 [
        #ifdef  _32KHZ
  u: e/ M! m. q6 I        OCR1A =  tmp_pwm; OCR1B =  tmp_pwm; OCR2  = tmp_pwm;# A3 X2 a' a! Z4 A+ V2 O6 k
        #endif ( Z6 |8 ^- B6 b
        #ifdef  _16KHZ 8 j  z& r  L5 M  u
        OCR1A = 2 * (int)tmp_pwm; OCR1B = 2 * (int)tmp_pwm; OCR2  = tmp_pwm;
! u% h* E! k  V7 Z2 J+ `        #endif ( X2 x' L$ w$ O( C
        }
) b0 x# l0 h6 }; X  `}
. Y8 N4 P) v  U- Y* \6 {- s1 ?//############################################################################
! |" x7 e6 J: S$ R6 p//& L, t0 |* a; Y, y+ r6 C
void PWM_Init(void)
* H& }4 Y0 ?: f/ C; \& O//############################################################################
1 T. A# H/ B, Y{
8 s8 j, d" M3 I' D+ h    PWM_OFF;( u6 S2 [$ T% g4 y/ x" ^' B5 c
    TCCR1B = (1 << CS10) | (0 << CS11) | (0 << CS12) | (1 << WGM12) |
( q5 ]9 }% x5 E# p9 b             (0 << WGM13) | (0<< ICES1) | (0 << ICNC1);
3 ~' G: c9 _! q9 c! N$ G' t}
. C4 N; t* n5 g//############################################################################( E. V( `, `2 x
//3 _" O$ R1 S) U2 ~9 G( k2 V2 \# b1 h3 l
void Wait(unsigned char dauer)
! Q- i# j. s! ^/ o; k//############################################################################& y; W( X- b. D  g" e6 A' G) c
{
& R- k& Q" s0 t: K9 {# F: {* }    dauer = (unsigned char)TCNT0 + dauer;
/ X$ C2 A. {0 }( t( K) n    while((TCNT0 - dauer) & 0x80);. p: A3 l& Q- P/ |. H, Y+ g. M
}, B3 g* b6 ^. Q
//############################################################################/ Q$ b# {3 {- e2 t! K
//
. u+ n1 b7 T0 F& i. Avoid Anwerfen(unsigned char pwm)9 s7 V4 v9 K1 \: O
//############################################################################
' U8 B. x2 ~; V: `& |* _{
2 R" m9 n0 E" k; [: m/ q2 w    unsigned long timer = 300,i;
( \2 X! ?' Q6 b. R! }4 J0 h    DISABLE_SENSE_INT;
& G+ C* {! }" C% W: S    PWM = 5;
2 ^/ h6 F0 n  V8 Y: e+ K    SetPWM();, K6 ]& ]) i- B/ }& ?: s$ {0 y
    Manuell();
  J3 h8 N0 K4 L3 _4 x    Delay_ms(200);! d: F' |, r4 [3 O  `9 N* U
    PWM = pwm;8 d, T* l4 i- V' `: R7 J& I
    while(1)1 r5 b$ L: ^  K3 i! v; o
        {- X4 y5 W. N/ y) `* q
        for(i=0;i<timer; i++) . _! p" K- T7 Z! L5 o: |
            {  y  k) K5 ?; W2 n: a9 F0 O/ r
            if(!UebertragungAbgeschlossen)  SendUART();
  V/ H. v, i- i# t5 r            else DatenUebertragung();# [, C: j; [  N1 ]+ I9 A
            Wait(100);  // warten1 G$ B) }3 J+ B: e* a: L
            } # ?. u' |8 B/ v+ \. Y" H
        timer-= timer/15+1;
# X0 n) Y7 c: a+ Q: s        if(timer < 25) { if(TEST_MANUELL) timer = 25; else return; }
! l! q8 o4 X& O, K        Manuell();
0 ^9 L4 G) K. \" s0 d7 _- B        Phase++;. m, ^0 x. o8 q: C, K0 Y
        Phase %= 6;
$ _  e$ ~0 S! |2 P& C9 o$ g        ADConvert();
" J. C- s7 |: Y- K1 @, }# A! u        PWM = pwm;! O; w. M' N, H0 w* p: C
        SetPWM();$ Y4 S& K9 ^+ n% Z
        if(SENSE) . y  T3 Q( @- Y$ z3 b$ ]' v
            {
/ Z* b8 I# i! {; [0 T            PORTD ^= GRUEN;
# o) h! _- f5 I            } : E% y, m1 _- j* _  E# @: q  ]
        }
8 {6 }  X& c; p: T/ d3 |- D}! O4 u+ X/ }. f5 L; r' O
//############################################################################
# b2 X* X& j- @! _" e* G, t//
( Q( R: I, T' j8 o, b" K& Vunsigned char SollwertErmittlung(void)
$ }0 U* D. E; E7 H//############################################################################  j* A+ N/ o2 V+ D: n* C3 G( ^; [
{8 W; W& }: s  a* p0 I3 n
    static unsigned int sollwert = 0;' q0 J% W5 o2 J" G: |$ v* q
    unsigned int ppm;; s4 h5 l( B% X7 l' Y/ d8 ~) [5 S
    if(!I2C_Timeout)   // bei Erreichen von 0 ist der Wert ungültig
* w) i' q2 V* E8 \% S2 }; D- p6 _        {
/ J# W1 {  n. B' T3 p$ ~% L        if(SIO_Timeout)  // es gibt gültige SIO-Daten# x. ?0 d, g' U/ Y" b
            {& V( |6 x  G% G. \- r* y
            sollwert =  (MAX_PWM * (unsigned int) SIO_Sollwert) / 200;  // skalieren auf 0-200 = 0-255/ j- |9 B; i/ c, Z, c/ Y2 N) [% A; I
            }
9 M4 n2 A& N) p: d  j        else0 z2 V: |7 o# t9 R8 G4 P, W% k4 c
            if(PPM_Timeout)  // es gibt gültige PPM-Daten
9 a6 }. L4 Y3 n4 u: {                {7 p& T' e  k! ~
                ppm = PPM_Signal;5 E3 @+ y5 l) W5 r  E# r
                if(ppm > 300) ppm =   0;  // ungültiges Signal, N, I- E5 e% {* |/ ?
                if(ppm > 200) ppm = 200;! r: m, m: l/ P
                if(ppm <= MIN_PPM) sollwert = 0;; K6 e+ I- s) w9 A; z- [3 O4 N
                else 6 M' N* T& W, C1 |! l0 x
                    {( ?% f9 r6 }# W: S5 i. Q/ b, N1 \1 m
                    sollwert = (int) MIN_PWM + ((MAX_PWM - MIN_PWM) * (ppm - MIN_PPM)) / (190 - MIN_PPM);
  |, R: M3 F; Q1 h- ^6 W                    }
" k' w3 d4 K6 p2 d6 ^. l4 ^                PORTC &= ~ROT;( V! F# s# ]9 h3 F$ z7 G5 v
                }1 q3 w& V1 [1 p  k7 o" _8 |
            else   // Kein gültiger Sollwert
/ r' ~9 g4 G1 u8 w4 c7 a                {
. C. a# X4 l6 r$ k                if(!TEST_SCHUB) { if(sollwert) sollwert--; }   4 i1 m7 u1 q; q! ?
                PORTC |= ROT;
- D& Q+ ~% A' }. _& E- t                }3 Z& ^/ L  T2 P5 ]/ l  o# c4 N
        }( Q/ j* h* Q' Z# [& r  q
    else // I2C-Daten sind gültig
& _! r% C7 L; b. N$ V7 y( c        {
# E5 h) ?7 @; X        sollwert = I2C_RXBuffer;
. ~  A+ V0 a5 M, u" }. {8 c        PORTC &= ~ROT;+ q" E7 l$ m- X
        }
% t* i, s9 D3 `$ ^8 c" N    if(sollwert > MAX_PWM) sollwert = MAX_PWM;: ?+ n) n; B4 n! Q( F  N
    return(sollwert); - e2 j* J9 X8 j1 C6 Y& c
}
5 ^; b: L! ?/ D! P3 fvoid DebugAusgaben(void): q* Y) _3 F8 u; j' i
{
* Z& {1 t' K* b7 w2 o7 X    DebugOut.Analog[0] = Strom;
0 o* G8 y1 K' w; h! r    DebugOut.Analog[1] = Mittelstrom;# V9 _8 q6 m0 ?' w# i
    DebugOut.Analog[2] = SIO_Drehzahl;
6 ~: w6 r2 g) l: a    DebugOut.Analog[3] = PPM_Signal;* K+ B' \, S- A6 v6 r. x0 L
}
& l) g  O& ^5 V6 @: ?% d5 J' r0 U- \# N% k
//############################################################################: Q% L) ]& g; B& Z- K# I& ?. h
//Hauptprogramm7 e. [2 g$ o: k% N
int main (void)
* x7 \7 w1 X( @) y0 ~8 B//############################################################################
2 C8 v( z7 v; z& ]# d6 l: f* L8 M{( o. s' o2 I$ S
    char altPhase = 0;. l8 C! V2 c" K3 ~7 k5 f( P3 ^
    int test = 0;* G9 _( R" e7 R0 p4 X) k
    unsigned int MinUpmPulse,Blink,TestschubTimer;; ^0 c8 k4 s2 v$ L) h
    unsigned int Blink2,MittelstromTimer,DrehzahlMessTimer,MotorGestopptTimer;" O5 w' q' v/ h) i1 y: D/ f
    DDRC  = 0x08;$ S% s! d0 e  |: [2 L  [
    PORTC = 0x08;! M6 b+ ~3 P: j8 W4 U
    DDRD  = 0xBA;. [9 k5 r3 J: j9 y" }
    PORTD = 0x80;+ _7 Z3 _; E) M
    DDRB  = 0x0E;
& x/ x+ @+ I; O9 [: l1 i    PORTB = 0x31;/ y, b: e% V4 h7 E* [, T; o* r8 A
   
: R" ]+ l0 A/ Z% Q4 V    UART_Init();6 `. q! h6 w2 R6 j" Q) P1 T. X
    Timer0_Init();* z) h4 o" B- S- J1 T0 o
    sei ();//Globale Interrupts EinschaLTEn
. |5 Y/ i- \% t: f   
7 s! O9 k: v) K; U; `    // Am Blinken erkennt man die richtige Motoradresse
3 Q' U" S0 t, A" j    for(test=0;test<5;test++)! c" v% h# n+ ^0 b! X% E
        {& d3 m" k0 _& n& t7 y, o- A* g) f
        if(test == MOTORADRESSE) PORTD |= GRUEN;
! l8 p/ c& H" U2 |8 T7 v5 i        Delay_ms(150);0 S; U6 F4 I' w& b
        PORTD &= ~GRUEN;
; k: h' ~+ w4 Q2 a$ L        Delay_ms(250);
# m) w2 A. ?# j( T        }      
9 N" y' D( e7 d. t( [1 g  G& d0 ]5 c    Delay_ms(500);
5 J! r$ f8 \# O! \   : o$ R9 o! W1 ~: I, h' K  P
    UART_Init();
! u8 r7 [# Q  {1 C    PWM_Init(); 5 A. t2 r5 e$ W6 i' f
    InitIC2_Slave(0x50);                            / Y' V8 d- K$ ?7 K& _
    InitPPM();$ n* M# o- I. @( `
    Blink             = SetDelay(101);    ' L( w$ v! o9 J
    Blink2            = SetDelay(102);
8 H: j- y6 ?% y' d- P* c7 W+ c% ^+ O    MinUpmPulse       = SetDelay(103);
8 r- r& R1 n8 {6 g* s' ?: j, A    MittelstromTimer  = SetDelay(254);
* l0 w8 X; K% [1 j, O# o( I, e    DrehzahlMessTimer = SetDelay(1005);
0 o6 R, d( B0 h    TestschubTimer    = SetDelay(1006);8 X  f! \# @' s: U
    while(!CheckDelay(MinUpmPulse));6 h8 W. j( p2 i; {: A: Y+ s
    PORTD |= GRUEN;
8 l* U9 ^3 B4 c  Z, n4 h6 M    PWM = 0;3 U" g4 R: {) x5 `, K( p
    SetPWM();' h5 j7 A; v% E
    SFIOR = 0x08;  // Analog Comperator ein
, q. r5 y" T: M    ADMUX = 1;
( V5 J5 `; n2 y9 m. q* D2 m    MinUpmPulse = SetDelay(10);
- S* C2 L$ B/ x* W3 c3 P    DebugOut.Analog[1] = 1;
7 y" L2 R4 W  K. z. v* Q    PPM_Signal = 0;
0 R5 Y/ o# w; f5 Z. z( T! G0 `9 B    // zum Test der Hardware; Motor dreht mit konstanter Drehzahl ohne Regelung
" p2 U' U! s1 ?    if(TEST_MANUELL)    Anwerfen(TEST_MANUELL);  // kommt von dort nicht wieder6 Z6 K% W& {6 t/ |' U# i$ P
    while (1)3 v: Y# E8 m  N! \6 V, s( F
        {; \+ ?) o. H' W+ K% q1 I
        if(!TEST_SCHUB)   PWM = SollwertErmittlung();
& F, Q. f5 m9 V2 K' Q' |' {        //I2C_TXBuffer = PWM; // Antwort über I2C-Bus& v% u1 w% d8 X  a0 o
        if(MANUELL_PWM)   PWM = MANUELL_PWM;
% j+ N: B% O! Z7 s        // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++9 y* Q+ n) x) `3 P7 ]
        if(Phase != altPhase)   // es gab eine Kommutierung im Interrupt
3 e6 V. G& L) z' ]; g1 Q            {. \0 w$ S. J# y
            MotorGestoppt = 0;9 H" `9 x! e( g0 }4 g
            ZeitFuerBerechnungen = 0;    // direkt nach einer Kommutierung ist Zeit
) u7 k) C$ ~3 b1 _) Y            MinUpmPulse = SetDelay(50);  // Timeout, falls ein Motor stehen bleibt
' g6 @' b0 `# k: b6 _- ]! [) Q            altPhase = Phase;
9 O$ i7 `& H! \- ?5 _8 D8 g- q3 O! h            }
3 J- C  C2 t% @' B; u        // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
: f) I' E' L/ f0 Q        if(!PWM)    // Sollwert == 09 q! W( u: m  p2 e2 B' n, X+ ?. d
            {
# Q0 k9 ]* E: l; b# e            MotorAnwerfen = 0;      // kein startversuch
& O8 ^( A& m3 u4 u            ZeitFuerBerechnungen = 0;1 x' ?- ^9 b/ }
            // nach 1,5 Sekunden den Motor als gestoppt betrachten ! G, `. g; N0 y5 N3 s4 G5 C# _
            if(CheckDelay(DrehzahlMessTimer)) + y8 @5 p5 T5 L3 \# R& a/ ?+ ^
                {
9 Y# F3 x& T" N2 M$ o' I                DISABLE_SENSE_INT;
8 @6 \- r7 x6 x) ^8 p                MotorGestoppt = 1;  ! }; z3 d& W; Q+ }4 n
                STEUER_OFF;
9 {' R0 A$ X. Y; [) I, V                } * V( Z3 R. a; C: M/ r+ x
            }
6 e2 b, ], G% O6 j' w        else . O) G( }" V) G, B7 M/ G
            {
8 o2 W0 o, f9 y/ R; q) |/ S            if(MotorGestoppt) MotorAnwerfen = 1;        // Startversuch6 ^" P: H' p% \, T" [0 c5 j7 X
            MotorGestopptTimer = SetDelay(1500);4 x9 T; |3 Y4 o. S! S5 j
            }
8 h) u# S9 u5 z! K- c( S        if(MotorGestoppt && !TEST_SCHUB) PWM = 0;
2 y- w% U; |& ?. D* ?3 z3 ~        SetPWM();7 j8 f4 ~' N# K. z  T( U
        // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++) O4 {9 c5 B: \% s
        if(!ZeitFuerBerechnungen++)
8 r. w6 ~! \# u4 [% K) s            {
! |+ `* A* A5 p! ~+ b  ~7 W+ Z            if(MotorGestoppt) PORTD |= GRUEN; //else PORTD &= ~GRUEN;
5 K% T7 f$ ^6 F5 i            if(SIO_DEBUG)
( P" U& F9 E+ x" L                {
$ V" N* `. ?& e, Z3 a/ }/ @                DebugAusgaben();  // welche Werte sollen angezeigt werden?
) o. F! @) y2 q+ q9 M- x" H                if(!UebertragungAbgeschlossen)  SendUart();
4 z9 d, v5 X0 ?) ]                else DatenUebertragung();
. N0 T0 C1 ^1 }3 K7 \1 W                }
( X: O5 }1 R/ Z# t- A4 m* ~            // Berechnen des Mittleren Stroms zur (langsamen) Strombegrenzung
; v$ p& [. R; l/ I9 Z2 \            if(CheckDelay(MittelstromTimer))   - V4 S& ]3 ]' k5 ^9 q) j
                {  F& L' i: t) ^$ K
                MittelstromTimer = SetDelay(50); // alle 50ms: |+ p0 x( w/ W: a/ |) s
                if(Mittelstrom <  Strom) Mittelstrom++;// Mittelwert des Stroms bilden
: q' q+ v) E+ f- X+ b* A* |) h                else if(Mittelstrom >  Strom) Mittelstrom--;
& Y" U2 @; k1 W. B" W      
/ q5 {. r8 P1 {0 u                if(Mittelstrom > LIMIT_STROM)// Strom am Limit?
) Z/ b9 G" `6 q7 @5 G8 j                    {- O1 r' Z2 t% K; H
                    MaxPWM--;// dann die Maximale PWM herunterfahren" H4 K$ G8 \& ?. ?/ _/ L# Y7 ~0 f
                    PORTC |= ROT;
$ B" X5 h- t# `4 ?' ]$ W                    }
0 h8 L2 l* E# X% m5 u% t* f9 l( t                else 2 Q1 J7 k* ]5 M8 b0 a
                    {
& w8 V& l8 j- Z" F# _: w                    if(MaxPWM < MAX_PWM) MaxPWM++;" |! }6 N  I$ ]( K) d  v' X
                    }) v/ I+ d; |) m; p2 ^9 v
                }1 n2 w0 ]) V! m5 N: o9 }9 ]
            if(CheckDelay(DrehzahlMessTimer))   // Ist-Drehzahl bestimmen
! I. H, H, H. k- T. Z                {9 ?" D& x; L! i7 T0 R" b
                DrehzahlMessTimer = SetDelay(10);0 t$ y4 p# k; |, c
                SIO_Drehzahl = (6 * CntKommutierungen) / (POLANZAHL / 2);* N4 p, h( L+ @
                CntKommutierungen = 0;
% q9 N( E$ [9 l4 x7 q                if(PPM_Timeout == 0) // keine PPM-Signale$ m6 R) T% k) E9 v/ m' M, {  L
                ZeitZumAdWandeln = 1;
3 g; u; \6 I& N( B7 z' N; p# j                }
/ E. M# r0 Z2 Q: v" w$ D) F, _# l& T) p  O. b" p) M& d) Y7 g
            if(CheckDelay(TestschubTimer))  
: ~0 l5 }; N1 p1 a* C                {
. N( \7 `2 L; e6 o$ d/ Q/ m; w  K                TestschubTimer = SetDelay(1500);
. I; @& o( C5 |2 B# d                if(TEST_SCHUB); t; G8 O( d) {
                    {. T4 H' s2 L/ {) d% D" `
                    switch(test) - p; q* k5 m! m$ g9 }& C. `  r
                        {
1 N8 p) X5 O5 Y0 W, d: G3 g& O                        case 0: PWM = 50; test++; break;
- Q( p! D/ K- V! [1 \% I1 O                        case 1: PWM = 130; test++; break;) S4 Y3 n, y# o  J: F4 P
                        case 2: PWM = 60;  test++; break;
; n: S% G6 ?9 c/ X+ b6 r; q- C                        case 3: PWM = 140; test++; break;9 {1 j. V- f  d0 o2 E% [1 e& M
                        case 4: PWM = 150; test = 0; break;
8 e: F' e+ E% D: n6 W                        default: test = 0;
- }5 [. M; g7 V4 ?8 P                        }   k! j( Y1 i. V# [) W; Y7 X( }% W/ \* w
                    }
  n" y' E+ e4 K" C/ X                }
2 ~' O& k6 O1 D$ i: ?- x            // Motor Stehen geblieben6 U* U- C: C4 [% H5 J0 p, b
            if((CheckDelay(MinUpmPulse) && SIO_Drehzahl == 0) || MotorAnwerfen)
' G$ _  @8 T" o! [                {
! R0 f7 T$ t+ _+ f: X: b2 h: V                MotorGestoppt = 1;   
. l" t1 [" S" D- b. M                DISABLE_SENSE_INT;+ U1 p  m  `, q" l
                MinUpmPulse = SetDelay(100);         
' J  E  O- C2 C. J# O2 s                if(MotorAnwerfen)' n) j( K8 Z$ M% A8 n
                    {
, l$ }$ s2 K& A4 d9 E                    PORTC &= ~ROT;
; A. J9 H1 E: T- c3 G                    MotorAnwerfen = 0;
! {9 ~2 p( W5 J2 N5 a; ?# Q! O  o+ d                    Anwerfen(10);
! ~: D: F7 t" c4 S) I                    PORTD |= GRUEN;' `7 o# a! T" M* e& j2 X
                    MotorGestoppt = 0;   
9 y8 n: ~1 |+ I; c9 v- s5 d9 m                    Phase--;& l* k! S) f8 F9 I8 U* g* ?9 e1 t
                    PWM = 1;  ^# _: m* ]" b& s, J+ ?! G( k
                    SetPWM();! K7 Q% X% Y! N' o9 z8 }0 U
                    SENSE_TOGGLE_INT;
" Y8 a8 j: D  \/ ~  j0 q4 |+ n4 ?                    ENABLE_SENSE_INT;  j9 [3 d0 b, [8 O5 O0 x! l
                    MinUpmPulse = SetDelay(100);
0 k$ O5 z* F7 n2 v                    while(!CheckDelay(MinUpmPulse)); // kurz Synchronisieren3 Y& V% g: I) w/ b6 h  x8 Q
                    PWM = 10;
  I/ W! i3 a' p# J: W                    SetPWM();
  S# \2 n% U& J9 h  t* J% S                    MinUpmPulse = SetDelay(200);
% O* Z  {" G5 E) W( B# Y                    while(!CheckDelay(MinUpmPulse)); // kurz Durchstarten! D9 X, K, M5 M- H) p
                    MinUpmPulse = SetDelay(1000);
8 y/ N+ A* ]2 {9 o                    altPhase = 7;
. P: O3 ^3 {0 Q2 {8 [                    }
( j1 t6 c; ^- Q5 J, E* `) T- A                }& `5 u7 q. i4 C% A* g5 C2 u3 l8 P
            } // ZeitFuerBerechnungen5 M, k, m& F6 [+ y9 x$ s
        } // while(1) - Hauptschleife$ e' e: d. V9 G1 }( [$ Z& f: E
}; j3 v+ v- j+ P& d; E. r' g
这个是部分的源码 有想要了解的就去下载看吧7 W4 U/ i; e; O$ u' s
下载:
( [  V6 ]' R/ c( X, j+ s1 v. p7 q5 f
游客,如果您要查看本帖隐藏内容请回复
3 j- `3 P& v# u& b( I

, U" |" X& S( f' T0 i8 W

该用户从未签到

推荐
发表于 2020-8-10 23:32 | 只看该作者
看看                      , K/ m, q2 F2 O1 B# R2 S, ~

该用户从未签到

推荐
发表于 2020-7-31 14:05 | 只看该作者
感谢分享DDDDDDDDDDDDDDDDDDDDDDDDDD5 y1 U5 o$ w/ l

该用户从未签到

推荐
发表于 2021-5-31 18:00 | 只看该作者
好文章。 感谢分享!感谢分享!感谢分享

该用户从未签到

7#
发表于 2019-6-15 19:32 | 只看该作者
谢谢分享,学习参观

该用户从未签到

9#
发表于 2019-6-25 16:34 | 只看该作者
看一下啥情况

该用户从未签到

11#
发表于 2019-7-25 14:25 | 只看该作者
正好需要,很感谢
4 i; X% M% C  a& S. H# s

该用户从未签到

12#
发表于 2019-8-5 14:20 | 只看该作者
谢谢分享,学习参观!

该用户从未签到

13#
发表于 2019-8-22 22:27 | 只看该作者
好东西,顶一下0 N/ X8 o/ K5 X# _8 X3 F2 ^# V
; u- f4 I$ [9 c/ D( t

该用户从未签到

14#
发表于 2020-3-5 20:43 | 只看该作者
谢谢分享,感谢楼主。1 L7 o; \8 }( \; t! q0 N8 s
  • TA的每日心情
    开心
    2020-3-31 15:19
  • 签到天数: 13 天

    [LV.3]偶尔看看II

    15#
    发表于 2020-3-10 10:02 | 只看该作者
    这里没看到控制算法?
    8 [& ?4 \% G) D
  • TA的每日心情
    奋斗
    2020-3-27 15:05
  • 签到天数: 2 天

    [LV.1]初来乍到

    16#
    发表于 2020-3-27 15:48 | 只看该作者
    谢谢分享,学习参观

    该用户从未签到

    17#
    发表于 2020-4-7 20:13 | 只看该作者
    谢谢分享,学习参观
    ( f( g7 H1 r8 D/ G9 Z+ m0 W

    该用户从未签到

    18#
    发表于 2020-5-24 21:48 | 只看该作者
    德国人但是
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-7 00:42 , Processed in 0.171875 second(s), 28 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表