搜索
bottom↓
回复: 156

STM32103C8控制步进驱动器的程序(脉冲+方向),可设置速度、加速度、减速度以及运动步数

  [复制链接]

出0入0汤圆

发表于 2009-10-14 20:04:14 | 显示全部楼层 |阅读模式
最近在论坛里发现很多网友问控制步进电机的方法,就想到把最近控制步进电机的项目程序发出来与大家交流。此程序经过实际测试,没有步进电机的朋友可以通过示波器查看输出脉冲频率变化过程。


MDK工程文件ourdev_491637.rar(文件大小:1.58M) (原文件名:motor.rar)

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2009-10-14 21:17:42 | 显示全部楼层
楼主能不能把思路讲解一下,看程序太麻烦了

出0入0汤圆

发表于 2009-10-14 22:59:50 | 显示全部楼层
不知你的驱动电路是怎么样的。

出0入0汤圆

发表于 2009-10-14 23:35:55 | 显示全部楼层
是啊, 原理图也能上下么?

出0入0汤圆

发表于 2009-10-15 07:05:15 | 显示全部楼层
感谢!

出0入0汤圆

发表于 2009-10-15 08:29:23 | 显示全部楼层
好东西

出0入0汤圆

发表于 2009-10-15 09:17:06 | 显示全部楼层
最近正在研究升降曲线

头痛啊

出0入0汤圆

发表于 2009-10-15 09:40:09 | 显示全部楼层
加减速我都是以1毫秒为单位加减,驱动步进也感觉不到振动!

出0入0汤圆

发表于 2009-10-15 09:40:52 | 显示全部楼层
加减速我都是以1毫秒为单位加减,驱动步进也感觉不到振动!

出0入0汤圆

发表于 2009-10-15 09:41:51 | 显示全部楼层
加减速我都是以1毫秒为单位加减,驱动步进也感觉不到振动!

出0入0汤圆

发表于 2009-10-15 10:11:49 | 显示全部楼层
电机 买来还没玩过呢

出0入0汤圆

发表于 2009-10-15 10:15:39 | 显示全部楼层
看看

出0入0汤圆

发表于 2009-10-15 11:23:07 | 显示全部楼层
最好加个原理图。

出0入0汤圆

发表于 2009-10-15 19:18:22 | 显示全部楼层
感谢!

出0入0汤圆

 楼主| 发表于 2009-10-16 08:21:52 | 显示全部楼层
我就是在STM32最小系统上引出两条I/O线到步进驱动器,算法都是参考AVR446应用笔记的,原理图如下:
详细说明在用户程序Readme记事本里





原理图 (原文件名:原理图.JPG)

出0入0汤圆

 楼主| 发表于 2009-10-16 08:29:13 | 显示全部楼层
上图中的PUL-和DIR-接GND,STM32的两个引脚分别接PUL+和DIR+。

出0入0汤圆

发表于 2009-10-16 21:50:33 | 显示全部楼层
我来向大家介绍比较先进的几款步进芯片产品吧
**这些芯片产品是德国TRINANMIC公司的产品,在欧美很流行 刚刚进入中国市场
***集成步进控制+驱动功能的芯片TMC211(LIN通讯);TMC222;TMC223
内部结构如下

(原文件名:1.gif)


(原文件名:3.gif)


(原文件名:6.gif)

出0入0汤圆

发表于 2009-10-16 21:54:46 | 显示全部楼层
控制芯片TMC428,加速度,减速度,速度,位置等所有控制都不需要在MCU上完成了,都由这个芯片来完成


(原文件名:2.gif)


(原文件名:3.gif)

TMC428芯片还可以用来开发多轴控制卡step/dir控制信号输出


(原文件名:step-dir.gif)

出0入0汤圆

发表于 2009-10-16 22:01:50 | 显示全部楼层
驱动芯片TMC236(MOSFET管内置,驱动电流1.5A);TMC246(MOSFET管内置,驱动电流1.5A;带有专利技术stallguard失速检测功能可以避免超载,丢步);TMC239(MOSFET管外置);TMC249(MOSFET管外置;带有专利技术stallguard失速检测功能可以避免超载,丢步)
所有这些芯片低功耗设计不需要散热器,体积可以做的很小.

(原文件名:246.gif)


(原文件名:TMC246.gif)


(原文件名:TMC249.gif)

