搜索
bottom↓
回复: 65

步进电机细分驱动学习记录

  [复制链接]

出0入8汤圆

发表于 2018-7-18 16:04:57 | 显示全部楼层 |阅读模式
因为项目需要,也是刚接触步进电机,所以对细分的概念也不懂,网上找了些资料,说真的,没有看懂,没办法,那就从最基本的开始学。

第一步,了解电机是怎么驱动的,这简单,资料多也能看懂。


上图就是一样最简单的步进电机驱动,就4拍,第1拍A+(A)通电,第2拍B+ (B)通电,第3拍A- (C)通电,第4拍B- (D)通电,每拍走90度,
这种驱动没人看不明白吧,我们写出来:
ABCD
1000                //第一拍
0100                //第二拍
0010                //第三拍
0001                //第四拍

本帖子中包含更多资源

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

x

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

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入8汤圆

 楼主| 发表于 2018-7-18 16:28:03 | 显示全部楼层
接下来,我们再看看8拍是怎么驱动的,

8拍:
ABCD
1000
1100
0100
0110
0010
0011
0001
1001


从节拍上看出,4拍的第一拍(1000)和第二拍(0100)之间加了一拍(1100),每拍本来走90度角现在成了45度角
4拍:


8拍的第二拍



看样子,在4拍是插入一拍角度就变成45度了,那么我们可否插入N拍来获取更小的角度呢?下面就是我想到的细分方法:
/*
细分方法:

beat 节拍-4拍
fraction 细分数-16细分

基础4拍

ABCD
1000
0100
0010
0001

A和B之间插入16拍,0x00
B和C之间插入16拍 0x10
C和D之间插入16拍 0x20
D和A之间插入16拍 0x30
A和B之间插入16拍,0x40

*/


今天就写到这吧,快下班了,而且贴子的标题不知道对不对,会不会封号。明天有空再写吧

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2018-7-18 23:27:28 | 显示全部楼层
前排就座,听老师讲课啦

出0入4汤圆

发表于 2018-7-18 23:37:58 来自手机 | 显示全部楼层
maek学习一下

出0入0汤圆

发表于 2018-7-19 07:19:36 来自手机 | 显示全部楼层
还有脉冲的驱动芯片,破一下

出0入8汤圆

 楼主| 发表于 2018-7-19 08:55:08 | 显示全部楼层

电机的转子为永磁体,当电流流过定子绕组时,定子绕组产生一矢量磁场。该磁场会带动转子旋转一角度,AB相线通上电,电机转了45度角,
可不可以说,AB绕组在相同的电压下做了相同的功?即然只要两相绕组加上电压相等直流就可以让转子向A(A-B)和B (B-A)各转向45度,直
流可以,那么加上脉冲(PWM)直流呢,是不是也有同样效果,下面来测试下:

从上图可以看出,用PWM也行。而且直流改成PWM后,功率变小了,但结果还是一样的。基于以上测试,如果VA = VB的电压,转子转到了
AB绕组中间的角度,如果VA>VB呢?

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2018-7-19 08:59:32 来自手机 | 显示全部楼层
开课啦               

出0入8汤圆

 楼主| 发表于 2018-7-19 09:14:40 | 显示全部楼层

A相的驱动PWM占空比大于B相的驱动PWM占空比,转子向A偏移了,VA<VB是不是转会向B偏移呢?

好了,那我知道了,改变AB两相驱动PWM的占空比就能改就转子转动的角度,这就是我做细分的基本理论。

今天就先写到这里吧,因为下面要写的内容先要做个实验,确认了以后再往下写。

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2018-7-19 10:39:52 | 显示全部楼层
路过学习,教程不错!

出0入8汤圆

 楼主| 发表于 2018-7-19 11:14:58 | 显示全部楼层

如果我们把电机转子旋转一周分成4个象限,基础4拍只要一拍就跑完一个象限角度。细分就是在每个象限中划分出N个区域。

所以要细分的话我们必须要在每个象限中插入多个节拍,插入节拍越多,细分数就越大,电机转动的角度就越小。
/*
细分方法:
beat 节拍-4拍
fraction 细分数-16细分
基础4拍
ABCD
1000
0100
0010
0001
A和B之间插入16拍,0x00
B和C之间插入16拍 0x10
C和D之间插入16拍 0x20
D和A之间插入16拍 0x30
A和B之间插入16拍,0x40
*/

