31-01-2017, 23:43
Witam, mam do zrobienia 3 fazowy modulator PWM. Z tego co wiem najlepiej będzie jak wygeneruje 3 sygnały sinusoidalne przesunięte względem siebie o 120 stopni. W projekcie muszę zwiększać wypełnienie PWM za pomocą klawiatury. Znalazłem kod na 3 fazowy generator sygnału sinusoidalnego i tutaj rodzi się problem, mianowicie:
-Czy można z tego kodu wywalić potencjometr i ustalić stała częstotliwość?
-Chciałbym zwiększać wartość PWM z klawiatury membranowej, wiem że PWM ma wartości od 0 do 255, natomiast tutaj w kodzie wystepuje na wyjściu PWM:
pp1 = 126*sin(x+ph1);
p1 = pp1+128;
gdzie: const float ph1 = 2*pi/3; , x = x + y; , float x = 0;
-Ostatni problem czy da się wywalić drugie wejście tak żeby program od razu chodził i klawiszami bym sobie sterował tylko wypełnieniem poszczególnych
Kod zaczerpnięty jest z tego wątku: https://forum.arduino.cc/index.php?topic=114252.0
-Czy można z tego kodu wywalić potencjometr i ustalić stała częstotliwość?
-Chciałbym zwiększać wartość PWM z klawiatury membranowej, wiem że PWM ma wartości od 0 do 255, natomiast tutaj w kodzie wystepuje na wyjściu PWM:
pp1 = 126*sin(x+ph1);
p1 = pp1+128;
gdzie: const float ph1 = 2*pi/3; , x = x + y; , float x = 0;
-Ostatni problem czy da się wywalić drugie wejście tak żeby program od razu chodził i klawiszami bym sobie sterował tylko wypełnieniem poszczególnych
Kod:
int out1 = 11;
int out2 = 12;
int out3 = 12;
const float pi = 3.1415;
float x = 0;
int enable = A3;
int freqpin = A1;
unsigned char p1 = 0;
unsigned char pp1 = 0;
unsigned char pp2 = 0;
unsigned char pp3 = 0;
unsigned char p2 = 0;
unsigned char p3 = 0;
const float y = pi/30;
const float ph1 = 2*pi/3;
const float ph2 = 4*pi/3;
const float ph3 = 2*pi;
void setup() {
pinMode(out1, OUTPUT);
pinMode(out2, OUTPUT);
pinMode(out3, OUTPUT);
pinMode(enable, INPUT);
pinMode(freqpin, INPUT);
}
void loop() {
x = x + y;
analogWrite(out1, p1);
analogWrite(out2, p2);
analogWrite(out3, p3);
pp1 = 126*sin(x+ph1);
p1 = pp1+128;
pp2 = 126*sin(x+ph2);
p2 = pp2+128;
pp3 = 126*sin(x+ph3);
p3 = pp3+128;
if(x >= 2*pi) x = 0;
delay(freqpin);
}