Плавное управление скоростью коллекторного двигателя
- Войдите на сайт для отправки комментариев
Чт, 26/06/2014 - 22:03
Собственно стоит задача в следующем, кручу ручку потенциометра и обороты двигателя медленно растут до установленных потенциометром, по аналогии и с уменьшением оборотов. Вот нашёл в сети код:
#define motor_pin 9 int value, prev_value, slow_value, wait = 10; void output_data(){ String dataString = ""; dataString += value; dataString += ","; dataString += prev_value; dataString += ","; dataString += slow_value; Serial.println(dataString); } void setup() { Serial.begin(4800); } void loop() { value = analogRead(0)/4; if(prev_value > value){ for(slow_value = prev_value;slow_value > value; slow_value--) { analogWrite(motor_pin,slow_value); delay(wait); } } if(prev_value < value){ for(slow_value = prev_value; slow_value<value; slow_value++) { analogWrite(motor_pin,slow_value); delay(wait); } } prev_value = value; output_data(); }
Но есть парочка непоняток:
При положении потенциометра в 0 - обороты то медленно падают, но двигатель слегка ещё пищит, тоесть ШИМ не ровен нулю.
Так же при положении макс, если двигатель остановить то слышно писк, тоесть ШИМ не равен 255.
Помогите разобраться ато мозги совсем не варят, частота почему-то упала и не хватает производительности.
не смог пройти мимо
Сидят в кинотеатре два наркомана. Свет медленно, медленно гаснет. Один
говорит: "Почему свет так медленно гаснет?". Второй отвечает: "Вот,
представь себе, заходит киномеханик к себе в будку и м-е-е-дленно тянет
вилку из розетки".
По сути нужно имитировать инерцию ротора.
ну я думаю что потенцуометр не выдает прямо НОЛЬ.. и 255.. имеет смысл програмно притягивать к нулю и к 255 когда есть для этого основания..
В сериале видно нули:
на заборе тоже много чего пишут, но за забором дрова складывают..
попробуйте насильно принуждать в нулю или к 255. будут ли те же самые симтомы?
Вот так вроде как работает.
А зачем так сложно?
Хах, действительно.
Спасибо.
А зачем так сложно?
Увы, Ваш код неподошёл мне.
Этот код работает вот так:
https://www.youtube.com/watch?v=bNTSjbAtC9g
https://www.youtube.com/watch?v=SMe_f-026mE
Особенность ШИМ в AVR-ках описан в даташите, при установке нулевого заполнения на выходе будут импульсы логической единицы
Поэтому для полноценного нуля надо при желаемом нуле в порт записывать цифровой ноль, типа так:
хаха )) не я глупость написал, для ардуины уже обо всем позаботились, вот кусок кода analogWrite
ШИМ
так с мотором коллекторным на постоянном токе игрался или активная постянная нагрузка лампочка только?
а то я не могу решить что мне прикручивать
Лампочка 40 Вт, на других частях видео есть маленький двиг. на 5 Вт и большой, от печки, с крыльчаткой жрёт около 4-х Амперов, если же остановить то целых 15 А.
Как-то случайно было закоротил выход и тинька сгорела, транзистор и всё другое, включая 78l05 осталось цело.
Схема:
Только диода не хватает, позже прикручу.
Транзистор при токах до 4.5 А почти не греется, при любой скважности ШИМ, частота ~70 Гц.
А почему не подошёл? Вроде как всё верно, код стремится "занулить" sensorValue, увеличивая, или уменьшая speed, delay(30) обеспечивает тот самый эффект инерции, когда потенциометр уже упёрся в ограничитель, а скорость вращения двигателя\яркость свечения лампы ещё меняется. Как по мне, так шикарный код. В чём загвоздка?
И чтобы не палить аттини может стоит развязать его с силовой цепью, например оптроном?
А почему не подошёл? Вроде как всё верно, код стремится "занулить" sensorValue, увеличивая, или уменьшая speed, delay(30) обеспечивает тот самый эффект инерции, когда потенциометр уже упёрся в ограничитель, а скорость вращения двигателя\яркость свечения лампы ещё меняется. Как по мне, так шикарный код. В чём загвоздка?
И чтобы не палить аттини может стоит развязать его с силовой цепью, например оптроном?
Вообще непашет Ваш код.
Думаете имеет смысл заменить транзистор Q2 на PC817, аля класика?
Сейчас тоже планирую организовать управление двигателем ардуиной, но вот двигатель очень мощный. До 100а на старте. Если н-мост не разорвет, буду эксперементировать с программой
Добрый день.
Люди добрые, подскажите начинающему!
Не пойму, как в этом скетче (пост 6) добавить второй переменный резистор (на вход А1), для независимого управления вторым мотором, допустим на 6-м пине?
Подскажите, в каком направлении начать.
Задача, получить два независимо регулируемых резисторами двигателя.
... Не пойму, как в этом скетче (пост 6) добавить ...
Самое простое - код скопировать еще раз и переменные переименовать
Спасибо, вчера уже разобрался! Просто была загвоздка в том, у меня регулировались сразу оба выхода, с любого входа. Я экспериментировал на одной паре резистор-мотор, переключая их на разные пины. Добавляю строки, переключаю на другой вход, а он регулирует оба выхода. Ненагруженный вход ведет себя неадекватно. В общем, дошло нагрузить оба входа, и всё встало на свои места.
Кстати, получилось всего одной строкой для одной пары: