開発環境には mbed を使用しC言語で記述しています。
ソースコードはピークメーター・VUメーター共通ですが、ピークメーターはエミッタ接地でデューティー比が反転するためVUと交差コイルの極性が入れ替わります。
プラットフォームにLPC1114NF28を選択して新規プロジェクトを作成後、ソースコードをコピーしてお使いください。
LPC1768などでお使いになる場合は、ポート設定の部分を書き替える必要があります。
//LPC1114 交差コイル表示電圧計
#include "mbed.h"
#include "PwmOut.h"
#define kakudo_max 4.4 //メーターの最大振り角度(rad)
#define bairitsu 10 //ad変換値に掛ける倍率
//交差コイル駆動PWM出力ポート
PwmOut sin_coil(dp1);
PwmOut cos_coil(dp2);
//信号入力
AnalogIn voltage(dp13);
int main() {
float data = 0.0;
double theta = 0.0;
double s = 0.0;
double c = 0.0;
//PWM周期設定(メーターから聞こえる「ピー」という音が気になる場合はマイコンの性能と相談しつつ減らします)
sin_coil.period_us(50.0);
cos_coil.period_us(50.0);
while(1) {
//AD変換値(0.0~1.0)を読み取り倍率を掛ける
data = bairitsu * voltage.read();
//2πに掛けて振るべき角度(Θ)を求める
theta = 6.28 * data;
//角度がオーバーしていなければPWMのデューティー比を更新
if(theta < kakudo_max)
{
//sin(Θ)とcos(Θ)を求め、-0.5~+0.5の範囲に圧縮する
s = 0.5 * sin(theta);
c = 0.5 * cos(theta);
//圧縮したsin(Θ)とcos(Θ)を0.5オフセットし、0.5を中心としてPWMの設定範囲である0.0~1.0にする
cos_coil = c + 0.5;
sin_coil = s + 0.5;
}
}
}