Subversion Repositories BL-Ctrl

Rev

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

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