DC-DC преобразователь для детского электромобиля

Конденсатор не помешает

тут не с шим, а со статики и потерь драйвера стоило начинать, чтобы понять,
годится хоть на что-то этот драйвер или не.
Пока телега впереди лошади.

раз о шиме в даташите ни слова, видимо да, я остановился на VNH5019

Подобные моторы отлично управляются с помощью низкочастотного ШИМ.

Настройте ШИМ на таймере 1 на 61 Гц (9 и 10 ноги). Звук останется, но станет не таким раздражающим - похож на звук от работающего трансформатора.

TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x0d;

У меня мотор стартует примерно от analogWrite(pin, 35) на холостом ходу. Драйвер правда другой, VNH2SP30.
Еще одна поделка с более мощным мотором управляется через транзистор IRLZ44N (настоящим, не китайским). Затвор подключен к выходу Ардуино через резистор 100 Ом. На низкой частоте ШИМ практически не греется. Реверс можно организовать с помощью реле. ВАЖНО! Не забывать о защитном диоде!

Вышесказанное при питании 12 В.

1 лайк

А зачем полевику такой маленький (100 Ом) резистор ?

Большое спасибо. Мотор вообще не пищит.

Не очень понял вопрос. Но в целом чтобы порт не пожечь и затвор зарядить за минимальное время.

61 Гц и минимальное время ?

Да без разницы частота. Важно обеспечить скорость открытия - закрытия, чтобы меньше времени находился в линейном режиме, соотв. меньше рассеивал мощность - грел воздух.

void setup() {
  TCCR1A = TCCR1A & 0xe0 | 1;
  TCCR1B = TCCR1B & 0xe0 | 0x0d;
  //Serial.begin(115200);
  pinMode(9, OUTPUT);
}

void loop() {
  int pot = map(analogRead(0), 0, 1023, 0, 255);
  analogWrite(9, pot);
  //Serial.println(pot);
}

До значения 37 ротор мотора дергается, но не крутится. При этом не писк, а небольшой треск.
Если подтолкнуть то и с 20 начинает вращение.
Всё что ниже 40 сделаю 0.

ФНЧ с частотой среза порядка 1 мегагерц получается, кто тут у нас специалист по фильтрам, озвучьте

int pot = map(analogRead(0), 0, 1023, 0, 255); => int pot = analogRead(0) >> 2;

1 лайк

Что это значит?

Что этим можно заменить первое …

1 лайк

Я так понимаю управление планируется с помощью потенциометра?
Тогда включите последовательно с ним постоянный резистор, чтобы при нулевом его положении analogRead выдавал чуть меньше 40. Тогда регулировка потенциометром будет от одного крайнего положения до другого.

1 лайк

по идее вторая конструкция отрабатывает за два такта микропроцессора (преобразование, кроме чтения)?

1 лайк

А если нагрузить машинку сильнее, то и 50 может оказаться мало !!!

1 лайк

а нечего детей перекармливать )))

2 лайка

При использовании джойстика значение в нулевом положении 512 (510-512 по факту)
Мотор не всегда правильно реагирует на управление с джойстика, может продолжить крутиться в том же направлении, даже если джойстик в другой стороне.

Спойлер
#define PIN_FORWARD 9
#define PIN_BACK 10
#define SPEED_INTERVAL 5

uint8_t pin_motor_pwm;

void setup() {
  TCCR1A = TCCR1A & 0xe0 | 1;
  TCCR1B = TCCR1B & 0xe0 | 0x0d;
  //Serial.begin(9600);
  pinMode(PIN_FORWARD, OUTPUT);
  pinMode(PIN_BACK, OUTPUT);
}

void loop() {
  uint16_t pot_x = analogRead(0);
  int16_t speed_x = map(pot_x, 0, 1023, -255, 255);
  if (speed_x < 0)speed_x = speed_x * -1;

  if (pot_x > 520 ) {
    pin_motor_pwm = PIN_FORWARD;
    digitalWrite(PIN_BACK, LOW);
  }

  if (pot_x < 505) {
    pin_motor_pwm = PIN_BACK;
    digitalWrite(PIN_FORWARD, LOW);
  }

  static uint32_t tmr;
  uint8_t speed;

  if (millis() - tmr >= SPEED_INTERVAL) {
    tmr = millis();
    if (speed < speed_x)speed++;
    if (speed > speed_x)speed--;
    if (speed > 5)analogWrite(pin_motor_pwm, speed);
    //Serial.println(speed);
  }
}

надо вводить зону нечувствительности, от метки 512, 10-15 единиц возможно хватит