ШИМ на Wemos D1 Mini (чип esp8266) не работает
Я работаю над хобби: создаю радиоуправляемую игрушечную машинку.
Я работаю с микроконтроллером Wemos D1 Mini (esp8266), H-мостом L298N (для управления двигателем) и использую Arduino IDE для программирования всего этого.
Проект очень простой: заставьте машину управлять с помощью виртуального джойстика в приложении. Проект довольно забавный и хороший опыт обучения для меня. Пока проект идет довольно хорошо.
Я могу двигать машину вперед и назад с постоянной скоростью, но не могу изменить скорость с помощью сигнала PWM. На самом деле, я даже не уверен, возможно ли создать ШИМ-сигнал на Wemos D1 Mini, я никогда не делал этого раньше на этом конкретном контроллере. Я не инженер-электрик, поэтому не особо разбираюсь в конкретных деталях самого контроллера.
Может ли кто-нибудь помочь мне создать ШИМ-сигнал для управления скоростью автомобиля?
Вот что у меня есть сейчас, очень простые вещи:
void setup() {
pinMode(D2, OUTPUT);
pinMode(D5, OUTPUT);
pinMode(D6, OUTPUT);
pinMode(D7, OUTPUT);
pinMode(D8, OUTPUT);
}
void forward() {
digitalWrite(D5, LOW);
digitalWrite(D6, HIGH);
}
void backward() {
digitalWrite(D5, HIGH);
digitalWrite(D6, LOW);
}
void setVelocity(int value){
analogWrite(D2, value);
}
void loop() {
setVelocity(1023);
forward();
}
Заранее спасибо!
С уважением,
Стефан
@Stefan, 👍0
Обсуждение1 ответ
Лучший ответ:
В какой-то момент analogWrite
, реализованный в ядре esp8266, по умолчанию использовал 10-битный диапазон. Это больше не актуально. Теперь по умолчанию используется 8-битный диапазон.
В любом случае analogWrite
реализуется в зажмите заданное значение, чтобы оно находилось в пределах диапазона.
Если бы вы не экспериментировали в нижней четверти диапазона скорости с вашим кодом, как написано, вы бы увидели полную скорость.
Вы можете переключиться на работу с 8-битным диапазоном или использовать analogWriteRange(new_range)
или analogWriteResolution(bits)
как это упоминает.
Ваш код будет генерировать 50%-й рабочий цикл сигнала 1 кГц на D2, если для setVelocity задано значение 128 с текущим ядром.
Спасибо за быстрый ответ! Оказывается... ядро моей платы ESP8266 было очень устаревшим :( Я думаю, что проблема была в нем. И вы правы, теперь оно 8-битное! Я очень рад, что теперь оно работает! Спасибо за вашу помощь, очень признателен!, @Stefan
- Аналоговый сигнал 1–10 В
- D1 mini ESP8266 нет звука в динамике
- Как читать и записывать EEPROM в ESP8266
- Как сделать выводы Tx и Rx на ESP-8266-01 в выводах GPIO?
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
- Как заставить 5-вольтовое реле работать с NodeMCU
- Установите частоту ШИМ на 25 кГц.
- Как исправить: Invalid conversion from 'const char*' to 'char*' [-fpermissive]
как вы пробовали менять скорость?, @jsotola
@jsotola предположительно
analogWrite
на контакт включения наD2
., @timemage@timemage неизвестно, @jsotola
Да, D2 — это контакт включения! @timemage, @Stefan
Я думаю, что я собираюсь перейти на другой микроконтроллер, @Stefan
См. [здесь] (https://arduino-esp8266.readthedocs.io/en/latest/reference.html#analog-output) об изменении значения по умолчанию для диапазона в вызовах
analogWrite
. Ваш код создает сигнал с рабочим циклом 50% на частоте 1 кГц, если указано «установить скорость» на 128., @timemageВам не нужно переключаться на другой микроконтроллер. Как указано в ссылке @timemage, если вы используете ядро ESP8266 >= 3.0.0, вы можете либо уменьшить диапазон AnalogWrite с 0..255, либо поместить
analogWriteRange(1023);
вsetup()
., @StarCat