остановить шаговый двигатель
- Войдите на сайт для отправки комментариев
Здравствуйте!
Написал свой первый скетч, но не получается закончить его правильно.
Программа должна работать так: Запуск двигателя по кнопки пуск, каретка едет до датчика холла, срабатывает функция прерывания и двигатель меняет направление, едет до второго датчика холла, срабатывает прерывание и он останавливается и ждёт следующего нажатия кнопки. Всё это выполняется отлично, с одним недостатком, на двигателе остаётся на одной обмотке напряжение и он греется вместе с драйвером. Я так понял, что команда stepper.step(0) когда двигатель уже запущен останавливает его т.к. шаг равен нулю и напряжения перестают переключаться между обмотками зависая на одной из них. Есть ли команда стоп двигателя, которая обесточивает все обмотки или как изменить программу, чтобы она работала правильно?
#include <Stepper.h> int in3 = 4; // порт кнопки пуск int valst = 0; // переменная для хранения данных кнопки пуск volatile int state = 0; Stepper stepper(200, 8, 9, 10, 11); void setup() { pinMode(4, INPUT); digitalWrite(4, HIGH); attachInterrupt(0, reverse, RISING); // обработка реверс, переход на функцию reverse attachInterrupt(1, stop, RISING); // обработка остановки, переход на функцию stop } void loop() { label: stepper.setSpeed(300); stepper.step(state); for (valst = digitalRead(in3); valst == LOW;) // Цикл опроса кнопки пуск { state = 1; goto label; } } void reverse() // функция возврата { state = -1; } void stop() // функция остановки { state = 0; }
Так и должно быть. Режим "удержание" - стандартный режим работы двигателя.
Спасибо за ответ. )))
Как обойти этот режим можно, так чтобы вернуть двигатель к первоначальным установкам в режим готовности?
Всё, разобрался. Вот так получилось, через программный сброс.
Примерно как дубиной по ишаку.
А как правильнее покажи - буду учиться на примерах.
А как правильнее покажи - буду учиться на примерах.
двигатель!, рав-няйсь, сми-рно, шагом м-арш, кру-гом, сто-й!
Примерно как дубиной по ишаку.
...калибром по иранскому ишаку.
А просто записать нолики на выходы к которым прицеплен двигатель? Без библиотек?
А просто записать нолики на выходы к которым прицеплен двигатель? Без библиотек?
Покажи как это сделать, я ещё очень плохо знаю программирование?
Я вроде как нолики на выходе и прописал перед сбросом программы, но это не помогало без сброса.
А есть уверенность, что нужно прописывать именно нолики?
Ну и еще раз намекну: ответ на вопрос
такоы: она сейчас работает правильно, а вЫ хотите, чтобы она работала неправильно.
Подумайте еще раз - оно Вам надо?
Программа работает правильно. )))
Просто хотел ещё посмотреть какие есть варианты, для общего образования. Хотя бы несколько...
Программа работает правильно. )))
Просто хотел ещё посмотреть какие есть варианты, для общего образования. Хотя бы несколько...
А смысл кому-то корячется над тем что выше вашего уровня , как программиста в Си.
Я не прошу весь скетч, просто варианты оконцовки программы, чтобы двигатель переходил в режим ожидания, так как он находится при старте программы. Это даже для средного программиста скорее всего минутное дело(наверное), а мне для самообразования.
Скетч уже записан в станок и работает, просто любопытно как ещё можно (проще или сложнее) закончить программу.
Шаговик, драйвер, ардуино, макетка есть, собрать на столе и проверить, что получилось могу.
В любом случае спасибо за внимание. )))
1) всегда уважайте чужой труд. И труд не может быть "минутное дело".
2) Проектирование программ может быть снизу -вверх или сверху-вниз. Грубая аналогия . Проектировать автомобиль с точки зрения водителя и окружающих или с точки зрения мотора. В первом случае получится что-то удобное и практичное в вождении, во втором хрень опасная для окружающих, но все таки движется. Разумеется в 1 варианте будет затрачено много ресурсов и сил.
3) Программа это не то что работает или (сарказм) не работает. Программу надо писать так , что бы при отладке или сдаче ее заказчику можно вносить изменения, можно в последствии ее развить в более серьезный проект и наконец если появится еще один заказчик с другим похожим или не похожей задачей, то втюхать эту же программу ему.
4) в Stepper.h для ШД в 4 вывода
1) всегда уважайте чужой труд. И труд не может быть "минутное дело".
Я не хотел обидеть ни в коем случае, самого раздражает когда говорят - ткнул паяльником и отдал аппарат...
Некоторые поломки в аппаратуре я могу делать за минуты, но на эти знания ушли многие года практики и учёбы, тоже самое и у вас программистов, скорее всего даже сложнее! Я на эту-то програмку в 30 строчек потратил весь день пока составил, так, что всё понимаю и писал не со зла или попыткой обидеть. )))
Сейчас замерил все четыре пина на драйвере шаговика, пока кнопка пуск не нажата на всех четырёх выводах висит 0. Естественно после запуска программы идет перебор нуля и единицы и двигатель работает. Если нет команды на общий программный сброс то на одной из обмоток постянно висит напряжение после остановки двигателя командой stepper.step(0). Режим удержание как писал andriano. Но мне он не нужен в моём случае. Сейчас программа работает, просто хочу узнать есть ли специальные команды которые выполняют функцию остановки двигателя со снятием напряжения со всех его обмоток? (То, что я сделал у себя общим сбросом программы) Ведь программа в 30 строчек этого не заметит, а большая программа потратит какое-то время на её сброс, да и не правильно это - сбрасывать всю программу, в моей значение не имеет, а вот в других может оказаться фатальным для других функций.
Вот код . В работе не проверял. Разберетесь - чему-то научитесь.
Спасибо большое! )))
Буду разбираться.
Я на эту-то програмку в 30 строчек потратил весь день пока составил...
Обратил внимание, что Ваша производительность труда в точности совпадает с производительностью квалифицированного программиста - 4 строки в час.