Я дам вам небольшое введение:Arduino pulse train
Я работаю над водяным топливным элементом Стэнли Мейера. Для тех, кто не знает водяной топливный элемент, вы можете увидеть его here.
Для водяного топливного элемента необходимо построить схему. Здесь the diagram:
Сейчас я работаю над генератором импульсов (переменной) и импульсным затвором (переменной), чтобы генерировать эту форму волны.
Итак, я хочу сделать это с помощью Arduino таймеров. Я уже может генерировать «высокочастотный» импульсный генератор (1 кГц - 10 кГц, в зависимости от задания масштабирования в регистре TCCR2B) ШИМ на выводе 3 с этим кодом:
pinMode(3, OUTPUT);
pinMode(11, OUTPUT);
TCCR2A = _BV(COM2A0) | _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
TCCR2B = _BV(WGM22) | _BV(CS21) | _BV(CS20);
OCR2A = 180;
OCR2B = 50;
можно изменить частоту и пульс с :
sensorValue = analogRead(analogInPin);
sensorValue2 = analogRead(analogInPin2);
// Map it to the range of the analog out:
outputValue = map(sensorValue, 0, 1023, 30, 220);
outputValue2 = map(sensorValue2, 0, 1023, 10, 90);
OCR2A = outputValue;
Это прекрасно работает.
Теперь я хочу модулировать этот импульс с помощью другой последовательности импульсов с «низкой частотой» (приблизительно от 20 Гц до 100 Гц), чтобы действовать как импульсный вентиль. Я думал использовать таймер 0 для подсчета и выключения сигнала, когда он подсчитывает некоторое значение и активировать при поступлении в том же значении снова, как этот
TCCR0A = _BV(COM0A0) | _BV(COM0B0) | _BV(WGM01);
TCCR0B = _BV(CS02);
OCR0A = 90;
OCR0B = OCR0A * 0.8;
И сравните со счетчиком
if (TCNT0 <= OCR0A)
TCCR2A ^= (1 << COM2A0);
Но Это не очень хорошо работает. Есть идеи для этого?