1 | #include <stdio.h>
|
2 | #include <conio.h>
|
3 | #include <math.h>
|
4 |
|
5 | #include "io_toss.h"
|
6 | #include "funktionen.h"
|
7 | #include "clib.h"
|
8 | #include "pwm_3_r.h"
|
9 |
|
10 | void main(void)
|
11 | {
|
12 | // Variablendeklaration
|
13 | char Buffer[3] = {0, 0, 0}; // Datenpuffer Kommunikation
|
14 | int i = 0; // Zaehler für Schleifen
|
15 | int j = 0; // Zaehler für Schleifen
|
16 | unsigned char TG = 0; // Tastgrad für Übergabe an PCA9633
|
17 | double Sinus[20]; // Array mit Werten für Sinuskurve
|
18 | double PI = 3.14159265358979;
|
19 | int Phase[3]= {0, AnzWerte/3, AnzWerte/3*2};
|
20 | // Zaehler für die Phasen mit Offset für Phasenverschiebung
|
21 |
|
22 | for(i=0;i<AnzWerte;i++) // Belegen des Sinus-Arrays mit Werten
|
23 | {
|
24 | Sinus[i] = 128 + 128*sin(2.0*i*PI/AnzWerte);
|
25 | }
|
26 |
|
27 | // Initialisierung der Komponenten
|
28 | init_dk50(); // Initialisierung DK50 für Display
|
29 | I2C_init(); // Initialisierung I²C-Bus
|
30 | text_ini(); // Initialisierung Textmodus
|
31 | pwm_init(); // Initialisierung PCA9633
|
32 | BIOS_Set_Focus(FOCUS_APPLICATION); // stdio an Anwendung übergeben
|
33 |
|
34 | // Ausgabe auf dem Display
|
35 | _gotoxy(0,0); printf("Dreiphasenspannung");
|
36 | _gotoxy(0,1); printf("------------------");
|
37 | _gotoxy(0,3); printf("Motor Rechtslauf");
|
38 | _gotoxy(8,13); printf("Taste -> Ende");
|
39 |
|
40 | // Schleife für Änderung der Tastgrade, Abbruch mit Taste
|
41 | while(!kbhit())
|
42 | {
|
43 | // Tastgrad für Kanal 0
|
44 | if(Phase[0]++ >= AnzWerte) Phase[0] = 0; // Vermeidung Überlauf Zaehler
|
45 | TG = (int)(Sinus[Phase[0]]); // Momentanwert als Tastgrad
|
46 | Buffer[0] = TG; // Tastgrad in Puffer
|
47 |
|
48 | // Tastgrad an Kanal 1
|
49 | if(Phase[1]++ >= AnzWerte) Phase[1] = 0;
|
50 | TG = (int)(Sinus[Phase[1]]);
|
51 | Buffer[1] = TG;
|
52 |
|
53 | // Tastgrad an Kanal 2
|
54 | if(Phase[2]++ >= AnzWerte) Phase[2] = 0;
|
55 | TG = (int)(Sinus[Phase[2]]);
|
56 | Buffer[1] = TG;
|
57 |
|
58 | // Ausgabe der PWM-Signale
|
59 | pwm_out(Buffer, 3); // Datenpuffer und Anzahl Kanäle an PCA9633
|
60 | RTX_Sleep_Time(5); // Ablaufunterbrechung zum Einstellen
|
61 | // der Frequenz der erzeugten Sinusspannung
|
62 | // f=1/(x*20) mit x in ms
|
63 | }
|
64 | pwm_stop(); // Stoppt die Ausgabe
|
65 | clear_text(); // Bildschirm löschen
|
66 | BIOS_Set_Focus(FOCUS_SHELL); // stdio an Kommandozeile übergeben
|
67 | }
|