Hallo zusammen.
Es gibt schon einige Beiträge zu diesem Thema, konnte aber die Lösung
für mein Problem nirgendwo finden.
Ich will aus zwei PWM über eine H-Brücke einen Sinus erzeugen.
So weit so gut.
Ich benutze einen X-Mega128D3 und benutze die PWM-Ausgänge OCRA und OCRB
am PortF.
Ich arbeite mit einer Sinustabelle in der die jeweiligen PWM-Werte drin
stehen.
In Anlehnung an dieses Projekt:
http://www.mikrocontroller.net/articles/Wechselrichter
Nur, dass ich einen X-Mega benutze. Müsste aber meiner Meinung nach egal
sein.
Jetzt schaut euch mal meine Bilder an. Ich habe Probleme bei der
PWM-Erzeugung. Ich habe am Schluss meiner Halbwelle immer einen langen
Impuls.
Wo kommt dieser her. Diesen langen Impuls sieht man natürlich auch nach
dem Filter -> siehe Sinus Welle, da sind Überschwinger drin.
Meine Timer-Init:
1
voidInitTimerF0(void)
2
{
3
// Timer F0 als PWM-Timer initialisieren
4
TCF0.CTRLA=0b00000001;// Frequenzteiler = 1
5
6
TCF0.CTRLB=0b00110011;// Timer= Sigle Slope PWM; OCRA und OCRB einschalten
7
//TCF0.CTRLB = 0b00110110; // Timer= Dual Slope PWM(Top and Bottom); OCRA und OCRB einschalten
TCF0.INTCTRLA=0b00000011;// OVF-Int einschalten auf High Level
11
12
//TCF0.PER = 1250; // Timer Top-Wert auf 1250 setzen, entspricht 0,0625 ms bei 20 MHz
13
TCF0.PER=2000;// Timer Top-Wert auf 2000 setzen, entspricht 0,0625 ms bei 32 MHz
14
}
Jetzt habe ich mir das Datenblatt mal angeschaut (siehe Anhang). Kann es
sein, dass mein Timer am Schluss der Halbwelle nochmals komplett
durchläuft und am Schluss den Ausgang nochmals aktualisiert. Wenn ja,
wie kann ich das verhindern?
Ich entschuldige mich schon mal für Infos die fehlen. Bitte einfach
melden.
Danke
PWM-Laie schrieb:> Kann es> sein, dass mein Timer am Schluss der Halbwelle nochmals komplett> durchläuft und am Schluss den Ausgang nochmals aktualisiert.
Sieht so aus. Du könntest versuchsweise deine PWM Werte mal
(entsprechend gekürzt) parallel auf den DAC geben und damit
sicherstellen, das du keine Werte ausserhalb der Tabelle auf die OC
Register schreibst.
PWM-Laie schrieb:> TCF0.CTRLB = 0b00110011; // Timer= Sigle Slope PWM; OCRA und OCRB> einschalten
Da blickt übrigens keiner durch. Schreib doch lieber sowas:
denn dann weiss man, welche Sachen du setzen willst.
Alsdann ist es sinnvoll, die OC Werte in die CCABUF statt in CCA zu
schreiben, damit beim nächsten Update die Werte sicher im CC Register
stehen.
Hat der der D3 AWEX? Dann ist das noch eine gute Möglichkeit.
Du könntest mal den gesamten Sourcecode zeigen.
Hier sieht man nur die Initialisierung. Eine Aussage zu deinem Fehler
ist damit alleine nicht möglich.
Hast du das Projekt zum Frequenzumrichter so übernommen?
Die Werte für den Sinus gehen da von 0 bis 4095.
Wenn du deinen Timer auf den Wert 2000 begrenzt kann das nicht gehen.
Was hast du da alles verändert?
Bitte alles posten, dann findet man diesen Fehler bestimmt recht
schnell!
Gruß, Jens
Jens W. schrieb:> Du könntest mal den gesamten Sourcecode zeigen.> Hier sieht man nur die Initialisierung. Eine Aussage zu deinem Fehler> ist damit alleine nicht möglich.> Hast du das Projekt zum Frequenzumrichter so übernommen?> Die Werte für den Sinus gehen da von 0 bis 4095.> Wenn du deinen Timer auf den Wert 2000 begrenzt kann das nicht gehen.> Was hast du da alles verändert?>> Bitte alles posten, dann findet man diesen Fehler bestimmt recht> schnell!>> Gruß, Jens
Ja ich hab die Sinustabelle angepasst. Hab eigentlich nicht übernommen.
Hier meine ISR:
1
ISR(TCF0_OVF_vect)
2
{
3
4
//PORTF.OUT ^= (1<<4); // Testpin
5
6
7
if(step>=320)
8
step=0;
9
10
if(step<=160)
11
{
12
TCF0.CCA=sinustabelle32MHz[step];
13
}
14
if(step>=161)
15
{
16
TCF0.CCB=sinustabelle32MHz[step];
17
}
18
19
step++;
20
}
Und die Tabelle.
1
constunsignedintsinustabelle32MHz[321]={
2
0,// Zeit: 0 ms -> Step: 0
3
39,// Zeit: 0,0625 ms -> Step: 1
4
79,// Zeit: 0,125 ms -> Step: 2
5
118,// Zeit: 0,1875 ms -> Step: 3
6
157,// Zeit: 0,25 ms -> Step: 4
7
196,// Zeit: 0,3125 ms -> Step: 5
8
235,// Zeit: 0,375 ms -> Step: 6
9
274,// Zeit: 0,4375 ms -> Step: 7
10
313,// Zeit: 0,5 ms -> Step: 8
11
352,// Zeit: 0,5625 ms -> Step: 9
12
390,// Zeit: 0,625 ms -> Step: 10
13
429,// Zeit: 0,6875 ms -> Step: 11
14
467,// Zeit: 0,75 ms -> Step: 12
15
505,// Zeit: 0,8125 ms -> Step: 13
16
543,// Zeit: 0,875 ms -> Step: 14
17
581,// Zeit: 0,9375 ms -> Step: 15
18
618,// Zeit: 1 ms -> Step: 16
19
655,// Zeit: 1,0625 ms -> Step: 17
20
692,// Zeit: 1,125 ms -> Step: 18
21
729,// Zeit: 1,1875 ms -> Step: 19
22
765,// Zeit: 1,25 ms -> Step: 20
23
801,// Zeit: 1,3125 ms -> Step: 21
24
837,// Zeit: 1,375 ms -> Step: 22
25
873,// Zeit: 1,4375 ms -> Step: 23
26
908,// Zeit: 1,5 ms -> Step: 24
27
943,// Zeit: 1,5625 ms -> Step: 25
28
977,// Zeit: 1,625 ms -> Step: 26
29
1011,// Zeit: 1,6875 ms -> Step: 27
30
1045,// Zeit: 1,75 ms -> Step: 28
31
1078,// Zeit: 1,8125 ms -> Step: 29
32
1111,// Zeit: 1,875 ms -> Step: 30
33
1144,// Zeit: 1,9375 ms -> Step: 31
34
1176,// Zeit: 2 ms -> Step: 32
35
1207,// Zeit: 2,0625 ms -> Step: 33
36
1238,// Zeit: 2,125 ms -> Step: 34
37
1269,// Zeit: 2,1875 ms -> Step: 35
38
1299,// Zeit: 2,25 ms -> Step: 36
39
1329,// Zeit: 2,3125 ms -> Step: 37
40
1358,// Zeit: 2,375 ms -> Step: 38
41
1386,// Zeit: 2,4375 ms -> Step: 39
42
1414,// Zeit: 2,5 ms -> Step: 40
43
1442,// Zeit: 2,5625 ms -> Step: 41
44
1469,// Zeit: 2,625 ms -> Step: 42
45
1495,// Zeit: 2,6875 ms -> Step: 43
46
1521,// Zeit: 2,75 ms -> Step: 44
47
1546,// Zeit: 2,8125 ms -> Step: 45
48
1571,// Zeit: 2,875 ms -> Step: 46
49
1595,// Zeit: 2,9375 ms -> Step: 47
50
1618,// Zeit: 3 ms -> Step: 48
51
1641,// Zeit: 3,0625 ms -> Step: 49
52
1663,// Zeit: 3,125 ms -> Step: 50
53
1684,// Zeit: 3,1875 ms -> Step: 51
54
1705,// Zeit: 3,25 ms -> Step: 52
55
1725,// Zeit: 3,3125 ms -> Step: 53
56
1745,// Zeit: 3,375 ms -> Step: 54
57
1764,// Zeit: 3,4375 ms -> Step: 55
58
1782,// Zeit: 3,5 ms -> Step: 56
59
1799,// Zeit: 3,5625 ms -> Step: 57
60
1816,// Zeit: 3,625 ms -> Step: 58
61
1832,// Zeit: 3,6875 ms -> Step: 59
62
1848,// Zeit: 3,75 ms -> Step: 60
63
1862,// Zeit: 3,8125 ms -> Step: 61
64
1876,// Zeit: 3,875 ms -> Step: 62
65
1890,// Zeit: 3,9375 ms -> Step: 63
66
1902,// Zeit: 4 ms -> Step: 64
67
1914,// Zeit: 4,0625 ms -> Step: 65
68
1925,// Zeit: 4,125 ms -> Step: 66
69
1935,// Zeit: 4,1875 ms -> Step: 67
70
1945,// Zeit: 4,25 ms -> Step: 68
71
1954,// Zeit: 4,3125 ms -> Step: 69
72
1962,// Zeit: 4,375 ms -> Step: 70
73
1969,// Zeit: 4,4375 ms -> Step: 71
74
1975,// Zeit: 4,5 ms -> Step: 72
75
1981,// Zeit: 4,5625 ms -> Step: 73
76
1986,// Zeit: 4,625 ms -> Step: 74
77
1990,// Zeit: 4,6875 ms -> Step: 75
78
1994,// Zeit: 4,75 ms -> Step: 76
79
1997,// Zeit: 4,8125 ms -> Step: 77
80
1998,// Zeit: 4,875 ms -> Step: 78
81
2000,// Zeit: 4,9375 ms -> Step: 79
82
2000,// Zeit: 5 ms -> Step: 80
83
2000,// Zeit: 5,0625 ms -> Step: 81
84
1998,// Zeit: 5,125 ms -> Step: 82
85
1997,// Zeit: 5,1875 ms -> Step: 83
86
1994,// Zeit: 5,25 ms -> Step: 84
87
1990,// Zeit: 5,3125 ms -> Step: 85
88
1986,// Zeit: 5,375 ms -> Step: 86
89
1981,// Zeit: 5,4375 ms -> Step: 87
90
1975,// Zeit: 5,5 ms -> Step: 88
91
1969,// Zeit: 5,5625 ms -> Step: 89
92
1962,// Zeit: 5,625 ms -> Step: 90
93
1954,// Zeit: 5,6875 ms -> Step: 91
94
1945,// Zeit: 5,75 ms -> Step: 92
95
1935,// Zeit: 5,8125 ms -> Step: 93
96
1925,// Zeit: 5,875 ms -> Step: 94
97
1914,// Zeit: 5,9375 ms -> Step: 95
98
1902,// Zeit: 6 ms -> Step: 96
99
1890,// Zeit: 6,0625 ms -> Step: 97
100
1876,// Zeit: 6,125 ms -> Step: 98
101
1862,// Zeit: 6,1875 ms -> Step: 99
102
1848,// Zeit: 6,25 ms -> Step: 100
103
1832,// Zeit: 6,3125 ms -> Step: 101
104
1816,// Zeit: 6,375 ms -> Step: 102
105
1799,// Zeit: 6,4375 ms -> Step: 103
106
1782,// Zeit: 6,5 ms -> Step: 104
107
1764,// Zeit: 6,5625 ms -> Step: 105
108
1745,// Zeit: 6,625 ms -> Step: 106
109
1725,// Zeit: 6,6875 ms -> Step: 107
110
1705,// Zeit: 6,75 ms -> Step: 108
111
1684,// Zeit: 6,8125 ms -> Step: 109
112
1663,// Zeit: 6,875 ms -> Step: 110
113
1641,// Zeit: 6,9375 ms -> Step: 111
114
1618,// Zeit: 7 ms -> Step: 112
115
1595,// Zeit: 7,0625 ms -> Step: 113
116
1571,// Zeit: 7,125 ms -> Step: 114
117
1546,// Zeit: 7,1875 ms -> Step: 115
118
1521,// Zeit: 7,25 ms -> Step: 116
119
1495,// Zeit: 7,3125 ms -> Step: 117
120
1469,// Zeit: 7,375 ms -> Step: 118
121
1442,// Zeit: 7,4375 ms -> Step: 119
122
1414,// Zeit: 7,5 ms -> Step: 120
123
1386,// Zeit: 7,5625 ms -> Step: 121
124
1358,// Zeit: 7,625 ms -> Step: 122
125
1329,// Zeit: 7,6875 ms -> Step: 123
126
1299,// Zeit: 7,75 ms -> Step: 124
127
1269,// Zeit: 7,8125 ms -> Step: 125
128
1238,// Zeit: 7,875 ms -> Step: 126
129
1207,// Zeit: 7,9375 ms -> Step: 127
130
1176,// Zeit: 8 ms -> Step: 128
131
1144,// Zeit: 8,0625 ms -> Step: 129
132
1111,// Zeit: 8,125 ms -> Step: 130
133
1078,// Zeit: 8,1875 ms -> Step: 131
134
1045,// Zeit: 8,25 ms -> Step: 132
135
1011,// Zeit: 8,3125 ms -> Step: 133
136
977,// Zeit: 8,375 ms -> Step: 134
137
943,// Zeit: 8,4375 ms -> Step: 135
138
908,// Zeit: 8,5 ms -> Step: 136
139
873,// Zeit: 8,5625 ms -> Step: 137
140
837,// Zeit: 8,625 ms -> Step: 138
141
801,// Zeit: 8,6875 ms -> Step: 139
142
765,// Zeit: 8,75 ms -> Step: 140
143
729,// Zeit: 8,8125 ms -> Step: 141
144
692,// Zeit: 8,875 ms -> Step: 142
145
655,// Zeit: 8,9375 ms -> Step: 143
146
618,// Zeit: 9 ms -> Step: 144
147
581,// Zeit: 9,0625 ms -> Step: 145
148
543,// Zeit: 9,125 ms -> Step: 146
149
505,// Zeit: 9,1875 ms -> Step: 147
150
467,// Zeit: 9,25 ms -> Step: 148
151
429,// Zeit: 9,3125 ms -> Step: 149
152
390,// Zeit: 9,375 ms -> Step: 150
153
352,// Zeit: 9,4375 ms -> Step: 151
154
313,// Zeit: 9,5 ms -> Step: 152
155
274,// Zeit: 9,5625 ms -> Step: 153
156
235,// Zeit: 9,625 ms -> Step: 154
157
196,// Zeit: 9,6875 ms -> Step: 155
158
157,// Zeit: 9,75 ms -> Step: 156
159
118,// Zeit: 9,8125 ms -> Step: 157
160
79,// Zeit: 9,875 ms -> Step: 158
161
39,// Zeit: 9,9375 ms -> Step: 159
162
0,// Zeit: 10 ms -> Step: 160
163
39,// Zeit: 10,0625 ms -> Step: 161
164
79,// Zeit: 10,125 ms -> Step: 162
165
118,// Zeit: 10,1875 ms -> Step: 163
166
157,// Zeit: 10,25 ms -> Step: 164
167
196,// Zeit: 10,3125 ms -> Step: 165
168
235,// Zeit: 10,375 ms -> Step: 166
169
274,// Zeit: 10,4375 ms -> Step: 167
170
313,// Zeit: 10,5 ms -> Step: 168
171
352,// Zeit: 10,5625 ms -> Step: 169
172
390,// Zeit: 10,625 ms -> Step: 170
173
429,// Zeit: 10,6875 ms -> Step: 171
174
467,// Zeit: 10,75 ms -> Step: 172
175
505,// Zeit: 10,8125 ms -> Step: 173
176
543,// Zeit: 10,875 ms -> Step: 174
177
581,// Zeit: 10,9375 ms -> Step: 175
178
618,// Zeit: 11 ms -> Step: 176
179
655,// Zeit: 11,0625 ms -> Step: 177
180
692,// Zeit: 11,125 ms -> Step: 178
181
729,// Zeit: 11,1875 ms -> Step: 179
182
765,// Zeit: 11,25 ms -> Step: 180
183
801,// Zeit: 11,3125 ms -> Step: 181
184
837,// Zeit: 11,375 ms -> Step: 182
185
873,// Zeit: 11,4375 ms -> Step: 183
186
908,// Zeit: 11,5 ms -> Step: 184
187
943,// Zeit: 11,5625 ms -> Step: 185
188
977,// Zeit: 11,625 ms -> Step: 186
189
1011,// Zeit: 11,6875 ms -> Step: 187
190
1045,// Zeit: 11,75 ms -> Step: 188
191
1078,// Zeit: 11,8125 ms -> Step: 189
192
1111,// Zeit: 11,875 ms -> Step: 190
193
1144,// Zeit: 11,9375 ms -> Step: 191
194
1176,// Zeit: 12 ms -> Step: 192
195
1207,// Zeit: 12,0625 ms -> Step: 193
196
1238,// Zeit: 12,125 ms -> Step: 194
197
1269,// Zeit: 12,1875 ms -> Step: 195
198
1299,// Zeit: 12,25 ms -> Step: 196
199
1329,// Zeit: 12,3125 ms -> Step: 197
200
1358,// Zeit: 12,375 ms -> Step: 198
201
1386,// Zeit: 12,4375 ms -> Step: 199
202
1414,// Zeit: 12,5 ms -> Step: 200
203
1442,// Zeit: 12,5625 ms -> Step: 201
204
1469,// Zeit: 12,625 ms -> Step: 202
205
1495,// Zeit: 12,6875 ms -> Step: 203
206
1521,// Zeit: 12,75 ms -> Step: 204
207
1546,// Zeit: 12,8125 ms -> Step: 205
208
1571,// Zeit: 12,875 ms -> Step: 206
209
1595,// Zeit: 12,9375 ms -> Step: 207
210
1618,// Zeit: 13 ms -> Step: 208
211
1641,// Zeit: 13,0625 ms -> Step: 209
212
1663,// Zeit: 13,125 ms -> Step: 210
213
1684,// Zeit: 13,1875 ms -> Step: 211
214
1705,// Zeit: 13,25 ms -> Step: 212
215
1725,// Zeit: 13,3125 ms -> Step: 213
216
1745,// Zeit: 13,375 ms -> Step: 214
217
1764,// Zeit: 13,4375 ms -> Step: 215
218
1782,// Zeit: 13,5 ms -> Step: 216
219
1799,// Zeit: 13,5625 ms -> Step: 217
220
1816,// Zeit: 13,625 ms -> Step: 218
221
1832,// Zeit: 13,6875 ms -> Step: 219
222
1848,// Zeit: 13,75 ms -> Step: 220
223
1862,// Zeit: 13,8125 ms -> Step: 221
224
1876,// Zeit: 13,875 ms -> Step: 222
225
1890,// Zeit: 13,9375 ms -> Step: 223
226
1902,// Zeit: 14 ms -> Step: 224
227
1914,// Zeit: 14,0625 ms -> Step: 225
228
1925,// Zeit: 14,125 ms -> Step: 226
229
1935,// Zeit: 14,1875 ms -> Step: 227
230
1945,// Zeit: 14,25 ms -> Step: 228
231
1954,// Zeit: 14,3125 ms -> Step: 229
232
1962,// Zeit: 14,375 ms -> Step: 230
233
1969,// Zeit: 14,4375 ms -> Step: 231
234
1975,// Zeit: 14,5 ms -> Step: 232
235
1981,// Zeit: 14,5625 ms -> Step: 233
236
1986,// Zeit: 14,625 ms -> Step: 234
237
1990,// Zeit: 14,6875 ms -> Step: 235
238
1994,// Zeit: 14,75 ms -> Step: 236
239
1997,// Zeit: 14,8125 ms -> Step: 237
240
1998,// Zeit: 14,875 ms -> Step: 238
241
2000,// Zeit: 14,9375 ms -> Step: 239
242
2000,// Zeit: 15 ms -> Step: 240
243
2000,// Zeit: 15,0625 ms -> Step: 241
244
1998,// Zeit: 15,125 ms -> Step: 242
245
1997,// Zeit: 15,1875 ms -> Step: 243
246
1994,// Zeit: 15,25 ms -> Step: 244
247
1990,// Zeit: 15,3125 ms -> Step: 245
248
1986,// Zeit: 15,375 ms -> Step: 246
249
1981,// Zeit: 15,4375 ms -> Step: 247
250
1975,// Zeit: 15,5 ms -> Step: 248
251
1969,// Zeit: 15,5625 ms -> Step: 249
252
1962,// Zeit: 15,625 ms -> Step: 250
253
1954,// Zeit: 15,6875 ms -> Step: 251
254
1945,// Zeit: 15,75 ms -> Step: 252
255
1935,// Zeit: 15,8125 ms -> Step: 253
256
1925,// Zeit: 15,875 ms -> Step: 254
257
1914,// Zeit: 15,9375 ms -> Step: 255
258
1902,// Zeit: 16 ms -> Step: 256
259
1890,// Zeit: 16,0625 ms -> Step: 257
260
1876,// Zeit: 16,125 ms -> Step: 258
261
1862,// Zeit: 16,1875 ms -> Step: 259
262
1848,// Zeit: 16,25 ms -> Step: 260
263
1832,// Zeit: 16,3125 ms -> Step: 261
264
1816,// Zeit: 16,375 ms -> Step: 262
265
1799,// Zeit: 16,4375 ms -> Step: 263
266
1782,// Zeit: 16,5 ms -> Step: 264
267
1764,// Zeit: 16,5625 ms -> Step: 265
268
1745,// Zeit: 16,625 ms -> Step: 266
269
1725,// Zeit: 16,6875 ms -> Step: 267
270
1705,// Zeit: 16,75 ms -> Step: 268
271
1684,// Zeit: 16,8125 ms -> Step: 269
272
1663,// Zeit: 16,875 ms -> Step: 270
273
1641,// Zeit: 16,9375 ms -> Step: 271
274
1618,// Zeit: 17 ms -> Step: 272
275
1595,// Zeit: 17,0625 ms -> Step: 273
276
1571,// Zeit: 17,125 ms -> Step: 274
277
1546,// Zeit: 17,1875 ms -> Step: 275
278
1521,// Zeit: 17,25 ms -> Step: 276
279
1495,// Zeit: 17,3125 ms -> Step: 277
280
1469,// Zeit: 17,375 ms -> Step: 278
281
1442,// Zeit: 17,4375 ms -> Step: 279
282
1414,// Zeit: 17,5 ms -> Step: 280
283
1386,// Zeit: 17,5625 ms -> Step: 281
284
1358,// Zeit: 17,625 ms -> Step: 282
285
1329,// Zeit: 17,6875 ms -> Step: 283
286
1299,// Zeit: 17,75 ms -> Step: 284
287
1269,// Zeit: 17,8125 ms -> Step: 285
288
1238,// Zeit: 17,875 ms -> Step: 286
289
1207,// Zeit: 17,9375 ms -> Step: 287
290
1176,// Zeit: 18 ms -> Step: 288
291
1144,// Zeit: 18,0625 ms -> Step: 289
292
1111,// Zeit: 18,125 ms -> Step: 290
293
1078,// Zeit: 18,1875 ms -> Step: 291
294
1045,// Zeit: 18,25 ms -> Step: 292
295
1011,// Zeit: 18,3125 ms -> Step: 293
296
977,// Zeit: 18,375 ms -> Step: 294
297
943,// Zeit: 18,4375 ms -> Step: 295
298
908,// Zeit: 18,5 ms -> Step: 296
299
873,// Zeit: 18,5625 ms -> Step: 297
300
837,// Zeit: 18,625 ms -> Step: 298
301
801,// Zeit: 18,6875 ms -> Step: 299
302
765,// Zeit: 18,75 ms -> Step: 300
303
729,// Zeit: 18,8125 ms -> Step: 301
304
692,// Zeit: 18,875 ms -> Step: 302
305
655,// Zeit: 18,9375 ms -> Step: 303
306
618,// Zeit: 19 ms -> Step: 304
307
581,// Zeit: 19,0625 ms -> Step: 305
308
543,// Zeit: 19,125 ms -> Step: 306
309
505,// Zeit: 19,1875 ms -> Step: 307
310
467,// Zeit: 19,25 ms -> Step: 308
311
429,// Zeit: 19,3125 ms -> Step: 309
312
390,// Zeit: 19,375 ms -> Step: 310
313
352,// Zeit: 19,4375 ms -> Step: 311
314
313,// Zeit: 19,5 ms -> Step: 312
315
274,// Zeit: 19,5625 ms -> Step: 313
316
235,// Zeit: 19,625 ms -> Step: 314
317
196,// Zeit: 19,6875 ms -> Step: 315
318
157,// Zeit: 19,75 ms -> Step: 316
319
118,// Zeit: 19,8125 ms -> Step: 317
320
79,// Zeit: 19,875 ms -> Step: 318
321
39,// Zeit: 19,9375 ms -> Step: 319
322
0,// Zeit: 20 ms -> Step 320 (Extraschritt wird für die saubere Abschaltung des OCR-Pins benötigt)
323
324
};
Das ist eigentlich alles.
Es ist bis jetzt nur ein Testprogramm. Keine Schnittstelle, kein ADC,
kein Display. Der Controller macht nur die PWM-Ausgabe.
Matthias S. schrieb:> Da blickt übrigens keiner durch. Schreib doch lieber sowas:TCF0.CTRLA => ( TCF0.CTRLA & ~TC0_CLKSEL_gm ) | TC_CLKSEL_DIV64_gc;> denn dann weiss man, welche Sachen du setzen willst.
Ja ich weiß. Hab aber schon so viel probiert, da war das einfacher.
Matthias S. schrieb:> Alsdann ist es sinnvoll, die OC Werte in die CCABUF statt in CCA zu> schreiben, damit beim nächsten Update die Werte sicher im CC Register> stehen.
Verstehe ich nicht ganz. Wie soll ich vorgehen?
PWM-Laie schrieb:> Matthias S. schrieb:>> Alsdann ist es sinnvoll, die OC Werte in die CCABUF statt in CCA zu>> schreiben, damit beim nächsten Update die Werte sicher im CC Register>> stehen.>> Verstehe ich nicht ganz. Wie soll ich vorgehen?
Habs einfach probiert und siehe da, es geht!!!
Vielen Dank.
Ich poste gleiche ein Bild.
PWM-Laie schrieb:> Habs einfach probiert und siehe da, es geht!!!
Damit bin ich auch mal böse auf die Nase gefallen. Man sollte eigentlich
immer die BUF-Register nutzen. Ein moderner Controller macht diese
Spiränz'chen zum Glück automatisch...
Sodelle, anbei mein Bild.
Jetzt läuft es perfekt.
Ich dachte schon, dass ich zu blöd für die Sache bin.
Nochmals vielen Dank für den Tipp.
Nun bin ich ein mal auf die Nase gefallen, jetzt weiß ich es.
Ingo L. schrieb:> Damit bin ich auch mal böse auf die Nase gefallen. Man sollte eigentlich> immer die BUF-Register nutzen. Ein moderner Controller macht diese> Spiränz'chen zum Glück automatisch...
Warum macht der µC das eigentlich?
Wieso werden die Werte nochmals gepuffert?
Du scheinst aber immernoch am Ende einer Schwingung bzw. Beginn der
negativen Halbschwingung eine minimale Verzerrung zu haben!? Warum
gerade 321 Werte in der Tabelle? Ist doch unsymmetrisch! Nimm 320 und
mach:
1
if(step>319)
2
step=0;
3
4
if(step<160)// 0..159 = 160
5
{
6
TCF0.CCA=sinustabelle32MHz[step];
7
}
8
if(step>=160)// 160... 319 = 160
9
{
10
TCF0.CCB=sinustabelle32MHz[step];
11
}
12
step++;
Wenn du Speicher sparen musst, nimm nur ein Teil der Sinus Tabelle, z.B.
0°-90°, den Rest kannst du dir daraus zurecht biegen.
@ PWM-Laie (Gast)
>Und die Tabelle.>onst unsigned int sinustabelle32MHz[321] ={> 0, // Zeit: 0 ms -> Step: 0> 39, // Zeit: 0,0625 ms -> Step: 1> 79, // Zeit: 0,125 ms -> Step: 2> 118, // Zeit: 0,1875 ms -> Step: 3
Wie kommt man auf die Schnapsidee, eine Tabelle derartig zu stukturieren
und JEDE Zeile zu kommentieren?
Selbst wenn man das per Script generiert ist das einfach nur Unsinn.
https://www.mikrocontroller.net/articles/Sinus_Tabelle
@PWM-Laie (Gast)
>> Damit bin ich auch mal böse auf die Nase gefallen. Man sollte eigentlich>> immer die BUF-Register nutzen. Ein moderner Controller macht diese>> Spiränz'chen zum Glück automatisch...>Warum macht der µC das eigentlich?>Wieso werden die Werte nochmals gepuffert?
Damit die neuen Werte IMMER EXAKT zum Beginn der PWM-Periode geladen
weden und nicht irgendwann mitten drin.
Wenn man nämlich direket auf die aktiven Werte schreibt, kann man eine
laufende PWM durcheinander bringen.
Denn dieser Wert wird bei jedem PWM-Takt mit dem PWM-Zähler verglichen
und dementsprechend das Ausgangssignal HIGH oder LOW geschaltet.
Beispiel. PWM-Wert im Register = 128, 8 Bit PWM
Der Zähler ist bei 150, das PWM-Ausgangssignal ist also schon ein paar
Takte LOW. Jetzt schreibt dein Controller plötzlich den Wert 250 ins
direkt aktive Register. Damit wird das Pin wieder auf HIGH gesetzt und
erst wenn der PWM-Zähler auf 250 angekommen ist, wieder auf LOW. Damit
ist diese PWM-Periode gestört worden.
Ingo L. schrieb:> Du scheinst aber immernoch am Ende einer Schwingung bzw. Beginn> der> negativen Halbschwingung eine minimale Verzerrung zu haben!? Warum> gerade 321 Werte in der Tabelle? Ist doch unsymmetrisch! Nimm 320 und> mach:if(step > 319)> step=0;>> if(step < 160) // 0..159 = 160> {> TCF0.CCA = sinustabelle32MHz[step];> }> if(step >= 160) // 160... 319 = 160> {> TCF0.CCB = sinustabelle32MHz[step];> }> step++;>> Wenn du Speicher sparen musst, nimm nur ein Teil der Sinus Tabelle, z.B.> 0°-90°, den Rest kannst du dir daraus zurecht biegen.
Der Speicher ist nicht das Problem. Aber prinzipiell hast du schon
recht.
Ich schreib es mal um auf 320 Werte.
Falk B. schrieb:> Wie kommt man auf die Schnapsidee, eine Tabelle derartig zu stukturieren> und JEDE Zeile zu kommentieren?> Selbst wenn man das per Script generiert ist das einfach nur Unsinn.
Es ist doch meine Lebenszeit die drauf geht, oder?
Ich hab alles mit EXCEL generiert, wo ist das Problem. Das dauert eine
Sekunde.
Falk B. schrieb:> Damit die neuen Werte IMMER EXAKT zum Beginn der PWM-Periode geladen> weden und nicht irgendwann mitten drin.> Wenn man nämlich direket auf die aktiven Werte schreibt, kann man eine> laufende PWM durcheinander bringen.> Denn dieser Wert wird bei jedem PWM-Takt mit dem PWM-Zähler verglichen> und dementsprechend das Ausgangssignal HIGH oder LOW geschaltet.>> Beispiel. PWM-Wert im Register = 128, 8 Bit PWM>> Der Zähler ist bei 150, das PWM-Ausgangssignal ist also schon ein paar> Takte LOW. Jetzt schreibt dein Controller plötzlich den Wert 250 ins> direkt aktive Register. Damit wird das Pin wieder auf HIGH gesetzt und> erst wenn der PWM-Zähler auf 250 angekommen ist, wieder auf LOW. Damit> ist diese PWM-Periode gestört worden.
OK verstanden, danke.
Hallo nochmal.
Nachdem jetzt meine PWM-Erzeugung funktioniert, hätte ich noch eine
Frage.
Muss dazu sagen, dass ich noch Fußgänger in Sachen Leistungselektronik
bin.
Wahrscheinlich kann mir einer von euch die Frage sofort beantworten.
Ich steuere ja mit meinen zwei PWMs eine H-Brücke wie im oben erwähnten
Wechselrichter-Projekt an. Gerade teste ich noch mit 30V
Versorgungsspannung an der H-Brücke und meine Schaltung inkl. µC nimmt
ohne Last und ohne den Sinusfilter 47 mA auf.
Wenn ich jetzt die Versorgungsspannung langsam erhöhe, dann steigt meine
Stromaufnahme auf max. 150 mA bei 230V und die MOSFETs werden heiß.
Wie gesagt, ich hab keine Last an der H-Brücke (auch keinen Filter).
Zuerst kamen mir die Schaltverluste in den Sinn, aber ich habe ja keine
Last ?!?
Ist das der Gate-Ladestrom, der die erhöhte Stromaufnahme generiert. Der
müsste doch aber immer gleich sein, oder nicht?
Bitte helft mir.
Danke
@ PWM-Laie (Gast)
>Ich steuere ja mit meinen zwei PWMs eine H-Brücke wie im oben erwähnten>Wechselrichter-Projekt an.
Schaltplan?
> Gerade teste ich noch mit 30V>Versorgungsspannung an der H-Brücke und meine Schaltung inkl. µC nimmt>ohne Last und ohne den Sinusfilter 47 mA auf.
Ganz schön viel.
>Wenn ich jetzt die Versorgungsspannung langsam erhöhe, dann steigt meine>Stromaufnahme auf max. 150 mA bei 230V und die MOSFETs werden heiß.
Da stimmt was nicht. Wahrscheinlich hast du keine Pausen bei der
Ansteuerung der Halbbrücken und es leiten beide MOSFETs kurzeitig,
wodurch ein großer Strom von VCC durch die MOSFETs nach GND fließt, aka
shoot through current.
>Ist das der Gate-Ladestrom, der die erhöhte Stromaufnahme generiert.
Nein.
Falk B. schrieb:> Da stimmt was nicht. Wahrscheinlich hast du keine Pausen bei der> Ansteuerung der Halbbrücken und es leiten beide MOSFETs kurzeitig,> wodurch ein großer Strom von VCC durch die MOSFETs nach GND fließt, aka> shoot through current.
Hab ich mir auch schon gedacht.
Aber ich meine das Oszi-Bild sieht gut aus, oder?
Ich hab gerade selbst etwas festgestellt.
Wenn ich den 10R Vorwiderstand an den FETs weg mache wirds besser. Dann
nimmt meine Schaltung bei 30V nur noch 33 mA auf und wenn ich die
Spannung auf 60V erhöhe, dann bleibt es dabei.
Wahrscheinlich haben die den Gate-Strom (Pulsstrom) so begrenzt, dass
diese zu langsam durchgesteuert und wieder gesperrt haben.
Somit haben dann kurzzeitig beide geleitet.
Komischerweise sind diese Vorwiderstände im Datenblatt des IR2109 im
Schaltbild mit drin.
Wiese machen die das? Um die Störungen zu reduzieren?
Der IR2109 hat 1. eine fest eingestellte Totzeit, die du von aussen
nicht beeinflussen kannst und 2. nur ein recht geringe Treiberleistung
von 120/250mA.
Dem gegenüber steht eine recht hohe Total Gate Charge beim IRFP460 mit
etwa 210 nC. Bei deiner PWM Frequenz wirds da knapp mit einem zügigen
Auf- und Entladen der Gates, so das die Highside noch leitet, wenn die
Lowside anfängt zu leiten.
Die Wahl des IR2109 ist also falsch. Nimm dir einen IR2110 o.ä. und
steuere in mit AWEX und dem DTI Block des XMega an. So hast du eine
freie Auswahl der Totzeit und kannst das auf deine Schaltung optimieren.
Edit: Du kannst zwar den Gatewiderstand reduzieren, riskierst damit aber
Überstrom im Treiber.
Hallo,
nein, das Bild reicht nicht aus. Das ist ja nur die Frequenz der
gesamten Sinusschwingung.
Du musst in eine einzelne PWM Periode rein zoomen.
Hier ist es wichtig wie deine Mosfets getaktet werden. Ich nehme an
alternierend. Das heißt, wenn der obere an ist, ist der untere aus. Und
umgekehrt. Da kann es sein, dass beim Umschalten der Fets kurz beide an
sind.
Grüße, Jens
Matthias S. schrieb:> Du kannst zwar den Gatewiderstand reduzieren, riskierst damit aber> Überstrom im Treiber.
Aha, ein kleiner Widerstand ist dann nicht schlecht.
Gerade fließt also das was meine 15V-Spannungsquelle hergibt. Den Strom
könnte ich ja mal messen.
Ich schaue mir den IR2110 mal an.
Matthias S. schrieb:> Dem gegenüber steht eine recht hohe Total Gate Charge beim IRFP460 mit> etwa 210 nC.
OK. Ich versuche mal auszurechnen wie lange es bei dem Strom dauert das
Gate zu laden.
Gibts da Faustformeln?
@ PWM-Laie (Gast)
>Hab ich mir auch schon gedacht.>Aber ich meine das Oszi-Bild sieht gut aus, oder?
Man sieht das Problem so oder so nicht bei dieser Messung. Dazu müßte
man den Strom durch die einzelnen Zweige messen.
>Wenn ich den 10R Vorwiderstand an den FETs weg mache wirds besser. Dann>nimmt meine Schaltung bei 30V nur noch 33 mA auf
Schon mal ein wichitger Hinweis.
>Wahrscheinlich haben die den Gate-Strom (Pulsstrom) so begrenzt, dass>diese zu langsam durchgesteuert und wieder gesperrt haben.>Somit haben dann kurzzeitig beide geleitet.
Ja.
>Komischerweise sind diese Vorwiderstände im Datenblatt des IR2109 im>Schaltbild mit drin.
10 Ohm an 15V macht max. 1,5A, die dann mit einer RC-Kurve abfallen.
>Wiese machen die das? Um die Störungen zu reduzieren?
Damit der Stromkreis Gatetreiber - Gate -Source Gatetreiber bedämpft
wird. Denn die Gatekapazität schwingt im Zusammspeil mit der
INduktivität der Gatezuleitung. Der WIderstnad dämpft die Schwingung.
Wie sieht dein Aufbau mechanisch aus? Sind die Treiber NAH an den
MOSFETs? viel mehr als 100mm sollten es nicht sein, eher weniger. Und
die Zuleitungen zu Gate/Source müssen verdrillt sein.
PWM-Laie schrieb:> Gibts da Faustformeln?
Da gibts soger Formeln ohne Faust:
https://en.wikipedia.org/wiki/Coulomb
Gleich die erste:
Ladung = Strom * Anstiegszeit.
Bisschen Umstellerei und du kommst auf den benötigten Strom für die
gewünschte Anstiegszeit.
Falk B. schrieb:> Damit der Stromkreis Gatetreiber - Gate -Source Gatetreiber bedämpft> wird. Denn die Gatekapazität schwingt im Zusammspeil mit der> INduktivität der Gatezuleitung. Der WIderstnad dämpft die Schwingung.> Wie sieht dein Aufbau mechanisch aus? Sind die Treiber NAH an den> MOSFETs? viel mehr als 100mm sollten es nicht sein, eher weniger. Und> die Zuleitungen zu Gate/Source müssen verdrillt sein.
Die Gate-Treiber sind sehr dicht dran. Max 20 mm. Wenn ich mir das
Ansteuersignal ansehe, dann finde ich kein Schwingen. Das würde man doch
auf Oszi sehen, oder nicht?
Meine Stromaufnahme steigt immer noch auf 50 mA wenn ich mit 230 V
speise. Und die MOSFETS werden auch noch warm. Ich denke ich hab immer
noch einen Querstrom.
Ich muss eventuell doch auf einen anderen Treiber. Hier wurde schon der
IR2110 empfohlen. Gibts noch andere Erfahrungen?
Matthias S. schrieb:> Da gibts soger Formeln ohne Faust:> https://en.wikipedia.org/wiki/Coulomb> Gleich die erste:
Ok danke.