#define MAX 16        //在基础4拍的16细分,一周4拍变成64拍,角度每一拍变成了原来的1/16.

#define AQ RA0
#define BQ RA1
#define CQ RA2
#define DQ RC0


//beat节拍,fraction细分分数,
void motor_drive(unsigned char beat, unsigned char fraction)
{
        static unsigned char index;
        switch (beat)       
        {
                case 0:        //1#象限
                        if (index<MAX-fraction)
                                AQ = 1;
                        else
                                AQ = 0;
                       
                        if (index < fraction)
                                BQ = 1;
                        else
                                BQ = 0;

                        if (++index>=MAX)
                                index=0;
                        CQ = 0; DQ = 0;
                break;
                case 1:
                        if (index<MAX-fraction)
                                BQ = 1;
                        else
                                BQ = 0;
                       
                        if (index < fraction)
                                CQ = 1;
                        else
                                CQ = 0;

                        if (++index>=MAX)
                                index=0;
                        AQ = 0; DQ = 0;
                break;
                case 2://2#象限
                        if (index<MAX-fraction)
                                CQ = 1;
                        else
                                CQ = 0;
                       
                        if (index < fraction)
                                DQ = 1;
                        else
                                DQ = 0;

                        if (++index>=MAX)
                                index=0;
                        AQ = 0; BQ = 0;
                break;
                case 3:
                        if (index<MAX-fraction)
                                DQ = 1;
                        else
                                DQ = 0;
                       
                        if (index < fraction)
                                AQ = 1;
                        else
                                AQ = 0;

                        if (++index>=MAX)
                                index=0;
                        BQ = 0; CQ = 0;
                break;
                default:        break;
               
        }
}


//那么我们可以电机的驱动频率周期性的调用motor_drive()函数就可以让电机走步或停止在一定的角度


        p = xf>>4;                        //xf节拍,如16拍,P是象限,x是细分角度对应节拍
        x = xf &0x0f;
        motor_drive(p, x);


上图是网上细出的细分曲线图


下面看下程序运时的PWM波形和对A相滤波后的结果

本帖子中包含更多资源

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

x

出20入26汤圆

发表于 2018-7-19 11:19:42 | 显示全部楼层
挺好的,突然了解到,感谢分享

出0入9汤圆

发表于 2018-7-19 11:37:29 | 显示全部楼层
还是不太明白。

出0入0汤圆

发表于 2018-7-19 12:19:48 来自手机 | 显示全部楼层
再讲解一下脉冲型点驱动芯片,给一个脉冲走一步

出45入29汤圆

发表于 2018-7-19 12:53:03 来自手机 | 显示全部楼层
本帖最后由 foric 于 2018-7-19 12:55 编辑

学习了,细分的,五线的做过吗?

出0入8汤圆

 楼主| 发表于 2018-7-19 13:06:04 | 显示全部楼层

我是用这种步进电机

本帖子中包含更多资源

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

x

出0入4汤圆

发表于 2018-7-19 14:24:20 | 显示全部楼层
楼主这个是5项单极的,如果按照你的分析,可以把那个蓝色的壳打开,在PCB上把公共的正极刻断。这样两组线圈用万用表不通。就是你想要的了。

出0入4汤圆

发表于 2018-7-19 14:25:23 | 显示全部楼层
而且这种减速电机你根本看不到走的角度。

出0入0汤圆

发表于 2018-7-19 14:34:15 | 显示全部楼层
終於了解步進電機細分的動作,謝謝

出0入8汤圆

 楼主| 发表于 2018-7-19 14:50:16 | 显示全部楼层
这是16细分运行时AB相线上的波形,只有双道通示波器,所以只能看两组波形。




下两组是测试电机运行视频
https://v.youku.com/v_show/id_XM ... j.8428770.3416059.1


https://v.youku.com/v_show/id_XM ... .listitem_page1.5~A

