5iMX宗旨:分享遥控模型兴趣爱好

5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)
楼主: scottmaxwell
打印 上一主题 下一主题

单片机 实现6轴联动控制 ,最高输出频率200K 可能吗

[复制链接]
21
发表于 2012-4-6 20:12 | 只看该作者
原帖由 3dbuild 于 2012-4-6 19:43 发表
你用伺服驱动就没办法了,是要这么高的输出频率
用我的方案,不需要M8来计算32位数据,由M168来做计算准备,把一长串脉冲拆分成最多255个脉冲,M8只负责输出脉冲,程序变得很简单,对于M168来说,处理时间比单CPU方 ...


我觉得没这个必要吧...
成本主要在光耦上面,MCU贵点一点问题都没有。
又不是大规模量产,这方面的成本没必要扣的这么死给自己找罪受。

欢迎继续阅读楼主其他信息

22
发表于 2012-4-6 20:16 | 只看该作者
原帖由 lvsoft 于 2012-4-6 20:12 发表


我觉得没这个必要吧...
成本主要在光耦上面,MCU贵点一点问题都没有。
又不是大规模量产,这方面的成本没必要扣的这么死给自己找罪受。


额,我忘了,这里最高200K,那也没必要像我那样用速度10M的光耦了,成本可以降低不少。
23
 楼主| 发表于 2012-4-6 20:19 | 只看该作者
原帖由 lvsoft 于 2012-4-6 20:16 发表


额,我忘了,这里最高200K,那也没必要像我那样用速度10M的光耦了,成本可以降低不少。

对的,高速光耦价格不便宜。
24
发表于 2012-4-6 20:25 | 只看该作者
这是在论战什么?坐板凳听。
25
发表于 2012-4-6 22:46 | 只看该作者
在我看来,这是不可能的,单片机的速度根本到不到要求。不要说200K,20K也不可能。
前天刚好用单片机做了一个小东西,相当于控制4轴输出,最高频率50hz,最低1hz,不仔细点还做不好。
26
发表于 2012-4-6 23:35 | 只看该作者
原帖由 scottmaxwell 于 2012-4-6 20:04 发表
AVR io口没有置位和清零寄存器,否则你就会影响其他位 所以要先读取8个io口的状态 ,这些都需要CPU 开销的


从这段话来看,觉得你要么没有对AVR的处理器做深入的了解,要么没理解我的算法。实际上不需要置位和清零寄存器,也不需要读8个IO口的状态,CPU只是输出,不用管它原来是什么状态,原来的状态是通过运算得到。例如,你可以把6轴的脉冲IO对应到PORTB的低6位,高2位不接输出,所以不用管,然后在中断程序里把一个寄存器变量A设为0,再按顺序判断每个IO是否需要拉高,是就置位,例如0位需要拉高,就A=0x1,接着如果第2位需要拉高,就A &= 0x2,如此把全部6个轴都处理完,变量A里得到一个6轴状态,然后用PORTB = A一条指令把6个轴的当次脉冲状态输出,完成后运行30条空指令延时1us以上,然后PORTB=0一条指令把6个轴的输出拉低,再退出中断程序。在这个过程中,如果某个轴当次不需要输出,则对应的输出脚会保持低电平,不会有问题。

这个算法的关键地方,是定时器要永远运行在最高的输出频率,例如100KHz,中断程序要处理各轴的累加状态和是否输出脉冲,这个过程全部是整数运算,中间会用到一些预先由上一个CPU算好的参数,来控制各轴在合适的脉冲个数输出脉冲,可以参考一下Bresenham直线算法与画圆算法的介绍:http://oldj.net/article/bresenham-algorithm/

熟悉PC开发然后再搞单片机的人,习惯于用1个CPU做全部的事情,这个在单片机的世界里是不太一样的,在需要的时候完全可以1个CPU专注一个事情,多个CPU协作以达到更高的性价比
27
发表于 2012-4-6 23:41 | 只看该作者
原帖由 cjseng 于 2012-4-6 22:46 发表
在我看来,这是不可能的,单片机的速度根本到不到要求。不要说200K,20K也不可能。
前天刚好用单片机做了一个小东西,相当于控制4轴输出,最高频率50hz,最低1hz,不仔细点还做不好。

