Subversion Repositories BL-Ctrl

Rev

Rev 52 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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