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

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

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
德国MK项目BLDC电调程序的源码!
9 a$ ~1 v  C% ]1 p- r1 c
  k: F% t+ M. F: S+ N1 G#include "main.h"
& ~* m$ N4 J' I+ Tunsigned int  PWM = 0;
% X1 {9 @9 o: c5 g( tunsigned int  Strom = 0; //ca. in 0,1A  ^( r# w* _  l$ Q0 R+ w1 u* y
unsigned char Strom_max = 0;. v, n) @8 Z5 [2 O$ V
unsigned char Mittelstrom = 0;
3 _! Y3 i7 [6 c6 b3 ^unsigned int  Drehzahl = 0;  // in 100UPM  60 = 6000& I7 Z! W% h8 v0 z2 ~
unsigned int  KommutierDelay = 10;) l$ S9 u& K* I% y- C2 h
unsigned int  I2C_Timeout = 0;+ u8 o2 x& q3 R1 D6 Q1 C
unsigned char SIO_Timeout = 0;
8 z" q7 x1 {2 d1 W& Cunsigned int  SollDrehzahl = 0;! M$ s( R6 h& u2 Z9 I& E, \3 U
unsigned int  IstDrehzahl = 0;. t- Z' q8 Y4 d) K" H3 Y5 k/ Z* q
unsigned int  DrehZahlTabelle[256];//vorberechnete Werte zur DrehzahleRFassung
1 W9 S+ T2 f0 d$ i& |" |unsigned char ZeitFuerBerechnungen = 1;
; [/ |4 Y! @) U" A1 W5 l6 i! dunsigned char MotorAnwerfen = 0;- Q2 t3 j$ x5 Z) f8 u0 p
unsigned char MotorGestoppt = 1;
3 ]0 h) A  B/ S# ounsigned char MaxPWM = MAX_PWM;
: q6 g: T" R* punsigned int  CntKommutierungen = 0;7 b4 t1 {5 z, P2 O( e4 T
unsigned int  SIO_Drehzahl = 0;, p/ D) H5 B8 y% m$ p
unsigned char ZeitZumAdWandeln = 1;. F& z4 z: h) v- _' N& k8 _! h4 K. A4 M

1 {- c  u$ T1 S, L//############################################################################" A4 j- Y$ r6 K" ~6 d( Z
//
2 V5 H1 H6 |; Fvoid SetPWM(void)
# w' _$ ?. ?1 j9 a( B; T& O//############################################################################: w( @/ g' p6 }$ e% k4 @1 V
{; ]. \1 C+ x, d9 A& [
    unsigned char tmp_pwm; " B. S7 \; B: K0 d6 m0 N6 i
    tmp_pwm = PWM;
# x$ o$ O0 P# w    if(tmp_pwm > MaxPWM)    // Strombegrenzung
5 r& G$ f0 a4 l2 p9 }        {
4 S* n! Y  d0 S; C8 H        tmp_pwm = MaxPWM;2 k" s, g; |" r1 n6 X
        PORTC |= ROT;
( d$ A) ]2 c5 k9 f$ W- ?' r. v        }
- Q5 [1 z$ z/ L5 }; x8 i9 H/ A    if(Strom > MAX_STROM)   // Strombegrenzung
. s- K) f1 Z3 F3 X% d; O        {
  F- o% z; f9 T' w6 j- u1 r        OCR1A = 0; OCR1B = 0; OCR2  = 0;1 F( O! O" G: X$ F
        PORTC |= ROT;
" V4 a/ v" t+ w2 l& e% M        Strom--;% L, C' }+ o" H  ~+ w
        }* A7 A1 D$ S1 S! o' w! p
    else
& _+ a0 @* \% u# e        {5 w; n: i+ r5 |- W3 e
        #ifdef  _32KHZ
7 O! V6 W$ P; n- {        OCR1A =  tmp_pwm; OCR1B =  tmp_pwm; OCR2  = tmp_pwm;
1 A0 G4 c( O, I: I1 b# Y        #endif . `& L% R1 u' l# W
        #ifdef  _16KHZ   r$ x1 x2 P( W2 i+ O0 C. u" u
        OCR1A = 2 * (int)tmp_pwm; OCR1B = 2 * (int)tmp_pwm; OCR2  = tmp_pwm;& \9 T. y/ X  p+ K7 c0 G$ o" Q: A
        #endif ; q2 ~1 ~9 o- V$ G- t3 ~
        }
' h; o+ ?: A9 H/ J}! C( G' E: O6 ^; v7 g) a& ?
//############################################################################
  |$ S9 n4 j# ~7 B5 T+ f1 V2 j' G//
