- разрешение 8 разрядов (значение ШИМ от 0 до 255);
частота 488,28 Гц.
Нашел в интернете варианты установок параметров ШИМ до частоты 31 кГц. Подумал, что должен быть вариант с большей частотой.
Частота генераторов большинства плат 16 мГц. Это соответствует периоду 62,5 нс. Это и есть минимальная временная единица дискретности ШИМ Ардуино. При разрядности 8 минимальный период ШИМ должен быть 62,5 нс * 256 = 16 мкс. Что соответствует частоте 62,5 кГц.
Разобрался с регистрами таймера 1 микроконтроллера ATmega328, установил быстродействующий режим ШИМ и добился частоты 62,5 кГц. Чтобы в следующий раз не разбираться с режимами таймера я выписал всевозможные варианты параметров ШИМ для таймера 1.
Для того, чтобы задать нужный режим ШИМ на выводах 9 и 10 необходимо разместить две соответствующие строки в функцию setup().
8 бит, 62 500 Гц
Код: Выделить всё
TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x09;
Код: Выделить всё
TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x0a;
Код: Выделить всё
TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x0b;
Код: Выделить всё
TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x0c;
Код: Выделить всё
TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x0d;
Код: Выделить всё
TCCR1A = TCCR1A & 0xe0 | 2;
TCCR1B = TCCR1B & 0xe0 | 0x09;
Код: Выделить всё
TCCR1A = TCCR1A & 0xe0 | 2;
TCCR1B = TCCR1B & 0xe0 | 0x0a;
Код: Выделить всё
TCCR1A = TCCR1A & 0xe0 | 2;
TCCR1B = TCCR1B & 0xe0 | 0x0b;
Код: Выделить всё
TCCR1A = TCCR1A & 0xe0 | 2;
TCCR1B = TCCR1B & 0xe0 | 0x0c;
Код: Выделить всё
TCCR1A = TCCR1A & 0xe0 | 2;
TCCR1B = TCCR1B & 0xe0 | 0x0d;
Код: Выделить всё
TCCR1A = TCCR1A & 0xe0 | 3;
TCCR1B = TCCR1B & 0xe0 | 0x09;
Код: Выделить всё
TCCR1A = TCCR1A & 0xe0 | 3;
TCCR1B = TCCR1B & 0xe0 | 0x0a;
Код: Выделить всё
TCCR1A = TCCR1A & 0xe0 | 3;
TCCR1B = TCCR1B & 0xe0 | 0x0b;
Код: Выделить всё
TCCR1A = TCCR1A & 0xe0 | 3;
TCCR1B = TCCR1B & 0xe0 | 0x0c;
Код: Выделить всё
TCCR1A = TCCR1A & 0xe0 | 3;
TCCR1B = TCCR1B & 0xe0 | 0x0d;
Следующий скетч формирует на выводе 10 ШИМ с частотой 62,5 кГц и коэффициентом заполнения примерно 30 %.
Код: Выделить всё
void setup() {
// ШИМ 8 разрядов, 62,5 кГц
TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x09;
analogWrite(10,76); // на выводе 10 ШИМ=30%
}
void loop() {
}