PWM変調を使用して正弦波を提供しようとしています。私の回路は次のもので構成されています。
- Arduino Uno
- H ブリッジ - 方向 (ピン 4、5) と PWM 電圧 (PWM ピン 6) を制御します。
- ソレノイド モーター - 正弦波出力をモーターに供給する必要があります
いくつかのガイドをオンラインで見ましたが、それらのほとんどは Sinewave テーブルと、私には理解できない低レベル コードを使用しているため、次のような簡単なコードで試してみることにしました。
const int DIR1_PIN = 4;
const int DIR2_PIN = 5;
const int PWM_PIN = 6;
const int LED_PIN = 9;
const int numSamples = 20;
const int sampleFreq = 2000;
const float pi = 3.1415;
float f = 1; // signal frequency
float T = 1/f;
float dt = T/numSamples;
int sineSignal[numSamples]; // sine values would be added here
int dir1Array[numSamples]; // 11....100....0 indicates direction
int dir2Array[numSamples]; // 00....011....1 indicates other direction
void setup()
{
pinMode(LED_PIN, OUTPUT); // the led is just an indicator to what the output is
pinMode(DIR1_PIN, OUTPUT);
pinMode(DIR2_PIN, OUTPUT);
pinMode(PWM_PIN, OUTPUT);
for (int n = 0; n < numSamples; n++)
{
sineSignal[n] = abs((int) (255 * (sin(2 * pi * f * n * dt))));
if (n < numSamples / 2)
{
dir1Array[n] = HIGH;
dir2Array[n] = LOW;
}
else
{
dir1Array[n] = LOW;
dir2Array[n] = HIGH;
}
}
}
void loop()
{
for (int n = 0; n < numSamples; n++)
{
analogWrite(LED_PIN, sineSignal[n]);
analogWrite(PWM_PIN, sineSignal[n]);
digitalWrite(DIR1_PIN, dir1Array[n]);
digitalWrite(DIR2_PIN, dir2Array[n]);
delay(sampleFreq); // not quite sure how the delay affects the frequency f
}
}
要するに、このコードでは周波数を制御できませんf
( の異なる値に対して同じ出力を取得しますf
) 。
さまざまな出力を生成する方法に関するアイデアはありf
ますか? delay
もしそうなら、どのようにコールを設定する必要がありますか?
ありがとうございました!