|
近来跟几个朋友一起玩,聊到工业机械化这个方向,于是用手上原来有的板子,朝着一个方向的设计,设计的目标方向是可以做到多轴联动。目前受限于硬件的资源,已经做到两轴联动了。我现在的方案上用到FPGA,所以理论上如果资源足够,再扩展几个轴是没有问题的。
首先整体描述一下我现在的方案
PC---->单片机----->FPGA---->步进电机驱动------->步进电机 or伺服
PC,其实不是好想用的,目前只是用来测试方案,因为用PC然后通过232连接控制板,这个调试比较省事,后面考虑用嵌入式的方案。目前在PC端,首先写了一个VB程序,在VB的程序上,主要想做运算和人机的数据交换。
上个界面
软件上可以直接修改速度,加速度,可以通过不同的控制方式来控制电机的运动,同时,软件提供一些测试例程,用于测试单片机和FPGA的性能。PC的程序不是重点,只是用于验证和调试算法。
接下来数据就通过232到了单片机上了。单机接收到PC的数据后,只要是做数据识别和把数据以及算法发送到FPGA,另外,FPGA在运动过程中,位置数据也可以通过单片来读取,再发送到PC,实时确定电机的位置。
单片接收到的数据发到FPGA后,可以分别配置FPGA内部的寄存器和运动状态。由于目前我所最求的联动并不需要达到数控车床等的要求,要求在同步的情况下,联动的轴可以匀加速-->匀速-->匀减速等动作协调。开始的时候先用ARM来做,尽管现在的arm速度很不错,但是要联动,加上不同轴以不同速度来实现平稳的加减速,感觉难度比较大,而且是动态变速,所以不能用查表的方式来做变速。说到运动控制,其实DSP是比较擅长,但是没有选用,因为不太熟悉,另外,如果后面要扩展编码盘和限位等的实现要求较高的使用,FPGA还是要用上的,所以先用FPGA来试验一下,所以就使用了这个现成的组合方式。
在FPGA为主导的情况,FPGA收到数据后,就根据要求产生PWM波形和检测计算。在电机的控制过程中,无非就是如何去“条理”这个PWM波形。看过一些朋友做这个pwm,通过ARM的定时器来做,然后变速就是用定时器+查表,表就是预先做好的定时器值,但是这些表都是固定的,也就是加减速就是一条固定了的“线段”,通常大家用得较多的就是"S曲线",既然我不用这个,当然是我现在的方案比我用arm的好,哈哈,能力问题。我是现在用FPGA来变速,pwm速度用DDS的方式实现的,每一路的电机就是用一个DDS模块,说白了DDS就是担当定时器的角色了。PC发过来的数据其中包含了一组了就是DDS的步进数据,然后FPGA的DDS模块就按照这个步进数据来进行变速,其实这个方式说白了就是DDS专用芯片的扫频方式(哈哈,这是我自己说而已哦,当初在匀变速我第一时间就是想到AD公司的AD98XX的DDS芯片,后面想了一下,其实可以自己做,后面实现出来发觉跟他们的有得比,所以觉得我自己的方式也算是扫频,哈),DDS和扫频我就不介绍了,准备电赛的哥们可以普及一下。
现在效果出来了,匀速,变速是小菜,电机同步没有问题,因为不同步可以PC的程序来搭救,但感觉还是有些不足,但不错的效果我有找不错有什么地方不妥。
后面想用ARM来取代PC和单片机,做个简单的脱机方案玩一下。
写了这么多,或者大家看懂了,又或者有更好的方案,那很好,其实我是想通过自己的做法,来得到大家更好的建议,是不是有个成语叫抛砖引玉啊。不管,反正有建议和方法都可以说说。
通过这个东东。我现在有个问题还在想,提出来如果有想法的朋友可以交流一下
1.因为VB我不擅长,我想问下,现在我是单片机不断发送位置数据,PC机一直在接受数据,就是不断接收就搞到PC好像要崩毁了,更不要说处理数据,当然PC可以用查询的方法来读取单片机的资料,但这样不算位置实时,所以想问一下,有没有办法让VB更好的数据处理方案。
2.有没有朋友用其他的芯片(ARM或者DSP)实现过上面FPGA实现的功能,或者更优的。其实我觉得DSP应该可以做得更好的,后面想试一下,但又当心电机个数一多就瓶颈。
最后再上一个板子的图吧,如下,比叫简单。这个只是控制板,要驱动电机还需要再电机和板子中间加驱动器。
附件是软件,有兴趣的朋友可以下来试一下,随便给点意见。
dianji.exe
(204 KB, 下载次数: 31)
dianji.exe
(204 KB, 下载次数: 31)
|
|