出0入0汤圆

发表于 2009-10-16 22:04:27 | 显示全部楼层
三相步进电机驱动器带有编码器反馈接受

(原文件名:TMC332-1.gif)


(原文件名:TMC332.gif)

出0入0汤圆

发表于 2009-10-16 22:07:53 | 显示全部楼层
使用MCU+TMC428+TMC246/249/236/239方式开发出来的控制+驱动卡

(原文件名:2.gif)


(原文件名:3.gif)


(原文件名:4.gif)


(原文件名:6.gif)

出0入0汤圆

发表于 2009-10-16 22:12:12 | 显示全部楼层
*********未完 代续********
下次主要以技术为主,包括为大家提供详细的电路图.
各芯片的详细资料请登陆:http://www.trinamic.com/tmc/render.php?sess_pid=152

出0入0汤圆

发表于 2009-10-17 13:29:57 | 显示全部楼层
楼主的这个貌似和我要做的差不多,但是不知道楼主的设计思路,步进电机的加速过程,启动,最高频率,加速过程的时间,以及曲线。这些我都不知道,STM32写的程序我都看不懂,呵呵!

出0入0汤圆

 楼主| 发表于 2009-10-17 21:16:59 | 显示全部楼层
那我就从今天开始详细介绍加速度、减速度、速度的控制算法。程序控制流程如下:
1、首先根据程序的步数判断运动方向,然后输出控制方向的引脚电平;
2、根据希望的速度值计算出最小步进时间间隔: speed_para.min_delay = A_T_x100 / speed; (结果为16位定时器的比较匹配值)
3、根据加速度计算初始步延时:speed_para.step_delay = (T1_FREQ_148 * sqrt(A_SQ / accel))/100;
4、计算出加速到希望速度所需要的步数accel_lim = ((long)step*decel) / (accel+decel);;
5、再根据减速度计算出必须开始减速时刻的步数;para_speed.decel_val = -((long)max_s_lim*accel)/decel;
6、比较第4、5步骤计算的大小关系判断运动曲线是梯形(到达希望速度值匀速运行一段时间再开始减速)还是三角形(加速未完成就必须开始减速);

待续~~~~~~

出0入0汤圆

发表于 2009-10-18 10:31:30 | 显示全部楼层
看了LZ的回复,稍微了解点,但是有点小疑问,LZ的这个是用在什么场合的能说说吗?
貌似LZ的项目是用在控制步进电机的这样场合,要输入步进电机要走一定的距离或者脉冲数(输入时带方向),再输入相应的速度等级后由软件自动计算识别后再处理并输出脉冲,等于是一个已知函数(就是知道要做什么,再去处理并相应相应做事情的方法)。不知道是否可以这样理解。
另外LZ能否说下,你的速度等级最低和最高为多少频率;当你运行在梯形曲线时,速度要求加到最高时,你的启动频率到最高频率的时间间隔需要多少时间(主要为了消除一些失步,抖动等原因吧);当你运行在你所谓的三角形时,你的输出脉冲应该比较少,就是还没有到最高速度就应该减速运行了。
谢谢LZ的帮助。

出0入0汤圆

发表于 2009-10-18 13:10:28 | 显示全部楼层
关注,

出0入0汤圆

发表于 2009-10-18 13:22:18 | 显示全部楼层
标记
头像被屏蔽

出0入0汤圆

发表于 2009-10-18 13:30:41 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2009-10-20 10:43:08 | 显示全部楼层
顶一下!

出0入0汤圆

 楼主| 发表于 2009-10-21 20:18:25 | 显示全部楼层
回28楼:
我这个程序用在控制步进电机定位上的,正在调试带编码器反馈处理的程序。
程序中的速度单位0.01*rad/s,加速度、减速度单位是00.1rad/s^2。因此程序中速度speed=1000时实际上是1000*0.01rad/s,=10rad/s;换算为转/分=10/(2π)*60=95.5r/min。
参数范围:加减速为71~32000;速度的话一般步进电机空载9000就丢步了,所以最好是12~6000;

备注:将速度、加速度、减速度乘以100后再进行计算是为了消除浮点数运算,毕竟8位AVR运算浮点数是搞不定的。

出0入0汤圆

发表于 2009-10-24 20:59:13 | 显示全部楼层
期待 楼主的编码器反馈.....

出0入0汤圆

