前提・実現したいこと
Hブリッジドライブ回路を制御するのにAVR(ATmega328P-PU)で
制御しようと思うのですがそのために位相差のある矩形波ができれば疑似正弦波が実現できると思うのですが
そのために位相差のある2波形を出力できるプログラムを作成しましたが、挙動が時々おかしくなります。
回路は
PB1,PB2からパルス信号が出力
PC2に0-5Ⅴのアナログ信号を入力
発生している問題・エラーメッセージ
スケッチのプログラムで可変抵抗を用いて位相差を変化させるプログラムを作成していますが、 2波形の位相差が時々170°を出力しているはずなのに10°とかになってしまいます。
該当のソースコード
void setup() { pinMode( 2 , INPUT); pinMode( 9 , OUTPUT ); pinMode( 10 , OUTPUT ); TCCR1A = _BV( COM1A0 ) |_BV( COM1B0 ); TCCR1B = _BV( WGM13) | _BV( WGM12); OCR1A = 0; } #define PRESCALER 1 #define PRESCALER_BITS 0x01 #define CLK 16000000UL int setWaveforms( unsigned long freq , int shift ) { unsigned long clocks_per_toggle = (CLK / freq) / 2; ICR1 = clocks_per_toggle; unsigned long offset_clocks = (clocks_per_toggle * shift) / 180UL; OCR1B= offset_clocks; TCCR1B |= _BV( CS10 ); } uint8_t val=0; void loop() { val = analogRead(2); val = val*180/255; setWaveforms( 5000 , val ); delay(1000); }
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答5件
あなたの回答
tips
プレビュー