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

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

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
德国MK项目BLDC电调程序的源码!
2 P( K) ]1 M, H  O& H* ^4 n2 R6 A9 z1 f
#include "main.h"
/ N% I9 c7 _1 t3 D: J9 funsigned int  PWM = 0;
, c" u+ l# U1 n9 C& Z: n: Y. P! Hunsigned int  Strom = 0; //ca. in 0,1A
. P4 N5 f" w2 F, e5 d+ [! o9 }! zunsigned char Strom_max = 0;3 x: f. z3 k, R! I0 k+ ^* p/ c
unsigned char Mittelstrom = 0;
0 _2 ]1 ?7 J# z# G4 Bunsigned int  Drehzahl = 0;  // in 100UPM  60 = 6000; P+ z8 m" d  \
unsigned int  KommutierDelay = 10;. J8 N% |; ~& F& b! I- j9 o
unsigned int  I2C_Timeout = 0;  @& U' w. V" l- z* s4 ^0 J
unsigned char SIO_Timeout = 0;+ i9 p: q, ]0 q$ f; H: V3 G
unsigned int  SollDrehzahl = 0;
" H" g% x+ I( }3 |* Dunsigned int  IstDrehzahl = 0;
# p4 \  G  E; F: S( q) E* Sunsigned int  DrehZahlTabelle[256];//vorberechnete Werte zur DrehzahleRFassung
" W  z0 `& L6 r' T! _3 w/ runsigned char ZeitFuerBerechnungen = 1;
3 ^; K; h+ I7 j8 B3 c  iunsigned char MotorAnwerfen = 0;
+ J- N" X  R' X8 H/ ~# lunsigned char MotorGestoppt = 1;
; n- w& ?* y2 U  y- }2 junsigned char MaxPWM = MAX_PWM;1 E( N. [9 x! @) h* R7 b
unsigned int  CntKommutierungen = 0;1 M7 [8 j) Z9 P, N3 {
unsigned int  SIO_Drehzahl = 0;" V9 l" G& ?& ~/ v7 f# h7 n
unsigned char ZeitZumAdWandeln = 1;/ |, m2 S' {+ v+ M
2 j8 m  |6 ~) w. ?
//############################################################################. `" ~1 b1 a) T
//
& X# n. }/ z+ svoid SetPWM(void)/ d- M, [) m+ i: F- @: A% A
//############################################################################
5 }# R/ @- w& G$ a& ], N& R{
1 ^& D+ k- X8 F- S    unsigned char tmp_pwm; ) M* Q  l6 Q& k! D9 u6 L
    tmp_pwm = PWM;9 b  f( t) D2 a8 d, h0 h
    if(tmp_pwm > MaxPWM)    // Strombegrenzung( P  Z$ `2 {3 Y! b. m, G
        {
2 e& `$ _; r+ Q7 |- T' ^4 A        tmp_pwm = MaxPWM;
9 H. e, E+ E& r& x' U1 T1 g        PORTC |= ROT;
& Q, U8 h7 k6 o# y, g$ t0 n' n        } ' f" L& ~3 }0 F$ d! D4 ^
    if(Strom > MAX_STROM)   // Strombegrenzung+ h' Y2 Q! l8 ]! |% Y( e0 D3 a
        {/ U  o6 N" @9 T+ U* f0 T
        OCR1A = 0; OCR1B = 0; OCR2  = 0;( j  Q8 D) b% J  m3 y
        PORTC |= ROT;
' u5 @9 F4 j1 j" B# D, _        Strom--;2 B4 E; _% l- V1 t
        }
2 E7 D0 O1 ?" w    else
: }, m! h3 P: K        {1 ]$ }1 c* N2 @
        #ifdef  _32KHZ 4 k8 G! K" z7 @' v0 S
        OCR1A =  tmp_pwm; OCR1B =  tmp_pwm; OCR2  = tmp_pwm;1 s  H. b, D" E  m& P0 O& `# w
        #endif # V' v: u: z5 h' u. s3 `( o
        #ifdef  _16KHZ
2 r- Z2 x4 F4 ^- y0 [2 E3 x- k- m        OCR1A = 2 * (int)tmp_pwm; OCR1B = 2 * (int)tmp_pwm; OCR2  = tmp_pwm;1 p: {# u/ O8 R; A
        #endif 3 R0 |# s' R" m! w
        }& }) T6 C" T4 `9 U5 L8 L5 @$ T
}
5 r2 C8 |. T  g* ~; e//############################################################################
: u+ f+ q; N' _. r( G//" H4 C0 Z0 \* A8 }. L$ y1 C
void PWM_Init(void); b2 F" @& m+ g/ D4 G0 S
//############################################################################
! h7 V1 K6 G$ k0 v1 \1 O: S{
7 `* }  y2 C& F) T; X    PWM_OFF;
  `) s2 q4 c" `2 w0 A/ J, s" I    TCCR1B = (1 << CS10) | (0 << CS11) | (0 << CS12) | (1 << WGM12) |