RepRap里的Marlin固件可以用1个8位AVR CPU稳定输出10K的4轴脉冲驱动打印机,XY轴还带标准线性加减速控制,同时还在读SD卡,解释G代码,G代码还支持前向预读,可以在转向位置尽量保持恒定运动速度,还支持圆弧插补,读取和控制喷头温度和加热床温度,检测限位开关,还要和PC通讯,按你的说法是根本不可能的了,可是人家却做到了

[ 本帖最后由 3dbuild 于 2012-4-6 23:43 编辑 ]
28
发表于 2012-4-6 23:59 | 只看该作者
原帖由 3dbuild 于 2012-4-6 23:41 发表

RepRap里的Marlin固件可以用1个8位AVR CPU稳定输出10K的4轴脉冲驱动打印机,XY轴还带标准线性加减速控制,同时还在读SD卡,解释G代码,G代码还支持前向预读,可以在转向位置尽量保持恒定运动速度,还支持圆弧插补, ...


不是做不到...而是真心没啥意义,只要愿意堆精力,人总是能找出方法不断的压榨出硬件的潜力的。
很多搞开源的人喜欢给自己树立一个目标挑战下自己,
但是我还是希望还是能换个别的类型的目标...
29
 楼主| 发表于 2012-4-7 00:01 | 只看该作者
原帖由 3dbuild 于 2012-4-6 23:35 发表


从这段话来看,觉得你要么没有对AVR的处理器做深入的了解,要么没理解我的算法。实际上不需要置位和清零寄存器,也不需要读8个IO口的状态,CPU只是输出,不用管它原来是什么状态,原来的状态是通过运算得到。例如 ...


你这个讲的是最基础的只是  很多年前我就知道了  1你废了2个IO口   6轴输出  除了这个  还有方向也需要6个口,使能信号6个口,还有需要采集输入多个口,你认为你的单片机有几个口让你废,还有他这个是专用的   每个轴的脉冲数可以预先知道,这样也可以减小计算位数.
Bresenham 画直线运算我很多年年就研究过了 写GUI画直线函数.
30
发表于 2012-4-7 00:06 | 只看该作者
方向,使能,脉冲总共用3个8位IO口,一片M8就足够了,M8只管脉冲,有什么问题吗?其他的采集口用M168,感觉你还是在想着用1片CPU做全部事情

[ 本帖最后由 3dbuild 于 2012-4-7 00:07 编辑 ]
31
 楼主| 发表于 2012-4-7 00:08 | 只看该作者
原帖由 3dbuild 于 2012-4-6 23:41 发表

RepRap里的Marlin固件可以用1个8位AVR CPU稳定输出10K的4轴脉冲驱动打印机,XY轴还带标准线性加减速控制,同时还在读SD卡,解释G代码,G代码还支持前向预读,可以在转向位置尽量保持恒定运动速度,还支持圆弧插补, ...

RepRap本身的精度就不高,专用控制的 ,  10k 4轴  提高一下效率  或许是可以作到的 ,但是他肯定是有很多限制的,并不是通用的.
比如你用 其他  CAM 软件生成的G代码,根本就不能运行
32
发表于 2012-4-7 00:10 | 只看该作者
用8位单片机回应你这个主题的意思是,200K,用你的32位单片机,本来就不是做不到的事,只是没有人这么做,可能是商业上的原因,这个你要考虑清楚
33
发表于 2012-4-7 00:15 | 只看该作者
原帖由 scottmaxwell 于 2012-4-7 00:08 发表

RepRap本身的精度就不高,专用控制的 ,  10k 4轴  提高一下效率  或许是可以作到的 ,但是他肯定是有很多限制的,并不是通用的.
比如你用 其他  CAM 软件生成的G代码,根本就不能运行

