arduinoでも相補PWM出せるよね。ということで試してみた。
これが一応最終形。オシロが1chしかないので、PWMの出力2つをつまんでる。
deadtimeと相補PWMでてるっぽい。1kHz。
でも信号の切り替わりを拡大してみると、変なレベルがでてる。-2.5Vくらいのやつ。なんだこれ。
こいつのせいで、10kHzでdeadtimeを0にしても変な段つき波形になる。。
一応ソースのせとく。timer1を使ってる。
#include <avr/io.h>
#include <avr/interrupt.h>
void PWM_init(uint8_t ch, uint8_t N, uint16_t top) {
DDRB = DDRB | B00000110;
TCCR1A = TCCR1A & ~(bit(COM1A1)|bit(COM1A0)|bit(COM1B1)|bit(COM1B0));
TCCR1A = TCCR1A |bit(COM1A1)|bit(COM1B1)|bit(COM1B0);
TCCR1B = (TCCR1B & B11100000) | bit(WGM13) | N;
TCNT1 = 0;
TIMSK1 = bit(TOIE1);
ICR1 = top;
OCR1A = 2000;
OCR1B = OCR1A - 1000;
}
void setup() {
noInterrupts();
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
PWM_init(1, 1, 8000);
interrupts();
}
ISR (TIMER1_OVF_vect) {
}
void loop() {
}