/ m8 F$ `& c6 B5 b' M% E  ivoid PWM_Init(void)
8 B7 b7 J5 c. }0 Y; V//############################################################################: q/ \4 e9 ]6 R1 P$ N/ D9 P2 m
{
' q2 e. r1 q- d- O% f! P    PWM_OFF;, ?4 G2 i3 [: m% s- ~* G% @
    TCCR1B = (1 << CS10) | (0 << CS11) | (0 << CS12) | (1 << WGM12) | 3 d# d  ?7 V8 X
             (0 << WGM13) | (0<< ICES1) | (0 << ICNC1);
1 B2 J; O0 M, c9 p9 _6 U}" ~/ T3 H9 ~) ^! N# p( y
//############################################################################
  O- p- V5 h4 {2 G0 g# w! ?3 v//# w$ o; S2 L5 d6 w% w
void Wait(unsigned char dauer)
) f8 d2 a; l$ T* P$ J0 R' o//############################################################################
  ~7 b% n' M5 F1 |3 _4 c) S9 Y( u{
9 [' v( z8 a& Z. o' b    dauer = (unsigned char)TCNT0 + dauer;. e2 g" G6 A- A2 T0 K, T
    while((TCNT0 - dauer) & 0x80);2 D8 N9 n  |1 d$ Q" G, O' F
}
9 h5 g+ O5 W; u2 o+ y' W9 R' d& ^2 l//############################################################################& o5 x# u. Q* a6 O3 P4 A- k! h
//
, p! r+ i3 w0 h9 v3 @# avoid Anwerfen(unsigned char pwm)* Y! q5 I, ]( F$ Y8 w8 F: n% w
//############################################################################
% Y/ s4 c; e7 |" b& H{
4 ~- |4 H! F; V    unsigned long timer = 300,i;# N5 l: V  C9 T' q
    DISABLE_SENSE_INT;0 v+ e  J: e0 ]9 C: E
    PWM = 5;
0 k6 w- ^! g8 ]5 ]    SetPWM();
  B3 m0 P! s2 }* ^0 ~" N& A. O5 ]    Manuell();$ g1 w9 z+ p  h$ w3 H, L
    Delay_ms(200);
2 G; y6 s, g7 n/ A: d% p9 H    PWM = pwm;
+ M0 I: ]# t$ X4 Y    while(1). I# [% _- V' r7 t& \. Y9 f' I
        {
/ d) B) v& M7 f  W: l( R+ t& [        for(i=0;i<timer; i++) 8 a( V- e9 ]2 c4 k% B( P
            {
) q* v2 H2 L8 C            if(!UebertragungAbgeschlossen)  SendUART();/ S3 e" ~" b6 O* h# o" m
            else DatenUebertragung();5 l3 j/ M& e9 J# Z7 K& h0 P
            Wait(100);  // warten1 A3 S* O( ?$ \: W- |8 w
            }
3 @) }8 S5 E, D0 |- s% [/ P% e( o$ ]        timer-= timer/15+1;
, b* K1 C4 `, h! \8 j2 a. u5 L        if(timer < 25) { if(TEST_MANUELL) timer = 25; else return; }5 H& g6 ^+ e- C- o4 w: I
        Manuell();
