西西河

主题:发个小广告 linux, android 编程,电机控制 -- 雷达

共:💬19 🌺73 新:
全看分页树展 · 主题 跟帖
家园 谈谈我的方案

我之前在RPi上做过类似的东西,用来控制一个实验用的自动化平台,涉及步进电机和伺服电机的控制。这个是内部使用,代码不能公开,但是估摸设计的思路对你还是有帮助的。

首先我没用USB来控制。我个人的经验是USB在工控环境下可靠性太差。涉及USB的板载设计及布线要求深厚的经验,否则在有干扰的环境中经常性地随机丢连接。我自己缺乏这样的经验,在实际工作中我也发现过很多市售的组件设计不良,所以我能避开USB就避开USB。还有一个很重要地原因是很难或者不可能在USB上实现实时控制,因为这要求自行编写USB host controller的驱动,否则其他USB设备的中断请求会破坏程序实时性的保证。不过后一个原因不是主要原因,因为在我们的项目中PC发给RPi的命令并不要求实时,RPi控制电机的操作才是实时的。我是用以太网连接PC和RPi,然后RPi通过SPI和串口控制电机控制电路。

然后是控制程序。我选择LinuxCNC(EMC2)作为基础。这里我强烈推荐LinuxCNC,首先它实现了闭环控制的算法,我不需要从头写这一部分。然后就是它的一堆优点:开源,很容易移植到RPi上;有一堆模块,例如G-code的解码和多种图形控制界面;它也有一个良好的设计框架,实时部分和非实时部分有清晰的划分。基于LinuxCNC我只需要编写控制电机控制板的模块。

然后是电机控制。如果要求不高用RPi做软实时就行。网上很容易搜到为RPi编译Xenomai内核的教程。我为了省事,每一个电机用一块ARM单片机做硬实时,RPi通过SPI和ARM单片机通讯。然后RPi上跑一个控制界面,可以让用户通过web,或者通过telnet,控制自动化平台的运行。

通宝推:jent,
全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河