Ищу исполнителя скетча для управл. оборотами ШД кнопками и вывод на LCD
- Войдите на сайт для отправки комментариев
Втр, 13/08/2013 - 17:54
Прошу Вас написать скетч за вознагрождение оринтировочно такого плана
http://www.lucadentella.it/en/2013/05/30/allegro-a4988-e-arduino-3/2/
управление через вот это
http://www.goodluckbuy.com/single-axis-cnc-stepper-driver-for-cnc-millin...
Не поверите, но скетч будет такой же самый. Что в вашем, что по ссылке управление через Step/Dir.
P.S. куда деньги пошлете ? :)
На какую сумму Вы оцениваете работу?
Николай, какие деньги. По вашей же ссылке уже готовый код: https://github.com/lucadentella/A4988-and-Arduino
Спасибо большое пробовал работает, но совсем не так как на Demo http://www.lucadentella.it/en/2013/05/30/allegro-a4988-e-arduino-3/2/
У Вас скетч крутит ШД пока держишь кнопку, крутится с постоянной скоростью и не добавляется скорость, только бегут стрелочки на индикаторе влево или вправо в зависимости на какую кнопку нажать.
Не показывает обороты, мне надо от 1 оборота (а вообще минимально четверть оборота) и макс. до 200 оборотов.
Я понял Вы из друго примера мне скинулу скетч вто это
http://www.lucadentella.it/2013/05/25/allegro-a4988-e-arduino-2/2/
Да, я вам скинул скетч, который попроще. Попробуйте второй: https://github.com/lucadentella/A4988-and-Arduino/blob/master/cntrSpeedDir.ino
строка 058 ошибка Timer1.attachInterrupt(timerIsr) ;
sketch_aug14a.ino: In function 'void setup()':
sketch_aug14a:58: error: invalid conversion from 'void (*)()' to 'void (*)(bool)'
sketch_aug14a:58: error: initializing argument 1 of 'void TimerOne::attachInterrupt(void (*)(bool), long int)'
sketch_aug14a:58: error: void value not ignored as it ought to be
Есть еще один скетч но он к кнопкам LCD не привязан
Вот ссылка http://pastebin.com/jRG3gi2F
Исходное:
- ШД Pl57H56-2.6-4
- драйвер управления http://www.goodluckbuy.com/single-axis-cnc-stepper-driver-for-cnc-milling-machine-diy-max-50v-dc-4-5a.html
- LCD 1602 Shield with keypad http://www.ebay.com/itm/LCD-1602-Keypad-Shield-Module-for-Chinduino-atmega328-2560-/170832425898
- Arduino UNO ATmega328P
Как должно работать:
-кнопка включить выключить двигатель
-кнопка реверс
- скорость (больше)
- скорость (меньше)
- направление
- при нажатии включается максимальная скорость оборотов скажем 200 об при отпускании возвращается в исходное состояние, иметь возможность в скетче задать максимальную и минимальную скорость.
- возможность установки кнопками скорость в трех разрядах , например 3 разряда 000 об/мин выбираем 1 первый разряд ставим 1 выбираем второй ставим 8 выбираем третий ставим 7 получилась 187, кнопка включить скорость должна 187 об
Вот что надо если что то по мелочи не забыл .
Вот ниже мне дали скетч можно его за основу взять (или второй как Вам удобней) у него только кнопки не используют аналоговые входы, ниже второй скетч там используют кнопки LCD 1602 Shield with keypad
Скетчи как варианты http://pastebin.com/jRG3gi2F
https://github.com/lucadentella/A4988-and-Arduino/blob/master/cntrSpeedDir.ino
Кто возьмется сделать?
https://github.com/lucadentella/A4988-and-Arduino/blob/master/cntrSpeedDir.ino
Вроде все работает но почему он зависает, но двигатель продолжает крутится, приходится ресет делать, подскажите пожалуйста
Добавте в setup(){}
В начало loop()
Добавте
Откройте сериал монитор, и смотрите, если в момент зависания (а не только в самом начале) у вас выскакивают слова "Stated" - значит происходит ребут контроллера.
Если перестали появлятся надписи heartbeat:КАКОЙ-ТО число - значит действительно loop, по какой-то причине перестал "крутится".
Вообщем вначале нужно убедится что "зависания" имеют место быть.
К тому же... было бы неплохо указать в какой ситуации возникает это "зависание" (через какой-то вермя, после 100 нажатий) и в чем оно проявлятся (Исчезают надписи с экрана, не реагирует на кнопки и т.п.)
Спасибо за помощь. Сделал как Вы написали , продолжает зависать.
Зависание происходят в разные моменты, пробовал какую то закономерность найти всегда по разному.
Загружаю скетч идет Stated далее
heartbeat:1008
heartbeat:2012 и т.д
Нажимаю кнопки DOWN ,UP трудно уловить перестает управлять кнопками где то
heartbeat:32114
heartbeat:33238 вроде в этом месте когда переходит на 33...
heartbeat:34248
heartbeat:35260
heartbeat:36271
heartbeat: продолжается , потом делаю ресет работают кнопки идет Stated
Я правильно понял, что
1. Перестает реагировать на кнопки, при этом
2. heartbeat - продолжает идти в сторону увеличения. сброса на "малые цифры" - не происходит. Верно?
Кстати, функция
int
read_buttons()
что она вренет, если скажем с analogRead() прочитается значение 800? Ответ - а фиг его знает. Чтоу годно.
ПОэтому, я бы убрал
и в конце read_buttons() сделал просто
Что-бы "что-нибудь" возвращалось всегда. btnNone - если не смогли опознать ни одну кнопку.
Кстати, если бы вы btnNone сделаете нулевой (поменяете ее код с btnRIGHT к примеру), то
То проверку "нажата ли кнопка", можно делать не только как сейчас
но и более кратким вариантом
После зависания heartbeat - продолжает идти в сторону увеличения.
После сброса преходит на "малые цифры" - всегда начинает heartbeat:1008
После зависания heartbeat - продолжает идти в сторону увеличения.
Значит никаких "зависаний" - нет (вы избежали "проверте питание, поставте конденсаторы, попробуйте другую плату и т.п."). Проблема - в коде.
Смотрите сообщение #16 - обязательно, #17 - по вкусу
Может я не так вставил Ваш код. Я только учусь.
Вроде раньше для форума я копировал скетч было нормально а сейчас делаю просмотр он тянет HTML код цвета и т.д или если сохранить будет нормально?
Питиние отдельно от ИП 10 вольт подключал на отдельный разьем от arduino , менял плату пробовал Megs 2560 не чего не меняется, пульсаций проде нет смотрел осцилографом.
не получается
По хорошему, нужно еще добавить, перед
Что-то такое
Что-бы увидить какие, на самом деле, у вас приходят значения для кнопок. Бо, практически уверен, что вы взяли цифры в read_buttons() взяли "откуда-то из инета". А у вас могут быть чуток другое соотношение резисторов (погрешность, температура в комнате), чуток другое напряжение питания и т.п.
Вообщем понажимаете кнопки, посмотрите какие цифры появляется после A0= и поправте, если нужно "пороги" в read_buttons()
Может я не так вставил Ваш код. Я только учусь.
Вроде раньше для форума я копировал скетч было нормально а сейчас делаю просмотр он тянет HTML код цвета и т.д или если сохранить будет нормально?
Читайте:
Вставка программного кода в тему/комментарий
В сообщении #2 я описывал не только "как вставлять" на форум, но и "как забирать себе"
P.S. Хотя что там в #16 нужно вставлять? Одну строчку выбросить, одну дописать. Можно и руками.
Питиние отдельно от ИП 10 вольт подключал на отдельный разьем от arduino , менял плату пробовал Megs 2560 не чего не меняется, пульсаций проде нет смотрел осцилографом.
Да это и не нужно было делать. Я же сказал "мы этого избежали". То что heartbeat продолжает увеличиватся уже нам сказало что "контроллер работает нормально, без ребутов и зависов".
не получается
Пока вы не скажете "что именно у вас не получается". Что именно вы делаете - вам никто помоч не сможет. Я же на стою у вас за спиной.
Обрезалось. Не видно скетч целиком. Вы перед тем как постить, можете нажать кнопку "Предпросмотр", что-бы увидеть "как оно будет выглядить". Она чуть правее кнопки "сохранить"
Извините, вот кусок скетча и Ваш код посмотрите правльно я сделал.
Если рестарт сделать когда он уходить за 32.... если нажимать на кнопки начинает скорость перепрыгивать и соответственно отображать на LCD потом зависает.
вот сейчас например насчитало heartbeat:337169
если нажать на кнопку Up двигатель закрутился и все зависло, двигатель продолжает крутится
Я вообще не вижу что-бы вы что-то сделали. Единственную разницу между изначальным кодом в сообщение #6 и кодом из собщения #30 - то что добавли вывод "hearbeat".
Но это не "исправление", а "вывод дополнительной отладочной информации". Что-бы понять - что происходит. Она позволила нам понять что "с питанием и самой ардуиной - проблем нет". И то что вывод отладочной работает "как нужно" - мы выяснили еще в сообщении #19
Так что я не вижу "что же тут проверять"? Логика скетча - нигде не менялась. Попыток применить исправление описанное в сообщении #16 - я не вижу. Как и попыток вывести еще дополнительной инфы (описанно в #23). Что-бы увидеть что же на самом деле читается с аналогового входа.
Плату я выбираю Arduino Uno на плате написано Model Uno r3
Плату я выбираю Arduino Uno на плате написано Model Uno r3
Вы вообще мои сообщения читаете? Или через одно?
Я уже три раза сказал что "мы вяснили что с платой и питанием все в порядке". Три раза сказал что "сделайте поправку описанную в сообщении #16" (это явно проблемное место, даже если не оно "причина глюка" - так оставлять его нельзя).
Если не поможет - применяйте то что описанно в #23. На основании этой инфы - будем думать куда копать дальше (вносить поправки, еще натыкивать Serial.print что-бы получать еще больше инфы... пока не поймем в чем проблема).
сделал 16 все тоже самое
сделал 23 зависло на где то сдесь
heartbeat:32161
A0=1023
heartbeat:33170
A0=1023
>сделал 16 все тоже самое
OK. Это в любом случае нужно было сделать. Функция во ситуациях должна какой-нибудь return делать. В C# к примеру - изначальное вообще бы не скомпилировалось.
Что делать дальше, вы уже знаете:
"Если не поможет - применяйте то что описанно в #23. На основании этой инфы - будем думать куда копать дальше "
Нажимайте кнопки по очереди. Смотрите в каком диапазоне, для каждой кнопки, выводятся значения A0
Меняются ли эти "диапазоны" когда "перестало реагировать на кнопки"?
сделал 23 зависло на где то сдесь
heartbeat:32161
A0=1023
heartbeat:33170
A0=1023
Что A0 показывает при нажатой кнопке, скажем RIGHT? "До зависа" и "после"?
такие и ставить то что получаю?
UP 134-135
DOWN 310
RIGHT 0
LEFT 484
SELECT 724
если не нажимать всегда A0=1023 если нажимать то соотвествует то что я писал не зависимо зависло или нет.
>Если рестарт сделать когда он уходить за 32....
Что-то подозрительное число... больно на максимальный размер int похоже.
Проверте верно ли утверждение "проблемы начинаются в районе 32-секунды". Что-то типа "на 25-той всегда все нормально", а на "40-вой уже точно не работает. всегда".
такие и ставить то что получаю?
UP 134-135
DOWN 310
RIGHT 0
LEFT 484
SELECT 724
Нет. "Точное совпадение" - делать не нужно. Пока все нормально. Если мысленно подставить эти значения в read_buttons() - коды клавиш распознаются нормально. Так что - пока не трогаем, по этому поводу read_buttons(). Просто "проверили - убедились что и тут все правильно". Ищем дальше.
Как по поводу моей догадки про проблемность 32-секунды (когда в hearbated выводится что-то больше 32000)?
на 25 нормально только на 32, а если не нажимать на кнопки после ресета двигатель стоит и нажать на любой после 32 включится на индикаторе показывает 5 оборот двигатель крутится и все кнопки не реагируют
А блин... вынудили таки... пустил у себя. Да... есть проблема в районе 32-секунды.
Ну значит где-то искать ошибычной int....
Ну и вот он
Меняем на
И будет вам счастье :)
Правда проблемы опять могут возникнуть. Примерно на 49-тый день непрерывной работы без перезагрузки.
Что-бы этого избежать, нужно
Заменить на
Ну Вы колдун , спасибо большое! это что Итальянцы ошибку сделали?
Вы извините за наглость там шаг 5 а мне надо сделать 1 и скорость где то 200 поставить если не получится 100-150, скажите где это можно сделать?
Если не ответите и на этом огромное спасибо.
Вам огромное спасибо от ученых биологов. От нашей бедности и нет возможности купить новый "насос перистальтический" для подачи физ раствора, вот и занимаемся модернизацией совдеповских насосов меняем двигатель все на коленках.
Еще раз большое Вам спасибо.
Ну Вы колдун , спасибо большое! это что Итальянцы ошибку сделали?
А что, они не люди? Писать без ошибок - еще никто не научился. Разве что вот этит ребята Они пишут правильную вещь | Kh_Oleg . Но... какой ценой эта безошибочность обходится :) И даже тут - не нулевая. Хотя эти показатели - выглядят как "что-то совершенно не реальное".
Вы извините за наглость там шаг 5 а мне надо сделать 1 и скорость где то 200 поставить если не получится 100-150, скажите где это можно сделать?
Если не ответите и на этом огромное спасибо.
Не, тут уже одной строчкой - не отделатся. Смотрите на массив speed_ticks[]
Что про них, вот мы на работаем, если Вы знали такую машину Электронику 60 Воронежского производства ЦП 1 Мгц Озу 32 Кб венчестер 20 мб, до сих пор у нас в экспериментальной установки работает.