发表于 2009-10-24 21:05:46 | 显示全部楼层
请问楼主:如果中途改变速度或者改变步数怎么办?

出0入0汤圆

发表于 2009-10-25 09:53:09 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2009-10-25 16:45:32 | 显示全部楼层
回31楼:如果中途改变速度或者改变步数怎么办?

途中改变一次速度或步数通过修改程序可以做到,但是要实时调整速度的话不建议用此方法,容易计算出错。

出0入0汤圆

发表于 2009-10-25 20:18:27 | 显示全部楼层
回答:如果中途改变速度或者改变步数怎么办?
在普通的设计方案中,如果在运动过程中更改速度,目标位置,细分的话运动结果肯定会出错,因为从MCU到驱动这一块是单向的控制输出,而德国TRINAMIC的设计思路采用的是内部闭环控制,MCU每次发送指令给驱动的时候驱动会将电机的信息打包发送给MCU,所以使用TMC开发的控制驱动可以在运动过程中随意更改速度,目标位置,甚至是细分,

(原文件名:gg.jpg)
下面的几个图介绍的就是在电机运动过程中随意更改目标位置,电机会即时响应,而其他控制器必须要第一个目标位置到达之后才能再运行第二个目标位置
在匀速时候更改目标位置;在减速过程中改变目标位置;在加速过程中改变目标位置

(原文件名:5.gif)

出0入0汤圆

发表于 2009-10-25 20:44:17 | 显示全部楼层
看到LS有一个内部闭环控制的理念,LZ是否可以参照一下,改进你的驱动算法呢?

当然,LS能否把内部闭环控制具体是怎么实现的,和大家一起分享一下.这样也可以提高国内工程师的设计水平,说的大一些,就是提高我们国家的步进电机的驱动设计和应用水平.
可以吗?

出0入0汤圆

发表于 2009-10-26 13:09:56 | 显示全部楼层
前几天买了一套电机+驱动器,可以实现正常的运行,但是还有很多的问题需要不断的调试和查点资料,我觉得在途中改变速度的话需要一个函数来计算,但好像很少会如此操作吧。。。

出0入0汤圆

发表于 2009-11-24 20:40:28 | 显示全部楼层
期待ing!

出0入0汤圆

发表于 2009-12-18 14:20:08 | 显示全部楼层
好贴,出差在外没看到,希望楼主继续

出0入0汤圆

发表于 2010-4-1 23:33:45 | 显示全部楼层
楼主的帖子真是及时雨啊

出0入0汤圆

发表于 2010-4-10 00:15:59 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-5-17 23:05:30 | 显示全部楼层
谢谢了,有空研究研究

出0入0汤圆

发表于 2010-8-21 08:32:39 | 显示全部楼层
大清早起来顶贴

出0入0汤圆

发表于 2010-8-21 10:52:57 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-13 07:33:43 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-13 08:03:21 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-13 08:09:49 | 显示全部楼层
看看先

出0入0汤圆

发表于 2010-11-13 08:15:55 | 显示全部楼层
回复【14楼】shenhaojj
-----------------------------------------------------------------------

这个跟我上面买的那个集成的步进电机控制接口差不多,直接光耦隔离。

出0入0汤圆

发表于 2010-11-13 16:03:42 | 显示全部楼层
步进电机的闭环控制方法可以通过下面的方式实现:
MCU+TMC428(或)429+TMC424+电机+编码器

(原文件名:2.jpg)
www.trinamic.com

出0入0汤圆

发表于 2010-11-14 07:24:35 | 显示全部楼层
mark

出75入4汤圆

发表于 2010-11-14 09:34:57 | 显示全部楼层
这个要看看。

出0入0汤圆

发表于 2010-11-27 10:47:09 | 显示全部楼层
学习

出0入0汤圆

发表于 2010-11-30 16:53:55 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-14 21:53:38 | 显示全部楼层
有兴趣  继续关注

出0入0汤圆

发表于 2010-12-22 09:56:24 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-1 11:48:39 | 显示全部楼层
学习。。。。

出0入0汤圆

发表于 2011-1-1 20:05:36 | 显示全部楼层
参考一下

出0入0汤圆

发表于 2011-1-2 10:27:22 | 显示全部楼层
mark一下

出0入0汤圆

发表于 2011-1-6 15:22:06 | 显示全部楼层
mark一下

