[首发][原创]边干边写之——打造最小的步进控制和驱动电路(持续更新中)
kknd2012/11/19机械与工具 IP:山东
花了小半个月,做了个马达驱动电路,和一个二轴运动控制电路。。。

马达驱动可以驱动两个直流电机正反转和无级调速(相当于一个双电调)或一个两相四线步进电机,

步进电机只支持单4拍,双4拍和8拍方式,电流只有1A。。。

100_1020.jpg

运动控制可以完成直线和圆弧插补,
速度挺快的,
可惜为了适应不给力的驱动,
只好把速度降下来了。。。
实测用16细分驱动器能跑到单轴400RPM。
100_1031.jpg

半夜拍的视频,光线不好,凑和看吧。。。

点击此处查看视频
还差个步进驱动模块没焊,
只能看到X轴的情况。。。
循环跑这样的路线:

先跑一段X,再跑一段Y(X不转),再跑一段45度(X半速),然后跑了个整圆(X变速正反转)
+10  科创币    hx    2012/11/23 高高高高高质量发帖
+10  科创币    jrcsh    2012/11/24 神贴酝酿中.广告位招租
来自:仪器与装备 / 机械与工具
13
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
kknd 作者
12年2个月前 IP:未同步
471827
又焊了个驱动器,拍了段两轴联动的视频。。。

插补过程可以看出来了。。。

点击此处查看视频
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
kknd作者
12年2个月前 IP:未同步
471831
加减速控制成了问题。。。
51就是51,
空间和速度都成问题。。。

继续折腾。。。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
kknd作者
12年2个月前 IP:未同步
472689
总感觉步进电机运行异常,
估计是算法出问题,
可惜51上调试太不直观,
VB6写个程序仿真一下。。。
还真是出了问题。。。

111.jpg
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
kknd作者
12年2个月前 IP:未同步
472690
可惜这样看不出问题出在哪。。。
做个数据域测试。。。
112.jpg

看出来了,象限判断错误。。。
改改。。。
113.jpg

改错地方了,再改。。。
   114.jpg

这个差不多了,还有错误,继续改。。。
   115.jpg

这次对了。。。

试试效果。。。
   118.jpg
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
hx
12年2个月前 IP:未同步
472693
高高高高高质量发帖
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
kknd作者
12年2个月前 IP:未同步
472836
边模拟边开发。。。
搞定了第一个功能。。。
指哪打哪。。。
鼠标点到哪,步进电机走到哪。。。
可惜还不是G代码。。。
继续。。。

119.jpg
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
kknd作者
12年2个月前 IP:未同步
472945
再试试直线和曲线复合的效果。。。

120.jpg
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
kknd作者
12年2个月前 IP:未同步
472946
折腾梯形加速度曲线。。。
网上找了个Arduino源码
解析源码中的一个加速度曲线表。。。
看情况是个16位定时器的线性装定值表。。。
用65536除一下,然后画曲线看看什么样子。。。

121.jpg

不出所料,果然是线性拟合。。。
1K字节一个表太离谱了,
现在研究一下用什么算法动态生成这个数据更高效。。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
kknd作者
12年2个月前 IP:未同步
472954
采用最简单的方法进行了优化。。。
均匀抽取原表的1/10个元素,隔10个留一个,
留下25个数据,
表的规模减小了10倍,
每个表100个字节,2个表200字节,可以接受了。。。
从效果上看,比正规NC系统采用的7点甚至5点加速度控制已经精细多了。。。 122.jpg
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
jrcsh
12年2个月前 IP:未同步
472960
神贴酝酿中.广告位招租
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
kissjack
12年2个月前 IP:未同步
473097
我对lz做的产品很感兴趣,这里贡献一段动检测是否能达到指定速度的检测代码,稍微改改就能态生成加速曲线:
未命名.jpg
Public Function ComputePulse(ByVal Velo As Double, ByVal a As Double, ByVal d As Double, ByRef maxv As Double, ByRef PNum As Long, ByRef t As Double) As Boolean
Dim c0 As Long
Dim c1 As Long
Dim flag As Boolean

PNum = 1
c0 = 0.676 * Frequency * Sqr(2 * d / a) / 2
t = c0 * 2
flag = True

Do
c1 = c0 - c0 / (2 * PNum)
maxv = d / c1 * Frequency / 2
t = t + c1 * 2
PNum = PNum + 1

If c0 <> c1 Then
c0 = c1
Else
flag = False
End If
Loop Until maxv > Velo Or Not flag

PNum = PNum - 1
t = t / Frequency

ComputePulse = flag
End Function

其中Frequency是单片机运行频率。
c0 = 0.676 * Frequency * Sqr(2 * d / a) / 2是初值,除以2的原因是因为通常的步进电机驱动器都是一个脉冲前进一步,不是一个上升沿或者一个下降沿前进一步(除非用STK672-080的16细分模式)。
c1 = c0 - c0 / (2 * PNum)通过之前计算的结果得出下一次发出脉冲的间隔,更精确一点c1 = c0  - c0 * 2 / (4 * PNum - 1))
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
kknd作者
12年2个月前 IP:未同步
473229
回 11楼(kissjack) 的帖子
太好了,感谢兄弟分享!!
正在为这个发愁呢。。。
加速度控制需要前瞻算法,而且一下要预判几百到上千步,
STC有硬件乘除法,4周期,可惜是8位的。。。
正在努力优化预判功能。。。
在低速区预读足够的语句进行速度标定,
不然在转角和微小线段群的处理上将是个大问题。。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
kknd
学者 机友 笔友
文章
58
回复
1193
学术分
6
2009/08/20注册,1年4个月前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}