![見出し画像](https://assets.st-note.com/production/uploads/images/142703226/rectangle_large_type_2_983b6e08b0b34696cc55d8c1ae8fc8ad.png?width=1200)
正弦波PWMインバータ
二相変調の三相正弦波PWM波をマイコンで作りたい。
![](https://assets.st-note.com/img/1717252347055-fNcXADo0G8.png?width=1200)
とりあえずお試しで、波形が見たくて作ったもの。 この青と黄色の波形の電圧の差分は
![](https://assets.st-note.com/img/1717252449154-hvGP06XMOh.png?width=1200)
紫色の波形になる。
このオシロじゃ2 ch分しか見れないので、1相でトリガをかけておき、1相目と共に残り2相の波形をそれぞれcsvファイルで保存する。 その後Excelでまとめたのが
![](https://assets.st-note.com/img/1717252963447-MDdOz15NeY.png?width=1200)
線間電圧は
![](https://assets.st-note.com/img/1717253041789-Ce7LlWBN1B.png?width=1200)
これらの波形は平滑後のもので、実際はスイッチングしております。
![](https://assets.st-note.com/img/1717253545598-5XCGBumKIK.png?width=1200)
拡大すると
![](https://assets.st-note.com/img/1717253532645-tWovJ4vKYl.png?width=1200)
実用的ではないけれど、ソースコード(Arduino UNO R4 MINIMA)は
#include "pwm.h"
#define PLOT_NUM 360
const float Freq=10000.0, Duty=0.0;
float waveData[PLOT_NUM];
PwmOut pwm3(3), pwm5(5), pwm6(6);
int i=0, j=PLOT_NUM-1, k=0;
void setup() {
for(int i=0; i<PLOT_NUM; i++){
waveData[i] = 100*sin(i *2*M_PI /3/PLOT_NUM);
}
pwm3.begin(Freq, Duty);
pwm5.begin(Freq, Duty);
pwm6.begin(Freq, Duty);
}
void loop() {
while(j){
pwm3.pulse_perc(waveData[++i]);
pwm5.pulse_perc(waveData[--j]);
}
while(i){
pwm6.pulse_perc(waveData[++k]);
pwm3.pulse_perc(waveData[--i]);
}
while(k){
pwm5.pulse_perc(waveData[++j]);
pwm6.pulse_perc(waveData[--k]);
}
}
3, 5, 6 pinからPWM波が出てきます。
この記事が気に入ったらサポートをしてみませんか?