Subversion Repositories BL-Ctrl

Rev

Rev 50 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 ingob 1
/*############################################################################
2
 + Regler für Brushless-Motoren
3
 + ATMEGA8 mit 8MHz
4
 + (c) 01.2007 Holger Buss
5
 + Nur für den privaten Gebrauch
6
 + Keine Garantie auf Fehlerfreiheit
7
 + Kommerzielle Nutzung nur mit meiner Zustimmung
8
 + Der Code ist für die Hardware BL_Ctrl V1.0 entwickelt worden
9
 + www.mikrocontroller.com
10
############################################################################*/
11
#include "main.h"
12
 
13
volatile unsigned char Phase = 0,ShadowTCCR1A = 0;
14
volatile unsigned char CompFreigabeTimer = 100;
15
volatile unsigned char CompInterruptFreigabe = 0;
16
 
17
 
18
//############################################################################
19
//
20
SIGNAL(SIG_OVERFLOW2)
21
//############################################################################
22
{
23
}
24
 
25
//############################################################################
26
// + Interruptroutine
27
// + Wird durch den Analogkomperator ausgelöst
28
// + Dadurch wird das Kommutieren erzeugt
29
SIGNAL(SIG_COMPARATOR)
30
//############################################################################
31
{
32
unsigned char sense = 0;
33
do
34
{
35
 if(SENSE_H) sense = 1; else sense = 0;
36
 switch(Phase)
37
  {
38
   case 0:  
39
           STEUER_A_H;
40
           if(sense)
41
            {
42
                      STEUER_C_L;
50 holgerb 43
              if(!PPM_Betrieb) TCNT1 = 1;
1 ingob 44
              TCNT2 = 1;
45
              if(ZeitZumAdWandeln) AdConvert();
46
              SENSE_FALLING_INT;
47
              SENSE_B;
48
              Phase++;
49
              CntKommutierungen++;
50
             }
51
                         else
52
             {
53
              STEUER_B_L;
54
             }
55
          break;
56
   case 1:  
57
               STEUER_C_L;
58
           if(!sense)
59
            {
60
              STEUER_B_H;
50 holgerb 61
              if(!PPM_Betrieb) TCNT1 = 1;
1 ingob 62
              TCNT2 = 1;
63
              if(ZeitZumAdWandeln) AdConvert();
64
              SENSE_A;
65
              SENSE_RISING_INT;
66
              Phase++;
67
              CntKommutierungen++;
68
             }
69
             else
70
             {
71
               STEUER_A_H;
72
             }
73
 
74
          break;
75
   case 2:  
76
           STEUER_B_H;
77
           if(sense)
78
            {
79
                      STEUER_A_L;
50 holgerb 80
              if(!PPM_Betrieb) TCNT1 = 1;
1 ingob 81
              TCNT2 = 1;
82
              if(ZeitZumAdWandeln) AdConvert();
83
              SENSE_C;
84
              SENSE_FALLING_INT;
85
              Phase++;
86
              CntKommutierungen++;
87
             }
88
             else
89
             {
90
              STEUER_C_L;
91
             }
92
 
93
          break;
94
   case 3:  
95
           STEUER_A_L;
96
           if(!sense)
97
            {
98
                      STEUER_C_H;
50 holgerb 99
              if(!PPM_Betrieb) TCNT1 = 1;
1 ingob 100
              TCNT2 = 1;
101
              if(ZeitZumAdWandeln) AdConvert();
102
              SENSE_B;
103
              SENSE_RISING_INT;
104
              Phase++;
105
              CntKommutierungen++;
106
             }
107
             else
108
             {
109
              STEUER_B_H;
110
             }
111
 
112
 
113
          break;
114
   case 4:  
115
           STEUER_C_H;
116
           if(sense)
117
            {
118
                      STEUER_B_L;
50 holgerb 119
              if(!PPM_Betrieb) TCNT1 = 1;
1 ingob 120
              TCNT2 = 1;
121
              if(ZeitZumAdWandeln) AdConvert();
122
              SENSE_A;                     
123
              SENSE_FALLING_INT;
124
              Phase++;
125
              CntKommutierungen++;
126
             }
127
                     else
128
             {
129
              STEUER_A_L;
130
             }
131
 
132
          break;
133
   case 5:  
134
              STEUER_B_L;
135
           if(!sense)
136
            {
137
                      STEUER_A_H;
50 holgerb 138
              if(!PPM_Betrieb) TCNT1 = 1;
1 ingob 139
              TCNT2 = 1;
140
              if(ZeitZumAdWandeln) AdConvert();
141
              SENSE_C;
142
              SENSE_RISING_INT;
143
              Phase = 0;
144
              CntKommutierungen++;
145
             }
146
             else
147
             {
148
              STEUER_C_H;
149
             }
150
          break;
151
  }
152
}
153
 while((SENSE_L && sense) || (SENSE_H && !sense));
154
 ZeitZumAdWandeln = 0;
155
}
156
 
157
//############################################################################
158
//
159
void Manuell(void)
160
//############################################################################
161
{
162
 switch(Phase)
163
  {
164
   case 0:  
165
           STEUER_A_H;
166
                   STEUER_B_L;
167
           SENSE_C;
168
           SENSE_RISING_INT;
169
          break;
170
   case 1:  
171
           STEUER_A_H;
172
                   STEUER_C_L;
173
           SENSE_B;
174
           SENSE_FALLING_INT;
175
          break;
176
   case 2:  
177
           STEUER_B_H;
178
                   STEUER_C_L;
179
           SENSE_A;
180
           SENSE_RISING_INT;
181
          break;
182
   case 3:  
183
           STEUER_B_H;
184
                   STEUER_A_L;
185
           SENSE_C;
186
           SENSE_FALLING_INT;
187
          break;
188
   case 4:  
189
           STEUER_C_H;
190
                   STEUER_A_L;
191
           SENSE_B;
192
           SENSE_RISING_INT;
193
          break;
194
   case 5:  
195
           STEUER_C_H;
196
                   STEUER_B_L;
197
           SENSE_A;
198
           SENSE_FALLING_INT;
199
          break;
200
  }
201
}
202