. m$ O+ m; B2 M; w) ?             (0 << WGM13) | (0<< ICES1) | (0 << ICNC1);
! N( t9 q5 n! T3 [9 {; ~. B* y}# z( \( W! O0 g" g9 {
//############################################################################
+ Q7 M$ N5 Z, H& s6 `//
# g* f, q5 l, z' i% R1 yvoid Wait(unsigned char dauer)0 L) s' D# _6 R* U
//############################################################################* H( f5 F4 [& |1 A/ w
{& i, a- E' y% ]( M0 R& P3 ?2 X
    dauer = (unsigned char)TCNT0 + dauer;. p& y( @; ?, G. h
    while((TCNT0 - dauer) & 0x80);
8 R7 C2 v; C1 I5 f}; B$ r! F3 G6 ^0 ?! q1 a6 U
//############################################################################* H2 |+ }4 P7 H8 L  l  [* S6 F. G
//" @& t6 R) u9 I% F; t, k/ j6 X# M
void Anwerfen(unsigned char pwm)
4 B; Z9 e' ]) ?9 N$ ?/ G& ]% j% U//############################################################################' m/ a/ i* f8 c! O6 w
{
9 h5 @7 u$ Y4 h) d0 p$ s; C& k5 Y    unsigned long timer = 300,i;
$ K* I) ~3 Y" @/ @    DISABLE_SENSE_INT;
: L+ e9 v* J3 M/ W$ z* H4 N    PWM = 5;
" }2 T" p- I# b# `7 D    SetPWM();
/ |" n# j" K0 ^% ~+ R    Manuell();6 ~3 O/ S; A- d2 S$ j: [* k# V
    Delay_ms(200);& d* {5 q" J4 F  x* [. U/ {
    PWM = pwm;
5 b5 B6 {8 D0 P- x2 N    while(1)
) Z; E. z8 J3 a/ [6 m" x        {
% h$ _' G8 j0 d9 q        for(i=0;i<timer; i++)   S7 U2 C0 f% Q; S$ f1 @
            {
8 [2 M9 V, [# z# h2 ]( `            if(!UebertragungAbgeschlossen)  SendUART();
! m, Q9 y/ P0 M2 M* K( _  c) A            else DatenUebertragung();+ B8 e, W) G3 u% v, A
            Wait(100);  // warten
3 f' W' c  R+ r6 m            } 7 A( n0 ~' }5 q% X. i9 D
        timer-= timer/15+1;
6 B  c9 I- t+ }, t1 s        if(timer < 25) { if(TEST_MANUELL) timer = 25; else return; }
7 |$ b+ r  t. Y" j+ k7 @        Manuell();
" p  g+ M; N; G        Phase++;2 Z. M* H$ |1 N2 ^$ k, e4 j! q/ n
        Phase %= 6;
/ d. F. v8 p3 Y( b7 |! {' i        ADConvert();
* g8 v3 S9 X& {7 T) @6 f        PWM = pwm;
  z, M7 m( d8 O, @7 z        SetPWM();5 L, u1 N6 [$ i$ t" Z6 b( `/ ~
        if(SENSE)
) g+ I) r9 q2 d            {
( h+ |4 M& J* u/ O            PORTD ^= GRUEN;3 p6 q9 M3 k+ Q* @0 B# n0 w+ b
            }
( W5 u; Z9 Q1 M. @3 m        }
% |  R: d( V' p& D! h}
* A  P3 W, c, n) v  T! r//############################################################################% X: p5 l. P+ R* C6 C& h
/// o9 {* I. F6 o4 r1 }* K" U4 Y
unsigned char SollwertErmittlung(void)1 }! \, \# _% R. v2 h
//############################################################################& b# u, L" l# s' x2 f
{
$ C2 z# @( h% q0 O+ k    static unsigned int sollwert = 0;
8 k; G+ x& t" l0 ]& X4 ~  _& }    unsigned int ppm;
% O1 W1 s3 W% ?, m' y    if(!I2C_Timeout)   // bei Erreichen von 0 ist der Wert ungültig. W- f3 c9 G- [6 o( \$ t$ D3 [
        {
/ S6 W9 ?' P) C4 u  b        if(SIO_Timeout)  // es gibt gültige SIO-Daten" L/ A- {! c3 j0 w
            {  S, }9 `, l- }3 {1 x7 ~: |
            sollwert =  (MAX_PWM * (unsigned int) SIO_Sollwert) / 200;  // skalieren auf 0-200 = 0-255
6 x3 T' V& O9 `, S+ \) T3 ?            }4 T- d2 N1 W( F, l: Z, M4 g* d
        else. l& i$ s: a! g" w" X% O, {
            if(PPM_Timeout)  // es gibt gültige PPM-Daten4 m$ M+ v4 d* f1 y8 O( l
                {* L- X1 F3 D. }! a- p5 V
                ppm = PPM_Signal;
' P" B( U0 @/ l                if(ppm > 300) ppm =   0;  // ungültiges Signal+ ]/ I+ P0 R5 g; @
                if(ppm > 200) ppm = 200;
) z/ L! h& u* J3 ~7 Y8 g                if(ppm <= MIN_PPM) sollwert = 0;
$ O  x7 N4 t2 s  e6 m0 Z: U                else
7 r# h, S7 B9 Y                    {
1 Y2 }6 J, m; w5 I& ?- ~% N                    sollwert = (int) MIN_PWM + ((MAX_PWM - MIN_PWM) * (ppm - MIN_PPM)) / (190 - MIN_PPM);
& f6 S/ f  {5 `$ P! O: R                    }
- C1 |- U3 ~$ w/ M. s1 \' s/ g& g                PORTC &= ~ROT;+ Q+ G, k& ?+ c$ Y, w, b" ~
                }. H3 J) c2 R0 U9 N9 u& j
            else   // Kein gültiger Sollwert
! Q& o) @. R8 G. ~% R5 H                {
0 J9 Q( S! O; }0 C: F( l                if(!TEST_SCHUB) { if(sollwert) sollwert--; }   ) A  ?$ Q. R3 @5 m* Y, O! a: F' X+ I/ R
                PORTC |= ROT; 3 E0 \0 {4 Z) |! P6 _& Q
                }7 t# K0 Q7 I8 S2 [$ c: C
        }$ A& |0 R2 f9 `; f. F. n
    else // I2C-Daten sind gültig. s- l( Z" q# R7 ]' |% I7 Y5 q
        {
6 D  ~; |4 v( W5 q. k& Z        sollwert = I2C_RXBuffer; % D1 C% S, Q8 T
        PORTC &= ~ROT;2 K: p% Q8 O0 B9 s( n, P% ]* C9 n+ d
        }0 q* _; P, A! h" T3 f0 |, d
    if(sollwert > MAX_PWM) sollwert = MAX_PWM;
9 s0 I5 m6 E2 G* m( A    return(sollwert); ! j  n  \, _4 _
}
( J! Q# r+ W1 r* p# S& }' D/ Rvoid DebugAusgaben(void)
  Z' q) E$ {! @) \: N* {{3 |8 R8 [( m) u* r* |- _
    DebugOut.Analog[0] = Strom;
; P2 k- b2 G4 n0 V7 Q6 U+ r    DebugOut.Analog[1] = Mittelstrom;
/ j# \+ Z5 x% R8 e4 A    DebugOut.Analog[2] = SIO_Drehzahl;
7 i. ]/ [: q2 }, a. L2 \- A. @    DebugOut.Analog[3] = PPM_Signal;
+ p, W( F: x4 h/ M* W6 g5 @% x}
+ A  E. _/ k+ b6 `. p- W+ e$ z3 s
7 R9 O1 L* q5 Q  S7 p//############################################################################
$ w- S, j: A+ V; c//Hauptprogramm: f# }/ {* q1 Q
int main (void)3 N7 s* W- X9 M6 k3 a- D
//############################################################################
6 x; J% J; N% {! D{
. h* o* N" ]5 X, w! V; z- w    char altPhase = 0;6 A4 a& z: u1 Z( J7 H
    int test = 0;! ?" \4 f2 g2 t$ E. p
    unsigned int MinUpmPulse,Blink,TestschubTimer;3 M" ]0 O5 x. o4 V* h6 w
    unsigned int Blink2,MittelstromTimer,DrehzahlMessTimer,MotorGestopptTimer;& j+ h9 c0 g! K* p4 r
    DDRC  = 0x08;
% l+ ^0 G9 E0 D1 i$ A# b6 Y    PORTC = 0x08;4 X/ K4 C, O, _8 L- ^  N
    DDRD  = 0xBA;
' P' I" V# e1 L$ |7 v    PORTD = 0x80;8 A& I6 h6 M8 G7 J
    DDRB  = 0x0E;9 T1 _. y; Y9 S. b/ H- t$ P# q3 Z( O
    PORTB = 0x31;0 n" _/ q4 Z0 l$ \( }" A# ^
   
5 G4 ^6 R1 Q1 r( P: G' _3 m    UART_Init();  ~6 o: V, M9 n0 H( C. I7 I
    Timer0_Init();, ?+ l* |6 e. y4 `. J
    sei ();//Globale Interrupts EinschaLTEn
4 m3 p4 [7 O! B    ) A1 d# u, E& S: S9 B
    // Am Blinken erkennt man die richtige Motoradresse
( n; Y3 P& J8 n    for(test=0;test<5;test++)5 j& \0 F: @/ e! h
        {
. }) P' \2 b6 i: h5 p& ]" Y! C        if(test == MOTORADRESSE) PORTD |= GRUEN;
( D8 b8 a' G8 R) K        Delay_ms(150);
8 }/ K5 B- c$ x9 ]8 R3 v        PORTD &= ~GRUEN;
0 a8 ^. X  ^9 A% ?        Delay_ms(250);2 B; P' z4 n9 f6 k: Q7 [/ @$ z0 a
        }      
; N. j1 p" H; n. r    Delay_ms(500);0 B, ]2 z+ N% c- B1 c" b: t
   
; ^  x$ e# f% a+ ^    UART_Init();
6 {$ h0 S' h( K* A/ i    PWM_Init();
+ `0 P' g& @8 f) l  R+ \    InitIC2_Slave(0x50);                           
" W$ F; Q: x( {    InitPPM();# h# ~! }7 F3 g8 }) y! O1 `% T. }6 _7 G
    Blink             = SetDelay(101);   
1 g" d+ W4 l' I    Blink2            = SetDelay(102);
% j  H: i$ t. R7 i- ?: y    MinUpmPulse       = SetDelay(103);
7 I! s$ R( q; B: `, s; M5 z    MittelstromTimer  = SetDelay(254);
( U6 d) `* N* p0 V6 L) G" l    DrehzahlMessTimer = SetDelay(1005);' y& [* ?1 o" W! B. W5 q
    TestschubTimer    = SetDelay(1006);
# ]( X* d- W/ i7 x* y) T    while(!CheckDelay(MinUpmPulse));
" j) z% ~* ]6 |5 ?7 k7 J" }& K% @    PORTD |= GRUEN;5 R/ m% }1 S/ f9 d# m! U
    PWM = 0;9 K, s# q# ^8 U- r# K* h
    SetPWM();0 ?  t3 P9 J. e/ |5 w8 k$ U
    SFIOR = 0x08;  // Analog Comperator ein6 A* B$ }5 q  G, i7 [
    ADMUX = 1; " o9 J; }, M- o; N
    MinUpmPulse = SetDelay(10);/ {# T* y1 R, G5 o) @
    DebugOut.Analog[1] = 1;8 a0 S7 S* x$ x4 y6 V* h
    PPM_Signal = 0;
1 @* b  O; ^4 q    // zum Test der Hardware; Motor dreht mit konstanter Drehzahl ohne Regelung9 f; h" y$ T3 L3 O) l' w
    if(TEST_MANUELL)    Anwerfen(TEST_MANUELL);  // kommt von dort nicht wieder5 r8 U) d( F# |& n2 s
    while (1)9 x# W, V/ {$ x* P8 f; \4 o' ]
        {
9 p4 Q  \6 z$ p4 `        if(!TEST_SCHUB)   PWM = SollwertErmittlung();
- z2 x1 c# ]! O4 c5 b; r; O5 u        //I2C_TXBuffer = PWM; // Antwort über I2C-Bus
5 @2 Q/ V9 L5 _( D! Y, O        if(MANUELL_PWM)   PWM = MANUELL_PWM;' n! N/ V; T/ t' N) ^
        // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; A% D4 A& D% `# k% _  M& z# r
        if(Phase != altPhase)   // es gab eine Kommutierung im Interrupt
8 C4 y2 l2 w% h/ T$ M( u8 J! R$ O            {, F9 L8 V7 X' H3 s1 m9 v
            MotorGestoppt = 0;
3 V% y1 G4 e. j3 z  v+ {  o            ZeitFuerBerechnungen = 0;    // direkt nach einer Kommutierung ist Zeit
) d! d  @6 ]1 P# y7 O. P            MinUpmPulse = SetDelay(50);  // Timeout, falls ein Motor stehen bleibt
/ M$ k; r! c, b* [* F! B            altPhase = Phase;
: ^, F/ g! |) x  Z4 L' Z/ V* K            }
7 @( h  O' I, B2 [+ m4 I) v        // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++8 j3 X: c) P* p8 [9 T
        if(!PWM)    // Sollwert == 05 P! O/ S3 ~; Z
            {' z; m1 r$ \( C5 r3 b: T) z
            MotorAnwerfen = 0;      // kein startversuch6 W" H) Z4 s2 ]/ s3 a2 {( N
            ZeitFuerBerechnungen = 0;& [: D2 L7 H( e9 ?0 F# q2 {
            // nach 1,5 Sekunden den Motor als gestoppt betrachten - k: Q1 J% p. g9 v, L# h& C9 Y' N
            if(CheckDelay(DrehzahlMessTimer))
( {/ Z% Q8 W# ^: H                {
/ v7 L; Q9 n+ I5 i% p                DISABLE_SENSE_INT;
7 @! B0 W5 z' S2 G' v( o                MotorGestoppt = 1;  
5 E6 R$ j" P$ p- t, x/ G9 o2 O, A                STEUER_OFF;
) m8 h% }4 J! R6 |1 P% U  j                }
* t$ L# V# _" p# H/ P6 ]: x            }
0 p) ?* C  ]; u' C        else
6 [* G6 h0 Z9 v8 Z9 T            {  Q% z/ V9 [  y' e& C! v" i
            if(MotorGestoppt) MotorAnwerfen = 1;        // Startversuch# R0 @0 `2 F/ @0 i
            MotorGestopptTimer = SetDelay(1500);
4 K$ m$ N9 N6 v" M* E            }
) H6 q% }3 \% k) l; F; |        if(MotorGestoppt && !TEST_SCHUB) PWM = 0;
# e- n, X# X1 V        SetPWM();8 m& ]+ d8 W" `; ^  L: W9 W. ~
        // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++2 Y( z* W2 i+ D5 B0 ^+ U3 _& @
        if(!ZeitFuerBerechnungen++)$ n6 |3 [( R% T
            {" D) \3 z- D: Y. H
            if(MotorGestoppt) PORTD |= GRUEN; //else PORTD &= ~GRUEN;  A$ G+ T2 ^* y& E# x, _) y/ b
            if(SIO_DEBUG)
& r" W6 z" d' h7 y: _4 S                {! Z4 O$ v% ^1 R4 s" n
                DebugAusgaben();  // welche Werte sollen angezeigt werden?
% r$ m  D' ]' X" t2 H, |9 s" X                if(!UebertragungAbgeschlossen)  SendUart(); # W& h# ~4 g# J1 t
                else DatenUebertragung();2 Q; N1 t" j% s' I; ^, x, o
                }& i& m. t7 |# Z
            // Berechnen des Mittleren Stroms zur (langsamen) Strombegrenzung( F. @( r% R; h. y* Z. I9 [
            if(CheckDelay(MittelstromTimer))   
$ ?& Y, P5 F$ R" d& [                {
! D/ {9 W+ q) `. ?$ `8 S                MittelstromTimer = SetDelay(50); // alle 50ms' x$ m9 j5 h8 K% V( |& A/ M$ V
                if(Mittelstrom <  Strom) Mittelstrom++;// Mittelwert des Stroms bilden% _2 f2 _% Y3 F
                else if(Mittelstrom >  Strom) Mittelstrom--;4 d3 b* S  N, x3 o5 I+ F& K
       0 v4 a" @# o' L' e8 D& L3 |8 G
                if(Mittelstrom > LIMIT_STROM)// Strom am Limit?* r" k, \. y# |! D) t( r
                    {- `: K- D) x  ^. R# w; q" l6 d3 E% ?9 u
                    MaxPWM--;// dann die Maximale PWM herunterfahren
# y6 o# g3 n# Y                    PORTC |= ROT;
9 R( p4 p. s& _2 |( a) I; D                    }2 Z9 h+ _+ F; n2 M: a. p
                else
- w# K5 v+ i0 ], ?& m                    {
9 z4 f: i! p! ~+ x5 t5 t& W                    if(MaxPWM < MAX_PWM) MaxPWM++;
; q" T- _0 Y/ i5 `9 O6 T. G+ I2 @                    }
7 b( e5 h. x8 \                }
1 l1 @% D2 u; l0 a) c# w0 p            if(CheckDelay(DrehzahlMessTimer))   // Ist-Drehzahl bestimmen- n8 [0 X, T/ p: c
                {# c+ D, d0 g" Y, V" a% K7 j
                DrehzahlMessTimer = SetDelay(10);6 a& w+ S; \6 ~1 D# q
                SIO_Drehzahl = (6 * CntKommutierungen) / (POLANZAHL / 2);' g; d, n, b8 g1 l9 |
                CntKommutierungen = 0;
9 ]# _& \! Y7 F; z$ w                if(PPM_Timeout == 0) // keine PPM-Signale8 v! S; M4 r! Q. I, m, l( a
                ZeitZumAdWandeln = 1;
9 V$ P2 ]% W" ^) K! O& j. ?                }
& z, U9 _3 T  G/ C3 P# }/ W( D
            if(CheckDelay(TestschubTimer))  
5 K5 ~5 g+ X' W# F( W                {
; W% S8 S, a& J* [1 t) s' }                TestschubTimer = SetDelay(1500);, {8 {% h% M- Y6 h
                if(TEST_SCHUB)* p4 T4 x% f( i) \" f
                    {5 Z( X8 _2 o' U. n0 z
                    switch(test)
- [" T! ^. L; \1 q+ u( ?+ a                        {
1 P+ M& A" _8 S# X  p! L9 e/ H                        case 0: PWM = 50; test++; break;0 l6 Z8 n+ J/ k0 w; Y8 R) o
                        case 1: PWM = 130; test++; break;
7 L& w  Z$ `$ r                        case 2: PWM = 60;  test++; break;& N. j2 W) i4 m* p" D! X. U/ z( Z' I
                        case 3: PWM = 140; test++; break;
8 b+ C: ~, Q  o: \  n! S1 [$ Y' H                        case 4: PWM = 150; test = 0; break;3 |4 c5 ^6 w' |# X. r; G
                        default: test = 0;$ M! D$ H6 }! e( q" G3 Y- D
                        }
4 x8 W  p1 ~' n& e' ~                    }8 m2 z. {6 P# R6 Z' }3 a
                }
- @2 r; x0 z8 ~4 ?            // Motor Stehen geblieben
5 u& N! n. k" s5 O. f( \9 j            if((CheckDelay(MinUpmPulse) && SIO_Drehzahl == 0) || MotorAnwerfen) - \$ }8 @* |. J) }& g3 ~
                {
$ j, a# K2 f/ V5 ~/ s9 }                MotorGestoppt = 1;   
4 P7 |5 A$ q, L/ ~9 ]! a6 E% }- ~                DISABLE_SENSE_INT;
- G. L- y/ a" q. K                MinUpmPulse = SetDelay(100);         2 @- n, F! ?; z; I2 V
                if(MotorAnwerfen)& y4 S. H" ]" T  T  B& S
                    {
4 u0 c; d! W, w% \/ n& z( ]                    PORTC &= ~ROT;
6 N& Q  Q' y, S( q& |                    MotorAnwerfen = 0;: Y! r2 |7 c5 x) l) `- p8 P0 R8 H
                    Anwerfen(10);  X  a' h6 H0 j" y  j
                    PORTD |= GRUEN;
- v# U$ m! ~  ~/ O, `# C9 h  `                    MotorGestoppt = 0;    ' f( _* @# x' Q( }( v+ b6 x" m7 t
                    Phase--;
% G+ ^8 s8 g% Z                    PWM = 1;
9 p- _7 A7 h5 o! k: U) ?$ r                    SetPWM();& F4 g& O) M1 z$ G. b% P
                    SENSE_TOGGLE_INT;! R" O; L# y6 V! L
                    ENABLE_SENSE_INT;7 d, J# [( M2 r9 t8 C4 }
                    MinUpmPulse = SetDelay(100);
& J9 V' ~1 D; g  x6 r( j1 e2 [                    while(!CheckDelay(MinUpmPulse)); // kurz Synchronisieren- S0 D5 n3 f9 W+ z/ x
                    PWM = 10;7 I$ {, L2 r3 \& x2 L6 F4 x- `
                    SetPWM();9 C, r1 C/ ~5 C$ X1 m3 [" i
                    MinUpmPulse = SetDelay(200);$ F9 {5 U9 C9 l
                    while(!CheckDelay(MinUpmPulse)); // kurz Durchstarten' b. i6 ?, e/ F- x
                    MinUpmPulse = SetDelay(1000);
( h5 Q/ g8 X# \                    altPhase = 7;( f4 ]- |- l1 h( r, V$ H
                    }. Y! x; f0 K  d: A  ~) a
                }6 k+ [* B9 n, b4 ^7 H
            } // ZeitFuerBerechnungen
2 Y8 x9 L; V" |) d: A5 N$ U        } // while(1) - Hauptschleife4 p% s6 D& l& v& Q9 L- A
}
6 ^3 Z$ X( e% K这个是部分的源码 有想要了解的就去下载看吧/ \7 w2 [, U( X- q! _0 S  I) r
下载:7 Y. ^8 H( c& ]
游客,如果您要查看本帖隐藏内容请回复

& r; z0 k/ y( ?- m) A7 f
! w( `* _/ h' E$ j/ w  j

该用户从未签到

推荐
发表于 2020-8-10 23:32 | 只看该作者
看看                      . w' U9 Y6 |: t5 i$ }  ?

该用户从未签到

推荐
发表于 2020-7-31 14:05 | 只看该作者
感谢分享DDDDDDDDDDDDDDDDDDDDDDDDDD
' i+ i/ S' C# S6 v7 s' w

该用户从未签到

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

该用户从未签到

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

该用户从未签到

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

该用户从未签到

8#
发表于 2019-7-25 14:25 | 只看该作者
正好需要,很感谢
+ O8 y- p2 [$ D6 k/ }1 _" }. _

该用户从未签到

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

该用户从未签到

10#
发表于 2019-8-22 22:27 | 只看该作者
好东西,顶一下6 I7 x! o0 `+ Z' }) E
% W& a/ }0 Q0 |7 T. s4 ~. v

该用户从未签到

11#
发表于 2020-3-5 20:43 | 只看该作者
谢谢分享,感谢楼主。
. e1 m. o/ Q% l2 t" `. z0 ^9 I, H
  • TA的每日心情
    开心
    2020-3-31 15:19
  • 签到天数: 13 天

    [LV.3]偶尔看看II

    12#
    发表于 2020-3-10 10:02 | 只看该作者
    这里没看到控制算法?
      }! ~% y" \& d1 x  j
  • TA的每日心情
    奋斗
    2020-3-27 15:05
  • 签到天数: 2 天

    [LV.1]初来乍到

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

    该用户从未签到

    14#
    发表于 2020-4-7 20:13 | 只看该作者
    谢谢分享,学习参观
    ( j5 y* q  [" j1 I5 C

    该用户从未签到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-10-7 07:46 , Processed in 0.187500 second(s), 28 queries , Gzip On.

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

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

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