Возможности ардуино
- Войдите на сайт для отправки комментариев
Втр, 04/02/2020 - 21:45
Здравствуйте. Подскажите пожалуйста, может ли arduino параллельно обрабатывать два и более выхода? Например, крутить шаговик и управлять ШИМ. Т.е. не между сигналами ШИМ делать шаг, а параллельно, не прерывая работу одного из двигателей.
Параллельно - нет. Очень быстро переключаясь между задачами - да.
Как работает шаговик - подали сигнал на один шаг, выдержали паузу нужную для плучения требуемой скорости вращения, сделали следующий шаг. На выполнение действий для переключения катушек (шага) требуются микросекунды. Время ожидания следующего шага может быть и миллисикунды и больше. То есть пока ждет следующего шага процессор может переделать кучу других вещей. Главное все правильно это запрограммировать.
Можно ещё на двух хардварных таймерах запараллелить пульсацию. Тогда все будет по-честному.
Можно, но это не для начинающих. Плюч три четверти (а может и больше) библиотек работать не будут.
Спасибо огромное! Зная это, будет проще реализовывать задумку. Делаю станок для заточки фрез. Про ардуино узнал пару месяцев назад. Станок должен выполнять движения вправо/влево и очень медленно на меня. Для продольной подачи я взял двигатель с шуруповёрта. Регулировать обороты решил ШИМом, но почему-то при скважности 100% его мощность была гораздо ниже, чем при питании 12 вольт. К тому же при попытке уменьшить обороты ниже 80% контроллер зависал. Попытался отследить монитором ком порта. При зависании в порте появлялся различный мусор. Я посчитал что это из за наводок на длинные провода, между переменными резисторами, кнопками и самопальным драйвером (использовал нано).Взял uno + шилд с экраном 16х2. Пока изучаю тонкости написания меню решил пообщаться с грамотными людьми, может чему и научусь ) Ещё раз спасибо.
И это не будет параллельным выполнением кода, по определению ;) Всё равно всё выполняется последовательно, просто по прерываниям, которые вклиниваются, когда им надо. Но это не параллельность выполнения процессов, ты же в курсе ;)
И это не будет параллельным выполнением кода, по определению ;)
Пащиму, нащальникама? Один таймер запускаем в PWM, второй в CTC, к примеру. Переключаемся не в прерывании, а хардварно перекидывая ногу. Или запускаем на аксельстеппере движок, а PWM-ом пусть продолжает рулить analogWrite().
Движки же ему не в мегагерцах крутить, полагаю, требуется, так что все должно быть OK с параллельностью.
Можно, но это не для начинающих. Плюч три четверти (а может и больше) библиотек работать не будут.
Насчет совместимости с библиотеками не было требований ;)
Для продольной подачи я взял двигатель с шуруповёрта. Регулировать обороты решил ШИМом, но почему-то при скважности 100% его мощность была гораздо ниже, чем при питании 12 вольт. К тому же при попытке уменьшить обороты ниже 80% контроллер зависал.
Хм.. И как вы этот двинатель к ардуино подключили? Желательно схему привести.
А можно ссылочку, для изучения, как это сделать? Или своими словами, может соображу.
Прошу прощения, я пока не разобрался как картинки прикреплять ( Постараюсь разораться и всё прикреплю и отправлю.
А можно ссылочку, для изучения, как это сделать? Или своими словами, может соображу.
http://electricalschool.info/elprivod/1864-upravlenie-shagovyjj-dvigatelem.html
https://www.sparkfun.com/datasheets/Components/SMD/ATMega328.pdf - разделы 8-bit Timer/Counter0 with PWM и далее про остальные таймеры
Прошу прощения, я пока не разобрался как картинки прикреплять ( Постараюсь разораться и всё прикреплю и отправлю.
http://arduino.ru/forum/obshchii/sokhranenie-kartinok-na-forume
Вытравил плату, посадил на радиатор (на всякий случай). Более-менее работало...
Вытравил плату зде, посадил на радиатор (на всякий случай). Более-менее работало...
Зачем плату здесь? Схему надо. И код (скетч)
asam, Спасибо, вроде разобрался.
Ну, схема не отличается от платы. А на счёт кода, прошу не пинать, только осваиваю...
На плате указаны контакты для подключения ардуино.
Извиняйте за "Serial.print", не мог понять почему контролер зависает. Подчищать не стал.
На плате указаны контакты для подключения ардуино.
Во-первых: Удосужтесь прочитать правила форума вообще и в частности вставить код правильно - http://arduino.ru/forum/obshchii/pesochnitsa-dlya-vsekh-novichkov
Во-вторых на плате не указаны ни номиналы резисторов ни тип транзисторов.
А самое главное разбираться по плате - не удобно. Вы же просите помощи. Так сделайте так что бы помогающим было удобнее. Если вы не хотите напрячься для этого, тогда с какого бодуна должны напрягаться другие? Им то нет необходимости вашу проблему решать.
Прошу прощения. Я только что зарегистрировался. Сейчас же исправлюсь и всё прочитаю. Позже укажу номиналы.
Код по правилам.
транзистор IRF 3205
Все параллельные резисторы имеют одинаковый номинал.
А шаговый какой?
Простенький 28BYJ-48.
Я, конечно, разными извращениями с этим юниполярником не занимался, но для стандартного подключения в коде не вижу для него подходящих фрагментов.
Меня asam спрашивал, как я двигатель подключал, вот я и основной код и выкинул.
А шаговик я тупо, сам запускал, между проходами.
транзистор IRF 3205
Они не открываются полностью от 5В
Ого, вот этого не ожидал, многие ютуберы используют его для управления светодиодной ленты. А я и не додумался в датащит посмотреть. Спасибо. (Не доверяй никому)
Даже с делеями код не будет прерывать работу хардварного PWM. При данном раскладе изучение таймеров не особо нужно. Скорее всего, как asam и пишет, проблема в транзисторах. А кажется, как-будто ардуина не тащит.
Пащиму, нащальникама? Один таймер запускаем в PWM, второй в CTC, к примеру. Переключаемся не в прерывании, а хардварно перекидывая ногу. Или запускаем на аксельстеппере движок, а PWM-ом пусть продолжает рулить analogWrite().
Движки же ему не в мегагерцах крутить, полагаю, требуется, так что все должно быть OK с параллельностью.
Ок, принимается. Я, собственно, немножко про другое: есть два куска кода прошивки, которые надо выполнять параллельно. Шо получается? Только через псевдомногозадачность: выполнили кусочек, переключились на другой контекст, выполнили кусочек, далее по кругу.
А так да - если в конкретной задаче можно поюзать системную периферию, которая живёт своей жизнью отдельно от ядра - то это параллельность, согласен.
Ого, вот этого не ожидал, многие ютуберы используют его для управления светодиодной ленты. А я и не додумался в датащит посмотреть. Спасибо. (Не доверяй никому)
Ну если добавить транзистор, то и 5ю вольтами можно будет полностью открыть. А насчет лент - из-за нелинейного восприятия яркости человеком, неполное открыте МОСФЕТа не сильно заметно, особенно если сравнить не с чем.