Конденсатор не помешает
тут не с шим, а со статики и потерь драйвера стоило начинать, чтобы понять,
годится хоть на что-то этот драйвер или не.
Пока телега впереди лошади.
раз о шиме в даташите ни слова, видимо да, я остановился на VNH5019
Подобные моторы отлично управляются с помощью низкочастотного ШИМ.
Настройте ШИМ на таймере 1 на 61 Гц (9 и 10 ноги). Звук останется, но станет не таким раздражающим - похож на звук от работающего трансформатора.
TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x0d;
У меня мотор стартует примерно от analogWrite(pin, 35)
на холостом ходу. Драйвер правда другой, VNH2SP30.
Еще одна поделка с более мощным мотором управляется через транзистор IRLZ44N (настоящим, не китайским). Затвор подключен к выходу Ардуино через резистор 100 Ом. На низкой частоте ШИМ практически не греется. Реверс можно организовать с помощью реле. ВАЖНО! Не забывать о защитном диоде!
Вышесказанное при питании 12 В.
А зачем полевику такой маленький (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;
Что это значит?
Что этим можно заменить первое …
Я так понимаю управление планируется с помощью потенциометра?
Тогда включите последовательно с ним постоянный резистор, чтобы при нулевом его положении analogRead
выдавал чуть меньше 40. Тогда регулировка потенциометром будет от одного крайнего положения до другого.
по идее вторая конструкция отрабатывает за два такта микропроцессора (преобразование, кроме чтения)?
А если нагрузить машинку сильнее, то и 50 может оказаться мало !!!
а нечего детей перекармливать )))
При использовании джойстика значение в нулевом положении 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 единиц возможно хватит