Subversion Repositories BL-Ctrl

Rev

Rev 1 | Rev 52 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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