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 |