6 ?; K2 H2 d# |6 X) @        Phase++;
3 L3 j% x0 F9 A8 G) c        Phase %= 6;, e) d" d0 I! L1 Y( n
        ADConvert();% W7 G3 u* ^( q& U7 x! g' i+ x7 U) `
        PWM = pwm;
! `- h5 X8 d* i/ J5 c7 G        SetPWM();
3 t) s' Q% i* N! z' x. u$ R        if(SENSE) - p! M7 _0 `6 M
            {- ^6 [3 v9 M/ t, c4 H3 v; |7 N
            PORTD ^= GRUEN;
3 H& S7 }& R2 J            }
9 r! B. z$ q+ ]" q' v4 }% I        }/ ^: [5 S/ X5 e/ @2 y$ {
}6 ^% y) a9 q2 [. u8 k* M0 K
//############################################################################0 o1 A4 H3 D/ ^4 }  C7 `% U
//' y$ G% F, B3 I. B# `: W
unsigned char SollwertErmittlung(void)( y% A7 X1 o" _8 @% K( U
//############################################################################
& Z  r7 B, F" |( o% ^6 R{. B/ C) O& }* ^: M6 s0 \
    static unsigned int sollwert = 0;
, B0 a' X( v! r- G9 t    unsigned int ppm;
6 j; |1 U& Z, O9 G6 J7 M    if(!I2C_Timeout)   // bei Erreichen von 0 ist der Wert ungültig5 k0 w- s: {* S. g% G. l
        {  A0 T" O. i# J( W
        if(SIO_Timeout)  // es gibt gültige SIO-Daten' Y* [( [' V  \) X
            {% p+ ?- Y$ ?' A) H7 q* s1 J& l
            sollwert =  (MAX_PWM * (unsigned int) SIO_Sollwert) / 200;  // skalieren auf 0-200 = 0-255$ H- L1 z( o, G2 @& e. q* p: ~
            }& a, p$ `' H. M( b" I: s
        else9 l" U5 f# q# F; C7 T
            if(PPM_Timeout)  // es gibt gültige PPM-Daten& E  N; |, k& @6 p( L
                {
! T0 U  E- ]% T) _+ |                ppm = PPM_Signal;
$ ]# l. n0 [' j$ ]5 a                if(ppm > 300) ppm =   0;  // ungültiges Signal
  e' F- B0 A' p. L( S                if(ppm > 200) ppm = 200;
1 Y: e  t7 ]( a: J( ~                if(ppm <= MIN_PPM) sollwert = 0;
! w/ n* [$ f/ b# K) i3 X+ V                else
7 u( e1 K7 n, [* b/ w2 B* D                    {
) h' p7 G7 D$ b                    sollwert = (int) MIN_PWM + ((MAX_PWM - MIN_PWM) * (ppm - MIN_PPM)) / (190 - MIN_PPM);0 z/ y7 f/ d7 b6 C+ M
                    }
2 v' r9 n6 A- V" P' o+ _                PORTC &= ~ROT;" U: |4 F; c- ]
                }' V* m( l. n: h) V0 l
            else   // Kein gültiger Sollwert
- C: q( ?) d$ A/ }$ E( r                {; T1 r: d5 R. [; q2 I
                if(!TEST_SCHUB) { if(sollwert) sollwert--; }   ) Z: a% i& d1 K+ a/ v4 `$ z6 A; W
                PORTC |= ROT; ! a* P# Q+ E" N- C
                }
) i) a9 P8 S4 C8 C2 `4 @        }# D: R: U" I5 V9 M4 z+ i
    else // I2C-Daten sind gültig
# }9 Y, z4 B' W! y' \( Y        {
0 F6 ~/ M1 e: B        sollwert = I2C_RXBuffer; - g: U: o4 u: O1 a$ @, w* F7 i
        PORTC &= ~ROT;
, y2 W2 k, f9 V1 Y; y# J+ }        }+ f2 P5 d$ k) c" l8 ?6 r) W
    if(sollwert > MAX_PWM) sollwert = MAX_PWM;
$ c, @5 |! x( a3 C9 u4 e7 a+ ]    return(sollwert); , `& f# T' P. f% Q4 T" W
}
) w- I" P; x, K# K+ N7 a2 {void DebugAusgaben(void)" l+ K7 y2 A2 x9 ?- D; ^& {
{% e, j! Y* i7 `
    DebugOut.Analog[0] = Strom;
) f2 q& L/ E1 l0 d2 d2 A. g# g2 C    DebugOut.Analog[1] = Mittelstrom;
5 d) {, V3 h# z3 ]6 W! q) p    DebugOut.Analog[2] = SIO_Drehzahl;
) F5 C) m  H. S: p    DebugOut.Analog[3] = PPM_Signal;
6 |, A8 h5 a2 ]* V( S}+ R+ W! _0 @1 A- ~6 O- I7 [
3 j. {' A3 |. K0 m; _
//############################################################################
$ f7 g, a' ]  \* `* X( U9 a//Hauptprogramm
0 R) ^! o+ j, [" Y1 S0 _1 Uint main (void)
) K1 H' M& T! R- x! k; @- X3 M//############################################################################& X+ A2 T; u# J0 k8 B- Q
{
- Z- s  f2 }  E9 N3 T    char altPhase = 0;
6 h8 c' }' B7 n% N' k* K& I    int test = 0;0 R' T+ L$ }% o
    unsigned int MinUpmPulse,Blink,TestschubTimer;/ F) K/ |5 A+ h7 l
    unsigned int Blink2,MittelstromTimer,DrehzahlMessTimer,MotorGestopptTimer;
