これはArduino UNOの私の最初の実用的なプロジェクトであり、真実は何も簡単に触れていないことです。(私は14ビットの列車を生成するために私のArduinoを14ビットのエンコーダドライバに変換する必要があります30キロヘルツ以上の固定周波数に、各列車間に50マイクロ秒のデッドタイムを設定するか、またはそれ以上の時間に設定する。 私が気づいたすべての変種において、私は迷惑なジッタまたは位相シフトでオシロスコープを遭遇した。できるだけきれいにする必要があります波、 これが私の最初の粗変だった:。Arduino UNOのパルス列のジッタを除去するには?
void setup() {
pinMode(11, OUTPUT);
}
void loop() {
for (int i=0; i<15; i++){
digitalWrite(11, HIGH);
delayMicroseconds(12);
digitalWrite(11, LOW);
delayMicroseconds(12);
}
delayMicroseconds(50);
}
は、その後、私は波を作るためにタイマーを使用してそれを解決しようとした、とする製品をオフセット時間があるように思われますストップとサマデッドタイムを補うためにタイマをリズします。私は私がダウンロードTimerOneライブラリを使用します。https://github.com/PaulStoffregen/TimerOne
#include <TimerOne.h>
const byte CLOCKOUT = 11;
volatile long counter=0;
void setup() {
Timer1.initialize(15); //Cada 15 microsegundos cambio el estado del pin en la funcion onda dando un periodo
Timer1.attachInterrupt(Onda); //de 30 microsegundos
pinMode (CLOCKOUT, OUTPUT);
digitalWrite(CLOCKOUT,HIGH);
}
void loop() {
if (counter>=29){ //con 29 cambios logro los pulsos que necesito
Timer1.stop(); //Aqui creo el tiempo muerto, el cual esta debe estar en HIGH
digitalWrite(CLOCKOUT,HIGH);
counter=0;
delayMicroseconds(50);
Timer1.resume();
}
}
void Onda(){
digitalWrite(CLOCKOUT, digitalRead(CLOCKOUT)^1); //Cambio el estado del pin
counter+=1;
}
をタイマ2を使用して、より良い解決策を見つけ、あなたは[arduino.se]でオーバー尋ねてみてください。 –