【发布时间】:2018-02-13 08:26:58
【问题描述】:
我给你做个小介绍:
我正在研究 Stanley Meyer 的水燃料电池。不了解水燃料电池的可以看here。
对于水燃料电池,必须建立一个电路。这里是the diagram:
现在我正在研究脉冲发生器(变量)和脉冲门(变量)来生成这个波形。
所以,我想用 Arduino 计时器来做这件事。我已经可以使用以下代码在引脚 3 上生成“高频”脉冲发生器(1 kHz - 10 kHz,取决于 TCCR2B 寄存器的预分频):
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 赫兹)的脉冲序列来调制这个脉冲,以充当脉冲门。我正在考虑使用 Timer 0 来计数并在计数某个值时关闭信号,并在再次达到相同值时激活,就像这样
TCCR0A = _BV(COM0A0) | _BV(COM0B0) | _BV(WGM01);
TCCR0B = _BV(CS02);
OCR0A = 90;
OCR0B = OCR0A * 0.8;
并与计数器比较
if (TCNT0 <= OCR0A)
TCCR2A ^= (1 << COM2A0);
但是效果不好。对此有何想法?
【问题讨论】: