analogWrite() / Arduino

Добавлено 29 октября 2018 в 20:23

Описание

Записывает аналоговое значение (ШИМ сигнал) на вывод. Может использоваться для посветки светодиода с разной яркостью или управления двигателем на разных скоростях. После вызова analogWrite(), вывод будет постоянно генерировать прямоугольный сигнал с заданной скважностью до следующего вызова analogWrite() (или вызова digitalRead() или digitalWrite()) для этого же вывода. Частота ШИМ сигнала на большинстве выводов составляет примерно 490 Гц. На Uno и подобных платах выводы 5 и 6 имеют частоту примерно 980 Гц.

На большинстве плат Artduino (на тех, которые работают на ATmega168 или ATmega328P) эта функция работает на выходах 3, 5, 6, 9, 10 и 11. На Arduino Mega она работает на выводах 2–13 и 44–46. Старые платы Arduiino с ATmega8 поддерживают analogWrite() только на выводах 9, 10 и 11.

Arduino Due поддерживает analogWrite() на выводах со 2 по 13, плюс выводы DAC0 и DAC1. В отличие от ШИМ выводов, DAC0 и DAC1 являются цифро-аналоговыми преобразователями и действуют как настоящие аналоговые выходы.

Вам не нужно вызывать pinMode(), чтобы настроить вывод на выход, перед вызовом analogWrite().

Функция analogWrite() не имеет ничего общего с аналоговыми выводами и функцией analogRead().

Синтаксис

analogWrite(pin, value)

Параметры

pin: вывод для записи. Допустим тип данных int.

value: коэффициент заполнения: от 0 (всегда выключен) до 255 (всегда включен). Допустим тип данных int.

Возвращает

Ничего.

Пример кода

Устанавливает значение на выходе для светодиода пропорционально значению, прочитанному с потенциометра.

int ledPin = 9;      // светодиод подключен к цифровому выводу 9
int analogPin = 3;   // потенциометр подключен к аналоговому выводу 3
int val = 0;         // переменная для хранения прочитанного значения

void setup()
{
  pinMode(ledPin, OUTPUT);   // настраиваем вывод на выход
}

void loop()
{
  val = analogRead(analogPin);   // прочитать входной вывод
  analogWrite(ledPin, val / 4);  // значения analogRead идут от 0 до 1023, 
                                 // значения analogWrite - от 0 до 255
}

Примечания и предупреждения

Выходные ШИМ сигналы, генерируемые на выводах 5 и 6, будут иметь коэффициенты заполнения, большие, чем ожидалось. Это связано с взаимодействием с функциями millis() и delay(), которые используют тот же внутренний таймер, что используется для генерации ШИМ сигналов на этих выводах. Это замечается в основном при установке низкого коэффициента заполнения (т.е. 0–10) и может привести к тому, что значение 0 не полностью отключит выходной сигнал на выводах 5 и 6.

Теги

ArduinoDAC / ЦАП (цифро-аналоговый преобразователь)PWM / ШИМ (широтно-импульсная модуляция)Аналоговый выходПрограммирование

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.