analogWriteResolution()
Задаёт разрядность (в битах) для последующих вызовов analogWrite(), позволяя задействовать полный аппаратный диапазон PWM или DAC на платах, поддерживающих более 8 бит.
Полная статья
Описание
analogWriteResolution() позволяет задать, сколько бит будет использоваться при последующих вызовах analogWrite(). По умолчанию разрядность равна 8 битам — значения от 0 до 255 — чтобы код оставался совместимым с классическими платами Arduino на базе AVR.
Если плата поддерживает более точный PWM или имеет выход DAC, эта функция позволяет задействовать больший аппаратный диапазон и получить более плавное управление сигналом.
Синтаксис
Чтобы использовать нужный диапазон значений для DAC или PWM, вызовите:
analogWriteResolution(bits)
Параметры
bits — разрядность в битах, которую будет ожидать analogWrite(). Допустимые значения: от 1 до 32.
Важно понимать, что задаваемое разрешение должно совпадать с аппаратными возможностями платы. Если передать значение, которое выходит за пределы того, что поддерживает железо:
- слишком большое значение будет усечено — лишние старшие биты не попадут в итоговый сигнал;
- слишком маленькое значение будет дополнено нулями справа, чтобы заполнить аппаратный регистр нужного размера.
Возвращает
Функция ничего не возвращает.
Пример кода
void setup() {
// открыть последовательное соединение
Serial.begin(9600);
// настроить цифровой пин как выход
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}
void loop() {
// считать значение с A0 и преобразовать его для PWM пина
// с подключённым светодиодом
int sensorVal = analogRead(A0);
Serial.print("Analog Read : ");
Serial.print(sensorVal);
// стандартное разрешение PWM
analogWriteResolution(8);
analogWrite(11, map(sensorVal, 0, 1023, 0, 255));
Serial.print(" , 8-bit PWM value : ");
Serial.print(map(sensorVal, 0, 1023, 0, 255));
// изменить разрешение PWM до 12 бит
analogWriteResolution(12);
analogWrite(12, map(sensorVal, 0, 1023, 0, 4095));
Serial.print(" , 12-bit PWM value : ");
Serial.print(map(sensorVal, 0, 1023, 0, 4095));
// изменить разрешение PWM до 4 бит
analogWriteResolution(4);
analogWrite(13, map(sensorVal, 0, 1023, 0, 15));
Serial.print(", 4-bit PWM value : ");
Serial.println(map(sensorVal, 0, 1023, 0, 15));
delay(5);
}
Возможности плат
Разные платы Arduino поддерживают разную аппаратную разрядность PWM или DAC:
- Платы с 8-битным разрешением PWM делят рабочий цикл PWM на 255 шагов.
- Платы с 10-битным разрешением PWM делят рабочий цикл PWM на 1024 шага.
- Платы с 12-битным разрешением PWM делят рабочий цикл PWM на 4095 шагов.
- Платы с 16-битным разрешением PWM делят рабочий цикл PWM на 65536 шагов.
Перед тем как менять разрядность, уточните в документации к своей плате, какое максимальное разрешение она поддерживает для конкретного вывода.
Практические замечания
- Вызывайте
analogWriteResolution()один раз вsetup(), до первого обращения кanalogWrite(). Изменение разрядности в середине работы скетча может привести к неожиданным скачкам сигнала. - Если вы установили разрядность выше аппаратной, Arduino отбросит лишние старшие биты. Например, при 12-битной настройке на 8-битном выводе значение 4095 превратится в 255.
- Если вы установили разрядность ниже аппаратной, недостающие биты будут заполнены нулями. Значение 15 при 4-битной настройке на 8-битном выводе превратится в 240 (то есть
0b11110000). - Разрядность, заданная
analogWriteResolution(), действует глобально для всех последующих вызововanalogWrite()в скетче. - При отладке удобно выводить передаваемые значения через Serial Monitor и сравнивать с реальным поведением устройства — это помогает быстро обнаружить несоответствие между заданным и аппаратным разрешением.
Где применяется
- Плавное управление яркостью светодиода или RGB-ленты — 8-битного разрешения иногда недостаточно для мягких переходов; 12 или 16 бит дают более тонкую шкалу значений.
- Управление мотором через драйвер — более высокая разрядность помогает точнее задавать мощность, если драйвер и плата поддерживают такой режим PWM.
- Генерация аналогового сигнала через PWM — платы со встроенным цифро-аналоговым преобразователем могут выдавать сигнал с разрядностью 10–12 бит, и
analogWriteResolution()позволяет передавать значения в полном диапазоне. - Прототипирование аудио или сенсорных систем — когда важна точность выходного напряжения, а не просто включено/выключено.