( N6 w  Q: E& L    DDRC  = 0x08;" @$ B. H& L) d9 P7 n# {; [
    PORTC = 0x08;
; m* U' F% b- U, Y1 m0 S    DDRD  = 0xBA;
& K$ w' l6 U) t. B. V    PORTD = 0x80;7 v% |( F# @0 }& V( Z2 S
    DDRB  = 0x0E;5 U6 K$ @7 N- X$ n2 G) Z6 q4 ?2 B1 |1 B
    PORTB = 0x31;2 ^2 F9 B2 r& m& `# @8 x
   
. d4 L' y3 z7 i! ~' D5 k2 d    UART_Init();
+ ?" c) R2 ~% _4 B6 k& Q, Z    Timer0_Init();
' }) u7 `3 b; ?' x& h( }    sei ();//Globale Interrupts EinschaLTEn4 t9 n. l* \2 Z6 [8 a
    7 b5 |; g6 P* ?5 }+ x
    // Am Blinken erkennt man die richtige Motoradresse8 e6 {5 X9 r9 W% c, Q
    for(test=0;test<5;test++)
  |- C( f( q, a# o        {2 `6 h7 {& g6 X0 }/ x6 j8 }
        if(test == MOTORADRESSE) PORTD |= GRUEN;2 a0 @( K+ F, a$ ]1 O
        Delay_ms(150);
. C3 |8 {& w- R( x# I2 _. m+ X        PORTD &= ~GRUEN;
9 T; g/ _/ m3 ~* ?" B        Delay_ms(250);
& E, J, j( U4 U$ K        }       ! }' T0 r. j9 P! u0 A% D8 ^( v  a
    Delay_ms(500);, L" c, i  h' {: W3 G$ B5 M
   ) E* R4 M7 E7 s% e1 h
    UART_Init();" f2 c8 C% @* Q6 S
    PWM_Init();
+ S; x$ l/ s- Q) u8 _    InitIC2_Slave(0x50);                            # J! L5 s$ _6 G  P  B
    InitPPM();
6 ]0 L) ^0 ^6 w' Q7 K    Blink             = SetDelay(101);    ; \$ g' M) ~/ U/ W$ {% f
    Blink2            = SetDelay(102);
1 x  `% j7 v: a8 @( O3 I    MinUpmPulse       = SetDelay(103);$ A6 v; C7 g3 B% b+ `4 K
    MittelstromTimer  = SetDelay(254);7 e# z, V- G( L% h8 x& x
    DrehzahlMessTimer = SetDelay(1005);
  A0 p; t( O$ F" P    TestschubTimer    = SetDelay(1006);
! u4 ]8 K$ @; l" Q2 r- R    while(!CheckDelay(MinUpmPulse));. J$ r& L$ J3 D
    PORTD |= GRUEN;( k/ r8 p# K# n1 s
    PWM = 0;
, L) s, }0 A' `3 J    SetPWM();
3 S  s4 {: A9 O2 m    SFIOR = 0x08;  // Analog Comperator ein
1 f9 a$ s' L( j0 P    ADMUX = 1; 0 r4 K) g% `( d5 V
    MinUpmPulse = SetDelay(10);
# F- s0 o6 q1 d# t% R' U4 _' K$ m3 a9 w    DebugOut.Analog[1] = 1;9 v* V  M- P7 N$ L2 F- C
    PPM_Signal = 0;
% u7 Y) W1 O7 J    // zum Test der Hardware; Motor dreht mit konstanter Drehzahl ohne Regelung
- X  C1 C; K6 a2 q9 r0 m    if(TEST_MANUELL)    Anwerfen(TEST_MANUELL);  // kommt von dort nicht wieder
+ ~$ @2 c7 X* c! f* D$ z4 k' K1 L    while (1)" c+ x" W& [$ h: C
        {
; b2 ~0 E+ T( I" m4 z4 y: p' b        if(!TEST_SCHUB)   PWM = SollwertErmittlung();
& n: V8 k" a1 |        //I2C_TXBuffer = PWM; // Antwort über I2C-Bus
( [( ~& z. J; B6 V( I8 c        if(MANUELL_PWM)   PWM = MANUELL_PWM;9 A% Y9 T  M: a2 q9 F7 `
        // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++7 m: s6 k; \  f* y. P: r
        if(Phase != altPhase)   // es gab eine Kommutierung im Interrupt! [4 P$ u' L' m& D) \" g' d3 I/ x
            {
' Z/ c8 w; [; k* J- L& I, P            MotorGestoppt = 0;
6 H: h, X+ @# C- R+ m, r8 ~. f4 V            ZeitFuerBerechnungen = 0;    // direkt nach einer Kommutierung ist Zeit
- F" g0 G0 N7 e5 ^" P3 U& K8 h! i) ^7 y$ p            MinUpmPulse = SetDelay(50);  // Timeout, falls ein Motor stehen bleibt
, {0 t. v9 j: F4 Y) t/ ]            altPhase = Phase;
2 q9 s1 E9 S7 V' }+ `  y5 w            }
+ M5 d9 S* `: s        // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; J/ f1 f: K" B+ L7 E        if(!PWM)    // Sollwert == 0
- \) I  ?* k: Q) D  ^' K            {: m5 o. v; O8 \9 \+ B# v* z: ]$ {
            MotorAnwerfen = 0;      // kein startversuch
% Q: _& @. E1 a) W            ZeitFuerBerechnungen = 0;
$ e$ a4 @& a- ^7 }% V+ ^            // nach 1,5 Sekunden den Motor als gestoppt betrachten
+ _4 z7 `* O/ t$ [. I+ K6 k- Y0 ?# c            if(CheckDelay(DrehzahlMessTimer)) % K% ?1 Z. A6 e: u+ w
                {/ J: `# @% q5 k6 F  p1 X
                DISABLE_SENSE_INT;
7 F' Y( J9 F% C: f6 Z) f                MotorGestoppt = 1;  
* {4 B* [# }5 v1 I8 S1 V# A$ G/ l                STEUER_OFF;
: [! [$ t0 z, |6 n                } 9 @( u0 |! ]1 X) \$ V) G' X: ^
            }/ T6 \7 k: P8 f  f* x2 e; ]
        else $ x& K* `1 b  e
            {
  g  N- C- Q/ X& x# H            if(MotorGestoppt) MotorAnwerfen = 1;        // Startversuch
& K, o" \7 j9 O( k            MotorGestopptTimer = SetDelay(1500);3 U" i0 @: {4 e5 ]( e  ?
            }  u% r( i) R8 ~) t6 A$ o3 @
        if(MotorGestoppt && !TEST_SCHUB) PWM = 0;6 h- W, I/ ]# O
        SetPWM();
2 Q* A& r. p2 ~( _- W1 B. S        // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++0 M5 I2 u( E& u+ z" O  w# ~) P* m1 j
        if(!ZeitFuerBerechnungen++)/ M, \$ ~+ o* i/ d, m7 o
            {
- @$ e. r8 F/ `& {* H2 _& b  f            if(MotorGestoppt) PORTD |= GRUEN; //else PORTD &= ~GRUEN;
& J: f) c  h+ @8 P3 D8 C. \            if(SIO_DEBUG)
. }' m* H, h" i$ e) r/ H                {
3 z6 {+ N$ c+ G0 K" @/ p' q4 Y                DebugAusgaben();  // welche Werte sollen angezeigt werden?
& H( s+ h0 P# n9 V                if(!UebertragungAbgeschlossen)  SendUart();
# v( b5 I+ H" k                else DatenUebertragung();
4 q3 n/ o/ m1 o  o* X  X                }
- M. l6 r8 V) `0 E            // Berechnen des Mittleren Stroms zur (langsamen) Strombegrenzung
8 b9 }6 w/ m1 H4 B' c4 Y7 b            if(CheckDelay(MittelstromTimer))   
; M, ]2 T% `! ]7 K. E6 ]                {  j/ \. f6 x) k' w  U8 t
                MittelstromTimer = SetDelay(50); // alle 50ms
8 w, B/ M9 K: ^# E0 X2 d( Z                if(Mittelstrom <  Strom) Mittelstrom++;// Mittelwert des Stroms bilden
+ ]" M: r' o/ G8 S# N5 }                else if(Mittelstrom >  Strom) Mittelstrom--;! z$ p  i; r, n
      
  \$ T5 F) |! }6 j                if(Mittelstrom > LIMIT_STROM)// Strom am Limit?
6 c: P/ Y# f6 V7 u9 U                    {+ a3 }7 T  E8 a  E1 R: g) m' ^
                    MaxPWM--;// dann die Maximale PWM herunterfahren0 {' M+ [  ]+ C% J& K& o
                    PORTC |= ROT; # q% w5 K( R0 j' _+ E" X7 u3 B1 W
                    }
5 |; i* y" U6 @2 G! l                else 5 T- `( Y- R) x( Y
                    {$ [; ?3 _; X+ X
                    if(MaxPWM < MAX_PWM) MaxPWM++;
9 _+ I: X+ \6 _3 k1 M                    }, d9 ?9 k! F. j8 f
                }
8 j6 m/ g  c4 |( T6 ?8 P, G            if(CheckDelay(DrehzahlMessTimer))   // Ist-Drehzahl bestimmen5 W( _+ k/ d0 q" I+ o
                {! t9 ~+ f5 S' }, q$ r8 G. {
                DrehzahlMessTimer = SetDelay(10);% u! z+ H( ]1 D1 _; x
                SIO_Drehzahl = (6 * CntKommutierungen) / (POLANZAHL / 2);
! w) F5 k5 m" n( t7 G                CntKommutierungen = 0;; z2 p2 v  I  a& k1 Q+ r( r" v# g
                if(PPM_Timeout == 0) // keine PPM-Signale
& t# X3 {1 a$ y1 Y: `% o  h! C                ZeitZumAdWandeln = 1;0 X. y/ u1 c! ^! \$ ^+ D
                }0 I. F) s. Z+ g' C& R9 U

! y; e# q) _! ~6 b- z            if(CheckDelay(TestschubTimer))  $ M5 h( S) r' h$ s
                {
$ n* Q6 ?) m- c" ?: }1 s                TestschubTimer = SetDelay(1500);  z1 ?/ z, k( K% O- P' m+ B: l5 K6 i, k+ `
                if(TEST_SCHUB)% @$ }3 r" B0 P
                    {
  f& s' c6 O# `                    switch(test) % n3 y3 `* _0 B( V" f+ e" E
                        {
. d2 Z& ]8 `3 M. D) z& R                        case 0: PWM = 50; test++; break;, O0 P/ j) ]# H% Z
                        case 1: PWM = 130; test++; break;
) H. c9 s/ {; t5 P& L                        case 2: PWM = 60;  test++; break;* N; p2 U2 d5 R6 K+ ^$ @/ K6 k
                        case 3: PWM = 140; test++; break;
/ i2 m$ p' i" g; c) G" P                        case 4: PWM = 150; test = 0; break;2 c: y$ X& s. W& Z( ^
                        default: test = 0;
- T' b+ s3 Z( y0 l8 Y( f! W                        }
9 X/ P& p4 }# O  l                    }
: l' Y; L* U  O  _                }; H/ a8 P) R" C( ]3 k% W6 B) ~
            // Motor Stehen geblieben6 ]! E- U- v% A0 P, n/ N* @" m
            if((CheckDelay(MinUpmPulse) && SIO_Drehzahl == 0) || MotorAnwerfen) 1 u' D. E3 W5 O. ]' ~
                {' j# `) |  y; L/ i
                MotorGestoppt = 1;    9 [: P( e3 c2 I! p9 A+ u- h7 q
                DISABLE_SENSE_INT;
3 u. I: s/ [$ ~% I! Z                MinUpmPulse = SetDelay(100);         
1 j6 \2 K5 ^% Y4 N/ k# [                if(MotorAnwerfen)3 \0 T4 x" S. W. K2 {. m- L  [6 H
                    {# V# V+ C. t6 J1 S
                    PORTC &= ~ROT;1 F( h1 F5 l7 ^# d, i
                    MotorAnwerfen = 0;/ m' c7 q$ E# ?1 S
                    Anwerfen(10);5 B1 t# k: L% D4 ]& L) L
                    PORTD |= GRUEN;5 ^' S! u: B/ G* |, H3 U5 t8 l  r
                    MotorGestoppt = 0;    $ |0 i+ B' z% A# M: X
                    Phase--;
5 }/ e# H, h# V. Y3 ~" [5 P$ p                    PWM = 1;
- }3 ~  V! r' m- T                    SetPWM();
, w, {$ w4 b2 a: a7 N- c. h                    SENSE_TOGGLE_INT;
6 O% d4 R: U' t, d& q                    ENABLE_SENSE_INT;0 S+ l5 }# z- i8 X$ b% V+ S
                    MinUpmPulse = SetDelay(100);5 |9 p" q1 ]1 G
                    while(!CheckDelay(MinUpmPulse)); // kurz Synchronisieren
; g: S2 s0 h2 B* F                    PWM = 10;: c$ O/ E) G" h( u3 N) \
                    SetPWM();
) K6 ^  S7 R5 t6 T1 V) j                    MinUpmPulse = SetDelay(200);
6 S# o4 Y; w0 l                    while(!CheckDelay(MinUpmPulse)); // kurz Durchstarten+ }- ~; u4 `; a- _4 y1 I
                    MinUpmPulse = SetDelay(1000);$ o1 c. N$ \: S0 [1 w* y8 X
                    altPhase = 7;5 U6 h" k* a1 h" \
                    }* L" v3 L5 V( g& P  x$ h( F, A
                }4 x4 w) X* q  m/ j3 V% F+ U6 B
            } // ZeitFuerBerechnungen
* `* M0 w. v# _2 b) o8 T; ~" D        } // while(1) - Hauptschleife
) a3 I& Z3 n6 l  B( J8 I$ l}& G1 {  y/ E, f: `
这个是部分的源码 有想要了解的就去下载看吧
% i+ N5 g( h( Z6 ]0 ?( y下载:
& R# w2 U. x2 t2 ?/ v
游客,如果您要查看本帖隐藏内容请回复
3 k4 C5 u8 Q, }1 F" }- D

0 G( J/ L, [- O* B' A

该用户从未签到

推荐
发表于 2020-8-10 23:32 | 只看该作者
看看                      9 H7 {, b7 T& m+ ^& Y

该用户从未签到

推荐
发表于 2020-7-31 14:05 | 只看该作者
感谢分享DDDDDDDDDDDDDDDDDDDDDDDDDD
! A+ P; N$ x' t0 s! w, O

该用户从未签到

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

该用户从未签到

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

该用户从未签到

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

该用户从未签到

11#
发表于 2019-7-25 14:25 | 只看该作者
正好需要,很感谢2 i) M5 i4 v& n* H) Q( H" p

该用户从未签到

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

该用户从未签到

13#
发表于 2019-8-22 22:27 | 只看该作者
好东西,顶一下* j/ Z: F3 g, ^% C9 w: T
+ r% L' O# a- l8 ?, T# z

该用户从未签到

14#
发表于 2020-3-5 20:43 | 只看该作者
谢谢分享,感谢楼主。- F. E3 f( j. M* _5 R, {' p4 f( k
  • TA的每日心情
    开心
    2020-3-31 15:19
  • 签到天数: 13 天

    [LV.3]偶尔看看II

    15#
    发表于 2020-3-10 10:02 | 只看该作者
    这里没看到控制算法?
    : @) i- e1 [3 T  e7 Q
  • TA的每日心情
    奋斗
    2020-3-27 15:05
  • 签到天数: 2 天

    [LV.1]初来乍到

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

    该用户从未签到

    17#
    发表于 2020-4-7 20:13 | 只看该作者
    谢谢分享,学习参观1 W) J) W" e$ r) i

    该用户从未签到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-11-29 17:38 , Processed in 0.203125 second(s), 28 queries , Gzip On.

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

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

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