ШИМ на 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();
}

Заранее спасибо!

С уважением,

Стефан

, 👍0

Обсуждение

как вы пробовали менять скорость?, @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


1 ответ


Лучший ответ:

2

В какой-то момент analogWrite, реализованный в ядре esp8266, по умолчанию использовал 10-битный диапазон. Это больше не актуально. Теперь по умолчанию используется 8-битный диапазон.

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

Если бы вы не экспериментировали в нижней четверти диапазона скорости с вашим кодом, как написано, вы бы увидели полную скорость.

Вы можете переключиться на работу с 8-битным диапазоном или использовать analogWriteRange(new_range) или analogWriteResolution(bits) как это упоминает.

Ваш код будет генерировать 50%-й рабочий цикл сигнала 1 кГц на D2, если для setVelocity задано значение 128 с текущим ядром.

,

Спасибо за быстрый ответ! Оказывается... ядро моей платы ESP8266 было очень устаревшим :( Я думаю, что проблема была в нем. И вы правы, теперь оно 8-битное! Я очень рад, что теперь оно работает! Спасибо за вашу помощь, очень признателен!, @Stefan