Управление скоростью двигателя постоянного тока с помощью внешнего источника питания

Я пытаюсь контролировать скорость двигателя постоянного тока, используя команду analogWrite(MOTOR, int:speed).

#define MOTOR D5

void setup() {
  Serial.begin(115200);
  Wire.begin();



  pinMode(MOTOR, OUTPUT);
  
  Serial.println("Hello setup");
          
}

void loop() {
   
   analogWrite(MOTOR,0);
   Serial.println("0");
   delay(5000);

   analogWrite(MOTOR,255);
   Serial.println("255");
   delay(5000);

}

Вот моя распиновка:

pinout

Я использую mosfet для PWM, внешний источник питания на 3,8 Вольта для двигателя. Положительный сигнал питания поступает непосредственно на двигатель (красная линия), синий - через mosfet, а порт PWM D5 подключен к вентилю mosfet. Проблема в том, что код работает при низком напряжении около 1 В. Я вижу колебания силы тока и изменение скорости вращения двигателя (разница около 0,5 А). Но когда я увеличиваю напряжение до 3,8, колебания начинают неуклонно уменьшаться, и у меня нет ни изменения силы тока, ни изменения скорости двигателя. Пожалуйста, помогите мне выяснить причину этого.

UPD: изображение распиновки с высоким разрешением:

, 👍0

Обсуждение

Изображение недостаточно высокого разрешения, чтобы можно было прочитать контакты на деталях. Можете ли вы предоставить изображение в высоком разрешении, чтобы мы могли прочитать описание контактов? Что за плата слева?, @chrisl

я добавил изображение, @Gio Dos Santos

Я использую электростанцию для ручного изменения значений напряжения., @Gio Dos Santos

Это выглядит хорошо для меня. На самом деле вы даже не используете ШИМ (поскольку analogWrite(pin,0) соответствует digitalWrite(pin, LOW), а analogWrite(pin,255) соответствует digitalWrite(pin, HIGH)). Если я правильно понял ваше описание, то вы говорите, что увеличиваете напряжение питания двигателя и видите все меньшее и меньшее увеличение скорости / тока двигателя. Это то, что вы пытаетесь сказать? Какой именно MOSFET вы используете?, @chrisl

@chrisl да, вы правы, при напряжении 3,8 у меня всего 0,01 А, а этого недостаточно для управления двигателем. Честно говоря, я ожидал, что AnalogWrite(MOTOR, 0) должен остановить двигатель, но он все равно продолжает вращаться., @Gio Dos Santos

@chrisl Я использую MOSFET BS 170., @Gio Dos Santos

Чтобы исключить Wemos и его код, подключите затвор непосредственно к контакту 3,3 В Wemos, а затем к земле Wemos. Это делает то, что вы ожидали?, @chrisl

@chrisl Я уже протестировал прямое подключение к Wemos, и это сработало. Проблема в том, что нам нужно поднять деревянную стрелу с помощью этого двигателя и, следовательно, нам нужно больше энергии. Вот почему мы используем внешнее питание., @Gio Dos Santos

@chrisl только что протестировал блок питания Wemos, он работает именно так, как я хочу, он останавливается на 0, работает на половинной скорости около 150 и на полной скорости 255., @Gio Dos Santos

вам нужен обратный диод, чтобы остановить обратное индуцированное напряжение от воздействия на транзистор. Вы также должны использовать транзистор NPN или nchannel., @dandavis