16细分后电机单步运行角度很小,不仔细看看不出转子在动。
16细分已够我现在项目使用要求,所以对细分不再做深入研究,到此为止!!

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2018-7-19 15:17:42 | 显示全部楼层
skype 发表于 2018-7-19 14:50
这是16细分运行时AB相线上的波形,只有双道通示波器,所以只能看两组波形。

LZ是否能打包上传仿真工程和代码?

出0入0汤圆

发表于 2018-7-19 16:19:32 | 显示全部楼层
深入浅出,好文。感谢

出0入0汤圆

发表于 2018-7-19 16:30:24 | 显示全部楼层
只会用,还没有了解过这么详细,不错不错

出0入0汤圆

发表于 2018-7-20 16:21:55 | 显示全部楼层
学习了,非常不错。

出0入0汤圆

发表于 2018-8-5 17:35:43 | 显示全部楼层
学习了,非常感谢

出0入0汤圆

发表于 2018-8-5 21:05:44 来自手机 | 显示全部楼层
电机转动的原理就是异性相吸同性相斥

出0入9汤圆

发表于 2018-8-10 08:28:59 来自手机 | 显示全部楼层
细分里是怎么控制电流大小的?也是通过PWM的占空比来调整?

出0入8汤圆

 楼主| 发表于 2018-8-10 10:16:00 | 显示全部楼层
这种是软件模拟细分,不支持电流控制。

出0入0汤圆

发表于 2018-11-2 09:36:25 | 显示全部楼层
gmyu 发表于 2018-7-19 14:24
楼主这个是5项单极的,如果按照你的分析,可以把那个蓝色的壳打开,在PCB上把公共的正极刻断。这样两组线圈 ...

5相还是4相?

出0入0汤圆

发表于 2018-11-2 10:11:14 | 显示全部楼层
mark下1!!!!!!!!!!!!!!!!

出1310入193汤圆

发表于 2018-11-2 10:15:15 | 显示全部楼层
通俗易懂 楼主在继续嘛

出0入0汤圆

发表于 2018-11-2 10:22:02 | 显示全部楼层
楼主这个ABCD  建议改成A+  B+  A-  B-   你图上根本没有CD   容易误解

出0入0汤圆

发表于 2018-11-2 10:41:50 | 显示全部楼层
学习一下  

出0入0汤圆

发表于 2018-11-2 10:42:30 来自手机 | 显示全部楼层
微芯有应用笔记和源代码。记住,欠的课是一定要补的。

出0入4汤圆

发表于 2018-11-2 11:01:29 | 显示全部楼层

打错字,五线四相。

出180入0汤圆

发表于 2018-11-2 13:49:34 | 显示全部楼层
写得真好理解详细

出0入0汤圆

发表于 2018-11-2 15:53:19 | 显示全部楼层
njhying 发表于 2018-11-2 10:42
微芯有应用笔记和源代码。记住,欠的课是一定要补的。

兄弟 麻烦给个链接 谢谢了

出0入0汤圆

发表于 2018-11-2 22:21:37 来自手机 | 显示全部楼层
示波器差评  这年头还在用两通道

出0入0汤圆

发表于 2018-11-2 23:35:54 | 显示全部楼层
深入浅出 x 2

出0入0汤圆

发表于 2018-12-5 18:18:54 来自手机 | 显示全部楼层
写得真好,谢谢

出0入0汤圆

发表于 2018-12-6 10:30:43 | 显示全部楼层
mark ,

出0入0汤圆

发表于 2018-12-7 19:28:03 | 显示全部楼层
厉害,跟着学习

出0入0汤圆

发表于 2019-2-21 11:54:04 | 显示全部楼层
njhying 发表于 2018-11-2 10:42
微芯有应用笔记和源代码。记住,欠的课是一定要补的。

哥们可以上传一下吗,没找到呀。

出0入0汤圆

发表于 2019-2-21 16:22:44 | 显示全部楼层
atonghua 发表于 2018-11-2 15:53
兄弟 麻烦给个链接 谢谢了

直接在官网下的应用笔记里找马达控制就行。

出0入4汤圆

发表于 2019-2-23 07:37:33 来自手机 | 显示全部楼层
学习了 赞一个

出0入0汤圆

发表于 2019-2-27 08:22:40 | 显示全部楼层
学习了,非常感谢

出0入0汤圆