出0入0汤圆

发表于 2011-1-6 19:55:24 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-7 21:40:43 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-18 17:22:25 | 显示全部楼层
回复【23楼】shenhaojj
-----------------------------------------------------------------------

楼主能否留下联系方式;我也在做这方面的,
QQ:993891405
tele:13066921676

出0入0汤圆

发表于 2011-1-21 16:05:04 | 显示全部楼层
做个记号

出0入0汤圆

发表于 2011-1-23 14:50:59 | 显示全部楼层
lz采用了rtos的思想,定时器中断作为基准,

出0入0汤圆

发表于 2011-1-23 15:06:09 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-1-23 20:00:25 | 显示全部楼层
回复【63楼】winkle
lz采用了rtos的思想,定时器中断作为基准,
-----------------------------------------------------------------------
补充: 采用基于定时器中断的多任务非抢占式轮循程序架构.

出0入0汤圆

发表于 2011-1-23 20:00:35 | 显示全部楼层
回复【63楼】winkle
lz采用了rtos的思想,定时器中断作为基准,
-----------------------------------------------------------------------
补充: 采用基于定时器中断的多任务非抢占式轮循程序架构.

出0入0汤圆

发表于 2011-1-23 21:36:33 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-3-11 17:32:05 | 显示全部楼层
楼主是好人。

出0入0汤圆

发表于 2011-3-11 17:56:06 | 显示全部楼层
接触到,抽空看

出0入0汤圆

发表于 2011-3-11 18:23:59 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-3-14 15:26:55 | 显示全部楼层
TRINAMIC真是让我无语。那都能看见他!我代表部分网友抗议你的无处不在的广告!

出0入0汤圆

发表于 2011-3-15 21:20:10 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-3-17 11:26:20 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-5-8 03:42:17 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-11 14:46:11 | 显示全部楼层
谢谢楼主的分享!

出0入0汤圆

发表于 2011-5-26 15:11:32 | 显示全部楼层
STM32103C8控制步进驱动器的程序 不错啊

出0入0汤圆

发表于 2011-6-8 23:13:39 | 显示全部楼层
STM32103C8控制步进驱动器的程序(脉冲+方向),可设置速度、加速度、减速度以及运动步数

出0入0汤圆

发表于 2011-6-8 23:34:51 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-6-12 21:00:39 | 显示全部楼层
正想学这种!!学习中!!

出0入0汤圆

发表于 2011-6-14 00:12:39 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-6-14 09:44:45 | 显示全部楼层
Mark!

出0入0汤圆

发表于 2011-6-14 17:13:40 | 显示全部楼层
Mark

出0入0汤圆

发表于 2011-9-16 00:02:09 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-8 14:42:31 | 显示全部楼层
lz ,程序总是下不下来,能发我下吗?280204311@QQ.com

出0入0汤圆

发表于 2011-10-8 22:42:23 | 显示全部楼层
MARK

出0入42汤圆

发表于 2011-10-8 22:47:58 | 显示全部楼层
顶顶

出0入0汤圆

发表于 2011-10-8 23:07:49 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-9 12:34:43 | 显示全部楼层
正需要哦,谢谢

出0入0汤圆

发表于 2011-10-9 14:10:14 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-9 17:02:16 | 显示全部楼层
请问楼主,#define SPR 1600,这里的SPR是代表什么?

出0入0汤圆

发表于 2011-10-18 08:19:13 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-19 17:30:18 | 显示全部楼层
mark关注一下

出0入0汤圆

发表于 2011-11-28 11:10:24 | 显示全部楼层
关注中,

出0入0汤圆

发表于 2011-11-28 11:19:23 | 显示全部楼层
记号。

出0入0汤圆

发表于 2011-12-3 22:06:03 | 显示全部楼层
请问楼主,#define匀倀刀1600,这里的SPR是代表什么?

出0入0汤圆

发表于 2011-12-3 22:45:37 | 显示全部楼层
强力支持!

出0入0汤圆

发表于 2011-12-4 09:04:57 | 显示全部楼层
留个记号再看

出0入0汤圆

发表于 2011-12-27 13:38:33 | 显示全部楼层
最近也在坐一个一样的,学习下。

出0入0汤圆

发表于 2011-12-28 11:03:25 | 显示全部楼层
先mARK下吧,以后再看
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 20:59

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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