Subversion Repositories BL-Ctrl

Rev

Rev 2 | 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;
43
              TCNT2 = 1;
44
              if(ZeitZumAdWandeln) AdConvert();
45
              SENSE_FALLING_INT;
46
              SENSE_B;
47
              Phase++;
48
              CntKommutierungen++;
49
             }
50
                         else
51
             {
52
              STEUER_B_L;
53
             }
54
          break;
55
   case 1:  
56
               STEUER_C_L;
57
           if(!sense)
58
            {
59
              STEUER_B_H;
60
              TCNT2 = 1;
61
              if(ZeitZumAdWandeln) AdConvert();
62
              SENSE_A;
63
              SENSE_RISING_INT;
64
              Phase++;
65
              CntKommutierungen++;
66
             }
67
             else
68
             {
69
               STEUER_A_H;
70
             }
71
 
72
          break;
73
   case 2:  
74
           STEUER_B_H;
75
           if(sense)
76
            {
77
                      STEUER_A_L;
78
              TCNT2 = 1;
79
              if(ZeitZumAdWandeln) AdConvert();
80
              SENSE_C;
81
              SENSE_FALLING_INT;
82
              Phase++;
83
              CntKommutierungen++;
84
             }
85
             else
86
             {
87
              STEUER_C_L;
88
             }
89
 
90
          break;
91
   case 3:  
92
           STEUER_A_L;
93
           if(!sense)
94
            {
95
                      STEUER_C_H;
96
              TCNT2 = 1;
97
              if(ZeitZumAdWandeln) AdConvert();
98
              SENSE_B;
99
              SENSE_RISING_INT;
100
              Phase++;
101
              CntKommutierungen++;
102
             }
103
             else
104
             {
105
              STEUER_B_H;
106
             }
107
 
108
 
109
          break;
110
   case 4:  
111
           STEUER_C_H;
112
           if(sense)
113
            {
114
                      STEUER_B_L;
115
              TCNT2 = 1;
116
              if(ZeitZumAdWandeln) AdConvert();
117
              SENSE_A;                     
118
              SENSE_FALLING_INT;
119
              Phase++;
120
              CntKommutierungen++;
121
             }
122
                     else
123
             {
124
              STEUER_A_L;
125
             }
126
 
127
          break;
128
   case 5:  
129
              STEUER_B_L;
130
           if(!sense)
131
            {
132
                      STEUER_A_H;
133
              TCNT2 = 1;
134
              if(ZeitZumAdWandeln) AdConvert();
135
              SENSE_C;
136
              SENSE_RISING_INT;
137
              Phase = 0;
138
              CntKommutierungen++;
139
             }
140
             else
141
             {
142
              STEUER_C_H;
143
             }
144
          break;
145
  }
146
}
147
 while((SENSE_L && sense) || (SENSE_H && !sense));
148
 ZeitZumAdWandeln = 0;
149
}
150
 
151
//############################################################################
152
//
153
void Manuell(void)
154
//############################################################################
155
{
156
 switch(Phase)
157
  {
158
   case 0:  
159
           STEUER_A_H;
160
                   STEUER_B_L;
161
           SENSE_C;
162
           SENSE_RISING_INT;
163
          break;
164
   case 1:  
165
           STEUER_A_H;
166
                   STEUER_C_L;
167
           SENSE_B;
168
           SENSE_FALLING_INT;
169
          break;
170
   case 2:  
171
           STEUER_B_H;
172
                   STEUER_C_L;
173
           SENSE_A;
174
           SENSE_RISING_INT;
175
          break;
176
   case 3:  
177
           STEUER_B_H;
178
                   STEUER_A_L;
179
           SENSE_C;
180
           SENSE_FALLING_INT;
181
          break;
182
   case 4:  
183
           STEUER_C_H;
184
                   STEUER_A_L;
185
           SENSE_B;
186
           SENSE_RISING_INT;
187
          break;
188
   case 5:  
189
           STEUER_C_H;
190
                   STEUER_B_L;
191
           SENSE_A;
192
           SENSE_FALLING_INT;
193
          break;
194
  }
195
}
196