RepRap精度不高是机械部分,电子部分没有精度这个说法,只有稳定性,而稳定性可能比MACH3还高或者维宏卡还高,RepRap的打印动不动就连续运行24小时的,中间一出错就全部报废,这个你可能不了解。至于通用性,没有东西是万能的,你做得再通用,也只是业余人士敢用,专业点的,例如木工加工中心,机加工中心,不可能用的,这个是商业定位问题,如果你有想法向这个方向发展,首先面对的就是一堆类似西门子之类的专业控制器,竞争不是一般的大
34
 楼主| 发表于 2012-4-7 00:20 | 只看该作者
原帖由 3dbuild 于 2012-4-7 00:06 发表
方向,使能,脉冲总共用3个8位IO口,一片M8就足够了,M8只管脉冲,有什么问题吗?其他的采集口用M168,感觉你还是在想着用1片CPU做全部事情

不要认为 你的2片AVR 性能会比一片高      一片PIC32的性能至少是 AVR 单片机的几十倍性能,数控插补软件算法没有几种,效率也就在那片,还有什么整数计算,这个是最基本的能力,如果需要快速运算,实时处理,还有浮点,除法,那你就什么都做不成了.
你认为单独的一片AVR可以处理接受数据  读取SD卡   我告诉你 有DMA的单片机  读取这个都不需要CPU干预的.
35
发表于 2012-4-7 00:25 | 只看该作者
原帖由 3dbuild 于 2012-4-6 23:41 发表

RepRap里的Marlin固件可以用1个8位AVR CPU稳定输出10K的4轴脉冲驱动打印机,XY轴还带标准线性加减速控制,同时还在读SD卡,解释G代码,G代码还支持前向预读,可以在转向位置尽量保持恒定运动速度,还支持圆弧插补, ...


走走停停当然做得到,实时插补还要200K绝对不可能。
36
 楼主| 发表于 2012-4-7 00:27 | 只看该作者
原帖由 3dbuild 于 2012-4-7 00:15 发表

RepRap精度不高是机械部分,电子部分没有精度这个说法,只有稳定性,而稳定性可能比MACH3还高或者维宏卡还高,RepRap的打印动不动就连续运行24小时的,中间一出错就全部报废,这个你可能不了解。至于通用性,没有东 ...

RepRap 很早就研究过的.
国外的电子开源项目,几乎都晚过  mega8 经典的开源就是控制32路舵机. 06 年的时候就仿制,改进过

[ 本帖最后由 scottmaxwell 于 2012-4-7 00:32 编辑 ]
37
发表于 2012-4-7 00:29 | 只看该作者
我好象从来都没有说过“2片AVR 性能会比一片高”?只是暗示"2片AVR价格比一片PIC32便宜几倍,而且可以做到类似的事情,前提是要求稍微降低一些"

遇到一些搞单片机开发的人,总是觉得8位的低级,觉得搞就得要搞32位的,最好还是ARM的,能跑Linux的更好,这才体现其专业水准。我不反对这个观点,能搞高级的肯定比只会低级的水平高,但是真正做项目时就未必用这个标准,而是要找最合适的,例如做个充电器,用32的合适还是8的合适?
38
发表于 2012-4-7 00:30 | 只看该作者
原帖由 cjseng 于 2012-4-7 00:25 发表


走走停停当然做得到,实时插补还要200K绝对不可能。


不是200K,Marlin是10K,连续的,不可能走走停停,走走停停会影响表面质量
39
发表于 2012-4-7 00:32 | 只看该作者
原帖由 scottmaxwell 于 2012-4-7 00:27 发表

RepRap 很早就研究过的


我感觉你有精力研究一下会比搞通用的好,RepRap硬件和软件发展都很快,比你“很早”的时候应该先进了不少,而且现在卖的都是暴利,你上网查一下价格
40
发表于 2012-4-7 00:37 | 只看该作者
原帖由 3dbuild 于 2012-4-7 00:30 发表


不是200K,Marlin是10K,连续的,不可能走走停停,走走停停会影响表面质量


能说明一下:RepRap里的Marlin固件可以用1个8位AVR CPU稳定输出10K的4轴信号是哪四轴吗?
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

【站内推荐】上一条 /1 下一条

快速回复 返回顶部 返回列表