Проблема с аналоговой записью
Я подключил к DRV8835 2 двигателя постоянного тока с блоком питания 11. Ардуино нано.
Когда я зацикливаю for, например, i от 0 до 1024 для AnalogWrite(i,Motor1) для DC Motor1, он ускоряется от 0 до 200 и останавливается. Когда у меня становится 250, он начинает с большей скорости. Когда он становится 500, он снова останавливается. И 550 у нас снова есть сила.
Теперь я попытался запустить AnalogWrite(1000, ***), но это не работает. Когда я меняю значение с 1000 на 1005, оно снова не работает. А вот на 1024 у нас максимальная скорость и она работает?
#define LEFT_PWM 9
#define RIGHT_PWM 10
#define LEFT_DIR 5
#define RIGHT_DIR 6
void setup() {
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
}
void loop() {
digitalWrite(LEFT_DIR, HIGH);
analogWrite(LEFT_PWM, 1000);
}
@Lary, 👍1
2 ответа
Лучший ответ:
analogWrite
имеет следующий прототип
void analogWrite(uint8_t, int);
это означает, что его первый параметр имеет диапазон [0, 256)
и следует правилам арифметики по модулю, с 256
по модулю. Если вы указываете аргументы за пределами диапазона [0, 256)
, они будут интерпретироваться % 256
. 1000
совпадает с 232
(1000 % 256 == 232
), 500
совпадает с 244
, 550
совпадает с 38
и так далее.
Это не полностью согласуется с симптомами, которые вы описываете (если ваше описание является точным), что может означать, что здесь есть какой-то другой фактор. Вы уверены, что используете DRV8835 в режиме PHASE/ENABLE
(на контакте 11 высокий уровень)?
"Значение" для analogWrite()
должно быть целым числом
от 0 до 255.
На веб-сайте arduino.cc можно найти такую информацию: analogWrite(). . Справочник по языку.
К сожалению, arduino.cc — очень плохой ресурс. Хороший ресурс мог бы сообщить нам точные типы аргументов analogWrite
, то есть полное объявление функции C/C++. arduino.cc нет., @AnT
@AnT — это отличный ресурс для новичков, которые допускают самые элементарные ошибки :), @VE7JRO
.. facepalm.. Я писал код на контроллерах nodemcu и TI, где у нас больше битов. а аналоговая ярость до 4096, @Lary
Аналоговый диапазон @Lary зависит от разрешения вашего АЦП. Ardunio поддерживает АЦП с разрешением 10 бит, что означает 2 ^ 10 бит значения = максимальное значение 4096. Здесь в **analogWrite** используется для генерации ШИМ-сигнала с определенным рабочим циклом. Процент рабочего цикла зависит от значения, которое вы записываете в функцию. 255 означает 100% рабочий цикл., @Vaibhav
@Vaibhav: 2^10 = 1024. А диапазон значений, возвращаемых АЦП, составляет 0–1023., @Edgar Bonet
@EdgarBonet 0-1024 считается 1024 :), @Vaibhav
@Vaibhav: Я умею считать, но не могу понять, что вы пытаетесь сказать своим комментарием., @Edgar Bonet
@EdgarBonet Я просто говорил, что аналоговая запись в Arduino и обычная аналоговая запись и чтение в самой Arduino различаются., @Vaibhav
- Есть ли способ воспроизводить звуки с Arduino без использования звукового экрана?
- В чем разница между analogWrite и digitalWrite?
- Какова частота PWM-выхода на Arduino
- Как вывести истинное аналоговое напряжение на выходной контакт
- Отправка значения с одного Arduino на другой
- Проблема с выходным контактом ШИМ (PWM)
- Пассивный зуммер работает с AnalogWrite(), но не с DigitalWrite(). Он также имеет постоянный статический шум.
- Не могу контролировать скорость двигателей постоянного тока с помощью analogWrite()
Pin MOD был настоящей проблемой. Припаял его к VCC проводом и проблема решена. До этого поведение моторов было очень случайным., @Lary