Как получить 2 ШИМ-вывода с обратным битовым диапазоном при 25 кГц на Nano?
Мне нужны 2 ШИМ-вывода для колебаний на частоте 25 кГц, но они должны колебаться обратно пропорционально друг другу. Когда один высокий, другой должен быть низким, и наоборот.
Я хочу сделать это с помощью Нано.
@Curtis, 👍3
Обсуждение1 ответ
Лучший ответ:
Существуют различные решения. Я предлагаю использовать два канала ШИМ, управляемых одним таймером. Таким образом, вам не придется беспокоиться о синхронизации двух таймеров. Вы можете настроить каналы одинаково, за исключением того, что один из них будет находиться в “неинвертирующем” режиме ШИМ, в то время как другой будет находиться в режиме “инвертирования”.
Вот как я бы это сделал: используйте таймер 1 для управления контактами 9 (PB1, OC1A) и 10 (PB2, OC1B) в режиме быстрой ШИМ.
void setup() {
// Configure Timer 1 for complementary PWM @ 25 kHz.
DDRB |= _BV(PB1); // set pin 9 = PB1 = OC1A as output
DDRB |= _BV(PB2); // set pin 10 = PB2 = OC1B as output
TCCR1A = 0; // undo the Arduino timer initialization
TCCR1B = 0; // ditto
ICR1 = 640 - 1; // period = 640 CPU cycles = 40 us
OCR1A = 320 - 1; // OC1A HIGH for 320 CPU cycles = 20 us
OCR1B = 320 - 1; // OC1B LOW for 320 CPU cycles = 20 us
TCCR1A = _BV(COM1A1) // non-inverting PWM on OC1A
| _BV(COM1B0) // inverting PWM on OC1B
| _BV(COM1B1) // ditto
| _BV(WGM11); // fast PWM, TOP = ICR1
TCCR1B = _BV(WGM12) // ditto
| _BV(WGM13) // ditto
| _BV(CS10); // clock at F_CPU
}
Ах, это то, что я имел в виду в первую очередь, но меня раздражал второй режим вывода сравнения, который вел себя по-разному для OC1A и OC1B, и я думал, что они привязаны друг к другу. +1, @towe
Это прекрасно работает. Я не мог бы и мечтать о более простом и точном решении !!!, @Curtis
- Как прочитать значение PIN PWM-выхода?
- Управление несколькими вентиляторами с помощью Arduino Uno
- Невозможно установить рабочий цикл на 0% с помощью пользовательского PWM
- Плохие показания сигнала тахометра вентилятора 12 В pwm
- Вывод 400 мВ с помощью штыря Arduino Nano PWM
- ШИМ-сигнал с рабочим циклом 50 % и рассчитанной частотой
- Входные PWM-контакты не получают значения от работающего приемника?
- Помогите с простым постепенно более ярко светящим светодиодом
используйте один вывод и инвертируйте его с помощью аппаратного обеспечения, @jsotola
Используйте два таймера с одинаковыми настройками, запущенные одновременно., @towe
@towe: Как вы запускаете их одновременно?, @Edgar Bonet
@EdgarBonet Установил свой выбор часов сразу после друг друга, разница должна составлять всего пару тактов., @towe