Генерируем произвольные последовательности на выводах платы Raspberry Pi
Комментарии (5)
8 июня 2017 в 20:39
+1↑
↓
, а зачем использовать Raspberry?
это как микроскоп вместо молотка
возьмите например STM32F030 за 1$
и играйтесь с DMA8 июня 2017 в 21:58
+1↑
↓
С помощью DMA управлять шаговыми двигателями микроконтролерами типа stm32 не получится (или это будет притянуто за уши) из-за банальной нехватки оперативной памяти для буфера. А вот просто использовать stm32 без операционной системы/с операционной реального времени можно. Существует множество реализаций, автор статьи так же является автором одной из них.
Для каких-то целей этого вполне достаточно. Но всегда хочется иметь что-то более современное, например, просто подключить полноценный монитор или иметь Wi-Fi на самом блоке управления. Да, безусловно, все это можно реализовать и на маленьком микроконтроллере, но это будет несравнимо сложнее, чем просто вставить usb-донгл в плату (в случае RPi3 он уже сразу есть на плате).
Кроме того, разработка под микроконтроллер, как правило, ведется на Си/Си++, что заметно сложнее, чем писать на Python. Можно долго филосовствовать о плюсах языков высокого уровня, но в любом случае Python обеспечит более простую портируемость одного и того же кода между процессорами/платами/платформами. В случае того же контроллера CNC достаточно лишь реализовать доступ к DMA, и остальная часть, скорее всего, заработает сразу.
Так же не забываем о вопросе производительности. Тот же слайсер для 3d-принтера можно запускать сразу на Raspberry Pi, для микроконтроллера он будет тяжеловат по занимаемому в прошивке месту и производительности.
И опять же производительности микроконтроллера наверняка не хватит, чтобы считать в реальном времени с десяток осей какого-нибудь более сложного устройства. Для Raspberry Pi это не будет большой задачей в принципе, т. к. в случае того же DMA у Raspberry Pi можно управлять выводами платы количеством до 64, т. е. это до 64 шаговых двигателей (за вычетом используемых внутри самой платы и небольшого числа пинов для выбора направления вращения). Есть ARM-процессоры и с большим количеством выводов.
А по поводу стоимости, в статье уже отмечалось, что Raspberri Pi Zero стоит $5 — и это целая плата. Плата с микроконтроллером будет стоить больше $1, и конечная разница все равно окажется смешной.8 июня 2017 в 23:16
0↑
↓
Наивное заблуждение считать DMA этаким детерминированным автоматом не потребляющим ресурсы.
DMA делит ту же шину AHB что и процессор и они между прочим могут там конфликтовать.
DMA замедляет работу процессора. А еще каналы DMA конфликтуют друг с другом.
Поскольку Raspberry Pi не проектировался для систем реального времени у меня большие сомнения что его DMA работает достаточно детерминированно и без сбоев при большом количестве каналов.
В любом случае даже DMA требует рано или поздно прерываний и тут детерминизму в Raspberry Pi придет конец.
Ну и наконец писать такие программы на Python это очень странно. В Pythone нет никаких средств наблюдения за регистрами процессора и периферии в реальном времени. Невозможно увидеть никаких внутренних переменных драйверов, нельзя оперативно менять содержимое регистров и т.д. и т.п. Это язык абсолютно оторванный от реального времени.
Для управления моторами есть прекрасные микроконтроллеры STM32, Kinetis и т.д.
Специально заточены, гораздо более гибкий и контролируемый DMA чем у Raspberry Pi, полная доступность всех регистров периферии и процессора в реальном времени, даже трассировка прерываний и исполнения кода. Жесткая детерминированность.
8 июня 2017 в 23:55
0↑
↓
А чем критична постоянная скорость для CNC? В том плане зачем требуется именно постоянная скорость? Ведь мы управляем подачей инструмента, а не скоростью вращения. Это же не 3д принтер где простой, с постоянной подачей пластика, может повлиять на геометрию фигуры.P.S. что случилось со статьей? Куда делись предыдущие комментарии?
9 июня 2017 в 00:07
0↑
↓
Здорово! Особенно заинтересовал сам ключевой момент — использование устройства как микро-компьютера с полным фаршем на борту и при том работа на самом низком низком уровне, необходимом для управления приводами и прочим электрическим добром. Т.е. доступ по локалке для обмена информацией стандартными средствами, без плясок с бубном. Нормальный Линукс, стандартные сервисы + управление сторонним железом и все одной платой.Как на ваш взгляд, какое ограничение (программное + аппаратное) имеет ваш подход к реализации, скажем большого количества каналов ШИМов и АЦП, скажем для управления N устройствами с парой ШИМ и тройкой АЦП на устройство?