нужна помощь с датчиком тока и двигателем постоянного тока
- Войдите на сайт для отправки комментариев
Суть вопроса в следующем,
Есть DC motor, есть аналоговый сигнал по которому двигатель приводиться в движение,
на определенном этапе когда двигатель достигает нужного показателя тока, требуется его
остановка, все бы было хорошо, но при запуске двигателя (самого начала)
сила тока равна = силе препятствия, с программы имеем силу тока 800 - это макс. значение
оно длиться около 0.1-0.1.5сек при старте двигателя и далее спадает до 125-250 (из-за резьбы) при достижении препятствия сила возрастает до 800(нужно остановить подачу при препятствии). Требуется сделать так чтобы двигатель отключался и напряжение пропадало, но при подаче сигнала приводилось в движение снова.
Пытались реализовать через millis(), но тщетно, ибо когда мотор только стартует то напряжение поднимается в задумках как-то сделать "слепую зону" на перемену старта(вращение в одну/другую сторону). Но через отмер времени не вышло, т.к блокировалась дальнейшая работа программы из-за уловимости скачка тока при старте движения.
Может кто-то что-то предложить по решению вопроса?
Помимо этого, есть еще датчик, от которого происходит старт, допустим:
CM11 = analogRead(1)
current_sensor = analogRead(0)
If (CM11 > 0)
{
analogWrite(MOTOR1, 255);
}
else
{analogWrite(MOTOR2, 255);
}
Ну так не ловите его при старте, поставьте задержку на 0,5-1с ( или сколько там по ТЗ), а дальше уже мониторьте.
Парадокс, когда двигатель достигает препятствия то, ток постоянно 800, чтобы привести в движение опять нужен ток 800 но уже в другом направлении против препятствия, желательно обойтись без delay() ибо важна скорость, если есть пример решения, с радостью почитаю вашу идею) по ТЗ 0.5-1с оч много. 0.125-0.2сек макс.
Через милис, каким-то образом запилили так, что при движении ток растет и падает глубоким синусоидно, но после все равно достигает апогея то ток возрастает до макс. значения, хотя по идее должен был равен 0.
Дали старт двигателю, подняли флаг, пока флаг поднят значения не считываем, прошел интервал, сбросили флаг. Как то так.
P/S по такому принципу:
Да, но есть проблема, один датчик определяет положение вращения двигателя, влево или вправо. Т.е если датчик выдает инфу 400 - то двигатель крутиться в одну сторону, если 0, то крутиться в другую, так вот, когда он крутиться в другую ток составляет 120-250, при стартовом токе 800, когда он доходит в окончательное положение, встречает препятствие и ток меняется на 800, нужно остановить его. Как, будут предложения?
Не понимаю вашу задачу, препятствие может возникнуть моментально после старта? Если нет, то if (amper >=800) {двигатель стоп}/
А даже если и возникнет, мы все равно не сможем определить что это.
препятствие не возникает, но при старте двигателя датчик тока показывает макс. значение, на 0.1сек, потом оно спадает в 5 раз.
Вы мой код смотрели? 200 миллисекунд он вообще аналогрид не делает.
Вот тоже что и в bwn только подробней
Работает, но переменная, которая постоянно меняется 100~700
должна давать "запуск" тому или иному мотору, в зависимости от исходного значения, я попробовал подставить, но ардуино игнорирует дальнейшие значения в переменной и выполняет строго программу без лупа, т.е пока крутиться один мотор , может прийти сигнал о том, чтоему нужно остановится и крутиться должен другой мотор.
Сделайте у двигателя плавный пуск можно програмный через ШИМ на ардуино. Тогда пусковой ток значительно уменьшится и датчик
тока при пуске срабатывать не будет.