Arduino PWM 1 кГц и 10-битное разрешение
Как следует из названия, мне нужен сигнал частотой 1 кГц с 10-битным разрешением. Но я плохо разбираюсь в uController и сложном программировании.
Мне нужен простой код для этой задачи.
Я пытался использовать этот интерактивный ШИМ с arduinoslovakia.eu, но я не знаю, что такое частота при 10-битном разрешении и как установить частоту в этом коде.
@Vikas Kumar, 👍0
Обсуждение1 ответ
Лучший ответ:
Я вижу, вы говорите об использовании 16-битного таймера, который в Uno является Таймером 1.
Предполагая, что вы используете Uno, этот код сделает это:
// Желаемая тактовая частота, деленная на 1 кГц
const long timer1_OCR1A_Setting = F_CPU / 1000;
const byte outputPin = 10; // Выход таймера 1 "B": OC1B
void setup()
{
pinMode (outputPin, OUTPUT);
// устанавливаем Таймер 1
// Вершина быстрой ШИМ на уровне OCR1A
TCCR1A = bit (WGM10) | bit (WGM11) | bit (COM1B1); // быстрый ШИМ, сброс OC1B при сравнении
TCCR1B = bit (WGM12) | bit (WGM13) | bit (CS10); // быстрая ШИМ, без предделителя
OCR1A = timer1_OCR1A_Setting - 1; // относительный нуль
OCR1B = (timer1_OCR1A_Setting / 2) - 1; // 50 % рабочий цикл
} // конец настройки
void loop()
{
}
Вы можете изменить 1000 в расчете для timer1_OCR1A_Setting, в разумных пределах, чтобы получить другие частоты.
Дополнительную информацию см. на моей странице о таймерах.
На Arduino 16 МГц вы получите около 14 бит разрешения, используя этот код. Однако невозможно получить именно 14-битное (или 10-битное) разрешение без изменения частоты (примерно до 0,9765 кГц)., @Gerben
Чтобы объяснить этот комментарий, OCR1A будет установлен на 16000, используя приведенный выше код, а это log(16000)/log(2)
бит, а именно примерно 13,97 бит. Поэтому ваш рабочий цикл (OCR1B) может находиться в диапазоне от 0 до 15999, что дает разрешение не менее 10 бит., @Nick Gammon
Спасибо за ответ., @Vikas Kumar
- Установите частоту ШИМ на 25 кГц.
- Какова частота PWM-выхода на Arduino
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Как устранить шум от вентилятора 12 В с ШИМ-управлением на низкой скорости
- Генерация частоты ШИМ выше 125 кГц с помощью Arduino Uno
- Увеличить разрядность PWM
- Как вывести истинное аналоговое напряжение на выходной контакт
- PWM-вывод Arduino Nano не функционирует
Вы про прямоугольную волну? Каким образом он будет иметь 10-битное разрешение? Либо это 1 кГц, либо нет, да? Вы говорите о факторе ошибки? Например, 1 кГц +/- 5%?, @Nick Gammon
@NickGammon «10-битное разрешение» будет относиться к разрешению параметра рабочего цикла. т. е. рабочий цикл от 0 до 1023 вместо нормального от 0 до 255., @Majenko
Возможно, но в довольно кратком вопросе не упоминаются рабочие циклы., @Nick Gammon
@NickGammon Нет, но он *упоминает* ШИМ, а ШИМ имеет рабочий цикл (что и делает его ШИМ)., @Majenko