В настоящее время я работаю над проектом Atmega 2560, где мне нужно синхронно управлять несколькими шаговыми двигателями. Это означает, что иногда только один двигатель вращается за один раз, а иногда несколько двигателей должны вращаться в одно и то же время на один и тот же угол. Планируя свой подход, я столкнулся с проблемой, я не уверен, как решить. Итак, я решил посмотреть, сможет ли кто-нибудь дать мне ценный совет.
Я пишу программу на C ++, и я хотел создать класс для шаговых двигателей (см. прикрепленный UML), который имеет метод rotate (), чтобы, как вы уже догадались, повернуть шаговый двигатель на определенный угол в определенном направлении. Теперь, конечно, это создает проблему синхронизации, потому что мне нужно реализовать функцию таким образом, чтобы она не блокировала какой-либо другой код и позволяла мне одновременно вращать несколько двигателей. Я придумал два возможных подхода:
Теперь мой вопрос ко всем вам: какая бы возможность, по вашему мнению, сработала бы лучше, или, если есть что-то еще, я мог бы попробовать? Я вполне уверен, что смогу реализовать любой из вышеперечисленных, но я просто не очень доволен ими обоими. Было бы правильно использовать счетчики и прерывания, чтобы гарантировать точное время. Однако подход к наличию внешней таблицы для активных степперов делает программу менее понятной. Кроме того, у меня были проблемы с установкой ISR в объектно-ориентированный мир.
Любые идеи или вклады высоко ценятся.
С наилучшими пожеланиями
Axodarap
Задача ещё не решена.
Других решений пока нет …