发表于 2019-2-27 20:42:04 | 显示全部楼层
学习了.感谢LZ

出0入8汤圆

 楼主| 发表于 2019-2-28 10:15:28 | 显示全部楼层
有用就好,

出0入0汤圆

发表于 2019-4-30 09:47:32 | 显示全部楼层
讲解得通俗易懂啊

出0入0汤圆

发表于 2019-5-5 20:18:05 来自手机 | 显示全部楼层
通俗易懂,深入浅出,赞一个。

出0入0汤圆

发表于 2019-7-13 21:31:46 | 显示全部楼层
你步进电机细分弄出来了吗?

出0入0汤圆

发表于 2019-7-13 23:58:11 来自手机 | 显示全部楼层
好贴留名,用到的时候再看看^_^

出0入8汤圆

 楼主| 发表于 2019-7-18 09:11:48 | 显示全部楼层
shen-robot 发表于 2019-7-13 21:31
你步进电机细分弄出来了吗?

关键代码也给出了,目前我已用在发动机油门控制系统中了。

出0入0汤圆

发表于 2019-7-18 09:18:24 | 显示全部楼层
收藏备用,步进电机细分驱动

出0入0汤圆

发表于 2019-7-18 11:00:03 | 显示全部楼层
大佬能不能解释一下这段代码,index和MAX分别代表什么?其他地方都看懂了,这个代码部分没看懂
  1. void motor_drive(unsigned char beat, unsigned char fraction)
  2. {
  3.         static unsigned char index;
  4.         switch (beat)        
  5.         {
  6.                 case 0:        //1#象限
  7.                         if (index<MAX-fraction)
  8.                                 AQ = 1;
  9.                         else
  10.                                 AQ = 0;
  11.                         
  12.                         if (index < fraction)
  13.                                 BQ = 1;
  14.                         else
  15.                                 BQ = 0;

  16.                         if (++index>=MAX)
  17.                                 index=0;
  18.                         CQ = 0; DQ = 0;
  19.                 break;
  20.                 case 1:
  21.                         if (index<MAX-fraction)
  22.                                 BQ = 1;
  23.                         else
  24.                                 BQ = 0;
  25.                         
  26.                         if (index < fraction)
  27.                                 CQ = 1;
  28.                         else
  29.                                 CQ = 0;

  30.                         if (++index>=MAX)
  31.                                 index=0;
  32.                         AQ = 0; DQ = 0;
  33.                 break;
复制代码

出0入0汤圆

发表于 2019-7-18 11:36:48 | 显示全部楼层
讲的不错,是这么回事

出0入0汤圆

发表于 2019-7-18 12:04:40 | 显示全部楼层
学习了,非常不错

出0入0汤圆

发表于 2019-8-31 19:49:40 | 显示全部楼层
标记,细细看下。谢楼主

出0入0汤圆

发表于 2019-8-31 20:50:34 | 显示全部楼层
先标记一下

出0入0汤圆

发表于 2019-9-1 17:26:24 来自手机 | 显示全部楼层
讲的真好,多谢了!!!

出0入0汤圆

发表于 2019-9-1 18:01:26 | 显示全部楼层
终于了解细分过程,谢谢

出0入0汤圆

发表于 2019-11-2 13:13:34 | 显示全部楼层
我要仔细的学习学习。

出0入0汤圆

发表于 2021-5-8 12:04:32 | 显示全部楼层
       p = xf>>4;                        //xf节拍,如16拍,P是象限,x是细分角度对应节拍     
    x = xf &0x0f;        
motor_drive(p, x);


xf怎改变值,这部分如何调用

出100入101汤圆

发表于 2021-5-8 12:44:16 来自手机 | 显示全部楼层
谢谢,学习

出0入8汤圆

 楼主| 发表于 2021-5-8 12:45:11 | 显示全部楼层
chenfzg 发表于 2021-5-8 12:04
p = xf>>4;                        //xf节拍,如16拍,P是象限,x是细分角度对应节拍     
    x = ...

讲不清楚,你自己去体会,调用很简单。

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2021-5-14 22:22:53 | 显示全部楼层
正需要这方面的资料,多跟各位学习一下。

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-4-25 07:53

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

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