极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 97482|回复: 49

arduino产生脉冲控制工业用的步进电机?

[复制链接]
发表于 2013-6-15 08:49:14 | 显示全部楼层 |阅读模式
Arduino产生指定频率 和指定脉冲数 的脉冲控制工业用的步进电机驱动器 有人做过吗?给点思路

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2015-8-11 23:17:11 | 显示全部楼层
控制单路的比较简单,目前的驱动器都是只要输入脉冲就可以了,当然,直接用PWM输出也可以,频率在500HZ,但是要控制多路,程序就得想想办法了,我们是要控制脉冲的个数,频率不是最关心的,用PWM输出的脉冲只能是连续的,不好控制
回复 支持 0 反对 1

使用道具 举报

发表于 2013-6-15 11:32:23 | 显示全部楼层
同问,关注
回复 支持 反对

使用道具 举报

发表于 2013-6-15 12:57:16 | 显示全部楼层
有专门解释G代码的库
回复 支持 反对

使用道具 举报

发表于 2013-6-15 17:00:20 | 显示全部楼层
有谁能够详细说说吗?
回复 支持 反对

使用道具 举报

发表于 2013-6-15 20:13:16 | 显示全部楼层
这个是个说明书和一段C51的驱动程序,你在自己移植一下就OK了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-15 21:37:25 | 显示全部楼层
湖工电气 发表于 2013-6-15 20:13
这个是个说明书和一段C51的驱动程序,你在自己移植一下就OK了。

有人移植成ARDUINO了吗 我只会这个啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-15 21:42:04 | 显示全部楼层
  1. #include <REG52.H>
  2. #include <intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit PUL  = P1^0;          //脉冲输入端
  6. sbit DIR  = P1^1;          //方向控制端
  7. sbit ENBL = P1^2;          //使能端         
  8. uint num;
  9. /*xms*1ms毫秒延时函数*/
  10. void delay(uint xms)
  11. {        uint a,b;
  12.         for(a=xms;a>0;a--)
  13.                 for(b=110;b>0;b--);
  14. }
  15. void init()
  16. {
  17.         TMOD|= 0x01;                          //设置定时器0为工作方式1,16为定时器/计数器
  18.         TL0 = (65535-10)%256;                //设置定时初值
  19.         TH0 = (65535-10)/256;                //设置定时初值
  20.         ET0  = 1;                                      //开启定时器0中断
  21.         TR0  = 1;                                      //关闭定时器0
  22.         EA   = 1;
  23. }
  24. void main()
  25. {
  26.     init();
  27.         DIR  = 1;
  28.            ENBL = 1;
  29.         while(1)
  30.         {if(num==12800)
  31.                   {
  32.                     DIR=~DIR;
  33.                            num=0;
  34.                    TR0=0;
  35.                    delay(1000);
  36.                    TR0=1;
  37.                    }
  38.          }
  39.                
  40. }
  41. /*定时器0中断服务函数 */
  42. void T0_timer() interrupt 1               
  43. {
  44.         TL0 = (65535-10)%256;                //设置定时初值
  45.         TH0 = (65535-10)/256;                //设置定时初值
  46. //        TL0 = 0xEE;                //设置定时初值
  47. //        TH0 = 0xFF;                                  
  48.         PUL = ~PUL;
  49.         num++;
  50. }
复制代码
谁能帮忙移植下这段代码啊 51----ARDUINO
回复 支持 反对

使用道具 举报

发表于 2013-6-16 10:22:37 | 显示全部楼层
万马奔腾 发表于 2013-6-15 21:42
谁能帮忙移植下这段代码啊 51----ARDUINO

哥,这里说白了就是用定时器产生一定频率的方波,这个波就是输入到那个驱动器里面去的,在至于驱动器怎么把这个方波变为2相4线的混合步进电机的信号就是驱动器完成的了,这里我们只需要产生这个方波就可以了。DIR是控制方向的,ENBL是使能端,PUL就是单片机输出脉冲的引脚。至于什么计数那是便于计算电机转动角度的。你要做的就是用Arduino产生那个方波,什么时候电机换方向什么,时候关闭电机就看你的系统要求了。产生方波不一定要用定时器。Arduino我没有玩过,只是接触过,但是它的程序语言我看得懂。说了这么多,你再不会我就没有办法了。
回复 支持 反对

使用道具 举报

发表于 2013-6-16 10:39:30 | 显示全部楼层
没看明白
回复 支持 反对

使用道具 举报

发表于 2013-6-18 00:05:55 | 显示全部楼层
湖工电气 发表于 2013-6-16 10:22
哥,这里说白了就是用定时器产生一定频率的方波,这个波就是输入到那个驱动器里面去的,在至于驱动器怎么 ...

谢谢您指点迷津,受益非浅
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-18 09:35:27 来自手机 | 显示全部楼层
arduino数字口能接受的最高频率是多少,比如1000hz可以吗?
回复 支持 反对

使用道具 举报

发表于 2013-6-18 10:24:14 | 显示全部楼层
万马奔腾 发表于 2013-6-18 09:35
arduino数字口能接受的最高频率是多少,比如1000hz可以吗?

还能更快吧,如果用arduino原来的那个驱动步进电机的方式大约能到500hz,如果你用定时器的方式理论上到50khz都可以。我用的就是这种驱动器来驱动小铣床的xy两轴,目前最高的频率是10khz。
回复 支持 反对

使用道具 举报

发表于 2013-6-18 10:29:54 | 显示全部楼层
第一次发图片,也不知道操作的对不对

这个用的是microduino,控制单轴的实验。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2013-6-18 10:47:00 | 显示全部楼层
前后折腾了大约有半个月,现在已经用上了,准备再做些调整。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-18 19:31:29 | 显示全部楼层
rick_hou 发表于 2013-6-18 10:47
前后折腾了大约有半个月,现在已经用上了,准备再做些调整。

能否共享下你的代码啊? 用ARDUINO最大的缺点就是没有断电保持性存储器啊 比如我断电后原来的计数值就变了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-14 22:34 , Processed in 0.059448 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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