OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 19660|回复: 34

STM32控制二相步进电机的驱动程序(串口CRC校验、有步进细分、指数加速等算法)

[复制链接]

16

主题

189

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1296
金钱
1296
注册时间
2013-8-27
在线时间
503 小时
发表于 2014-12-24 08:40:03 | 显示全部楼层 |阅读模式
[mw_shl_code=c,true]/****************************************************************************** *????????:static void Motor1PointerControl(void) *???????÷:???ú1???????? *????????:?? *????????:?? *******************************************************************************/ static void Motor1PointerControl(void) //100us*32 == 3.2ms LOOP in Time0 { static u16 iStop = 0; //???? //----------------------------------------------------------------------DmxFinedataUser if ((Motor1_postion_Current == Motor1_postion_user)&&(!MotorXSpeedPos)) //?????±?°?????????è???????°??????????0 { //?????±?°???????????§?????????????ú?????? Motor1_user_postion_gap = 0; //???§?¨????????0 Motor1_dynamic_postion_gap = 0; //?????¨????????0 LineFlag = 2; //1 ???? 0 ???? 2 ???? (????) //-----------?????±?????????¨???????????ú??????±?---------------------------- if (iStop > 30) //655us/2*500 ?????±???÷????????1/4 {//????????2?????????÷???? Current_Attenuation(2); //???????ú???÷???????????? DECAY = 0; //???????ú???????÷?????????? TIM3->CCR2 = SinDataA[MotorPositionPointer]>>0; //Sin?¨??????A TIM3->CCR1 = SinDataB[MotorPositionPointer]>>0; //Sin?¨??????B TIM3->CCR4 = CosDataC[MotorPositionPointer]>>0; //Sin?¨??????C TIM3->CCR3 = CosDataD[MotorPositionPointer]>>0; //Sin?¨??????D } else { iStop++; //?????ó???÷???????? Current_Attenuation(1); //???????ú???÷???????????? DECAY = 0; //???????ú???????÷?????????? } } else { iStop = 0; //???????????? if (DecayXCurrentFlag) //?????±?°???÷????±ê??=1 { //??°???????2 Current_Attenuation(2); //???????ú???÷???????????? DECAY = 0; //???????ú???????÷?????????? TIM3->CCR2 = SinDataA[MotorPositionPointer]>>0; //Sin?¨??????A TIM3->CCR1 = SinDataB[MotorPositionPointer]>>0; //Sin?¨??????B TIM3->CCR4 = CosDataC[MotorPositionPointer]>>0; //Sin?¨??????C TIM3->CCR3 = CosDataD[MotorPositionPointer]>>0; //Sin?¨??????D } else { //·??ò???????????? Current_Attenuation(1); //???????ú???÷???????????? DECAY = 1; //???????ú???????÷?????????? TIM3->CCR2 = SinDataA[MotorPositionPointer]>>0; //Sin?¨??????A TIM3->CCR1 = SinDataB[MotorPositionPointer]>>0; //Sin?¨??????B TIM3->CCR4 = CosDataC[MotorPositionPointer]>>0; //Sin?¨??????C TIM3->CCR3 = CosDataD[MotorPositionPointer]>>0; //Sin?¨??????D } //---------??·?×?????----------------------------------------- if (Motor1_dir == 1) //???§??????·??ò ?????ò?± { Motor1_dir_Current = 1; //???ú?±?°·??ò??1???ò } else //???§??????·??ò ??·??ò?± { Motor1_dir_Current = 0; //???ú?±?°·??ò??0·??ò } //------------------------------------------------------------ if (Motor1_dir_Current == YES) //???????????ú ???ò×??? { //?????ò????×??? ???¨×??? MotorPositionPointer += MaxStep; //16*2; //???????ú??????????16 CounterMotorXStepPostionCurrent += 1; //???????ú?¨????????1 //-------------×??ê?????????ú????1024??????------------------------ if (MotorPositionPointer >= 1024) //?????????ó??1024?????? { MotorPositionPointer = 0; //??????????×??????ú?? } } else //·??ò???????????ú ·??ò×??? { MotorPositionPointer -= MaxStep; //16*2; //???????ú??????????16 CounterMotorXStepPostionCurrent -= 1; //???????ú?¨????????1 //-------------------------------------------------- if (MotorPositionPointer <= 0) //????????????????0????×??ó1024 { MotorPositionPointer = 1024; //???????????ú????×??ó?????? } } } //--------------------------------------------------------------------------------------------------------------- Motor1_postion_Current = CounterMotorXStepPostionCurrent; //°????????????±?°?????????÷ //?±?°×????ì?? ??????×????????÷ ?????±?°×??? //--------------------------------------------------------------------------------------------------------------- }[/mw_shl_code]

在淘宝上买的快300大洋的步进电机驱动,我把它精简成只有一路步进电机的驱动程序,还自己写了一个上位机软件通过串口来控制电机的粗调和细调功能,现在来原子贵坛分享下!
不过还有一个问题就是速度还不能满足我的项目需求,想调节步进电机的速度指数曲线的数组但是不懂怎么生成?
还望有做过的大神不吝赐教,谢谢!

精简步进电机驱动2014-12-22更新.zip

3.93 MB, 下载次数: 21862

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

55

主题

243

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1608
金钱
1608
注册时间
2012-12-30
在线时间
241 小时
发表于 2014-12-24 11:19:58 | 显示全部楼层
想要速度更快 这个速度指数曲线数组就是改变定时中断 也就是给步进电机的脉冲频率 但是由于你是固定细分为16 所以你想要更快就必须定时中断的更快
回复 支持 反对

使用道具 举报

16

主题

189

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1296
金钱
1296
注册时间
2013-8-27
在线时间
503 小时
 楼主| 发表于 2014-12-24 15:28:24 | 显示全部楼层
回复【2楼】wgh1990:
---------------------------------
 我也知道是改变那个指数曲线的数据,但是不知道那数据怎么计算出来的?有没有C语言的计算公式,还望大神帮帮我
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-12-24 19:03:18 | 显示全部楼层
不错,谢谢分享。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

16

主题

189

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1296
金钱
1296
注册时间
2013-8-27
在线时间
503 小时
 楼主| 发表于 2014-12-25 08:26:15 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
谢谢原子支持!
回复 支持 反对

使用道具 举报

19

主题

199

帖子

0

精华

高级会员

Rank: 4

积分
512
金钱
512
注册时间
2012-11-18
在线时间
72 小时
发表于 2014-12-26 10:15:37 | 显示全部楼层
楼主:程序和电路对不上。
        BI0 = 0;         BI1 = 0;         AI0 = 0;         AI1 = 0;  电路呢?不理解。
回复 支持 反对

使用道具 举报

16

主题

189

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1296
金钱
1296
注册时间
2013-8-27
在线时间
503 小时
 楼主| 发表于 2014-12-26 10:18:22 | 显示全部楼层
回复【6楼】lansing1648:
---------------------------------
不好意思这是我现在项目用的芯片暂时不能公开但跟L6205芯片是兼容的,那些引脚定义你留着或删除都不影响步进电机的算法控制的~
回复 支持 反对

使用道具 举报

19

主题

199

帖子

0

精华

高级会员

Rank: 4

积分
512
金钱
512
注册时间
2012-11-18
在线时间
72 小时
发表于 2014-12-26 10:32:38 | 显示全部楼层
回复【7楼】潜龙探渊:
---------------------------------
好的,楼主是做自动化设备么?
回复 支持 反对

使用道具 举报

16

主题

189

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1296
金钱
1296
注册时间
2013-8-27
在线时间
503 小时
 楼主| 发表于 2014-12-26 10:41:27 | 显示全部楼层
回复【8楼】lansing1648:
---------------------------------
不是
回复 支持 反对

使用道具 举报

3

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2015-3-29
在线时间
7 小时
发表于 2015-5-13 22:00:35 | 显示全部楼层
楼主,请问这个能用在L298n驱动上吗?程序里感觉两个定时器没啥关联之处,TIM1哪里让TIM1延时了
回复 支持 反对

使用道具 举报

16

主题

189

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1296
金钱
1296
注册时间
2013-8-27
在线时间
503 小时
 楼主| 发表于 2015-7-25 11:37:11 | 显示全部楼层
回复【10楼】同志们辛苦了:
---------------------------------
两个定时器是配合使用的,一个定时器是产生四路PWM来使步进电机转动的,另一个定时器是控制步进电机转动的速度按照S曲线变化使步进电机不易失歩及提高运行速度的
回复 支持 反对

使用道具 举报

3

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2015-3-29
在线时间
7 小时
发表于 2015-7-27 16:52:45 | 显示全部楼层
回复【11楼】潜龙探渊:
---------------------------------
谢谢
回复 支持 反对

使用道具 举报

1

主题

18

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2013-2-19
在线时间
0 小时
发表于 2015-8-25 21:06:03 | 显示全部楼层
是淘宝那个店铺买的啊?完整的代码能发我一份吗?我QQ364105364,邮箱zhouwanbo19870224@126.com里面有无256细分或者更多细分,有无S型,指数型等加减速算法,望指教,谢谢---------------------------------
回复 支持 反对

使用道具 举报

1

主题

18

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2013-2-19
在线时间
0 小时
发表于 2015-8-25 21:06:31 | 显示全部楼层
回复【11楼】潜龙探渊:
---------------------------------

是淘宝那个店铺买的啊?完整的代码能发我一份吗?我QQ364105364,邮箱zhouwanbo19870224@126.com里面有无256细分或者更多细分,有无S型,指数型等加减速算法,望指教,谢谢---------------------------------
回复 支持 反对

使用道具 举报

1

主题

18

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2013-2-19
在线时间
0 小时
发表于 2015-8-25 22:49:30 | 显示全部楼层
L回复【3楼】潜龙探渊:
---------------------------------
楼主你联系方式是怎样的?私聊下。QQ多杀啊?一定和我联系下,多谢~~~我对步进电机细分,加减速很感兴趣
回复 支持 反对

使用道具 举报

3

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
139
金钱
139
注册时间
2013-1-12
在线时间
27 小时
发表于 2015-8-27 10:48:01 | 显示全部楼层
谢谢楼主分享!
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2015-12-2
在线时间
0 小时
发表于 2015-12-21 14:02:08 | 显示全部楼层
淘宝店的那个驱动源文件可以发一份给我学习吗
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2016-5-17
在线时间
0 小时
发表于 2016-5-17 16:24:14 | 显示全部楼层
潜龙探渊 发表于 2014-12-24 15:28
回复【2楼】wgh1990:
---------------------------------
&nbsp;我也知道是改变那个指数曲线的数据,但是不 ...

是淘宝那个店铺买的啊?完整的代码能发我一份吗?我QQ1035001501,邮箱1035001501@qq.com
回复 支持 反对

使用道具 举报

10

主题

92

帖子

0

精华

高级会员

Rank: 4

积分
837
金钱
837
注册时间
2016-5-13
在线时间
182 小时
发表于 2016-5-17 17:42:40 | 显示全部楼层
不错,多谢分享
相信自己,每一步都是在进步
回复 支持 反对

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2016-5-17
在线时间
41 小时
发表于 2016-6-3 23:01:33 | 显示全部楼层
谢谢分享,看看会用不。
回复 支持 反对

使用道具 举报

10

主题

147

帖子

0

精华

高级会员

Rank: 4

积分
602
金钱
602
注册时间
2015-7-11
在线时间
94 小时
发表于 2016-12-2 17:01:16 | 显示全部楼层
谢谢分享!!!!
回复 支持 反对

使用道具 举报

10

主题

147

帖子

0

精华

高级会员

Rank: 4

积分
602
金钱
602
注册时间
2015-7-11
在线时间
94 小时
发表于 2016-12-6 20:05:44 | 显示全部楼层
楼主没能理解你控制电机方向,求解答!!
回复 支持 反对

使用道具 举报

10

主题

147

帖子

0

精华

高级会员

Rank: 4

积分
602
金钱
602
注册时间
2015-7-11
在线时间
94 小时
发表于 2016-12-20 13:34:27 | 显示全部楼层
if (Motor1_user_postion_gap <= 8*MaxStep) //è&#231;1&#251;&#206;&#187;&#214;&#195;2&#238;&#214;μ&#188;&#228;&#184;&#244; <= 8±&#182;μ&#196;×&#238;′ó2&#189;êy  ==128
    {
        step_startstop = Motor1_user_postion_gap/MaxStep / 4; //&#198;&#244;í£2&#189;êy
    }
lz请问这样判断的目的是什么,新手,还请指导一下,谢谢您
回复 支持 反对

使用道具 举报

1

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2015-8-26
在线时间
20 小时
发表于 2017-4-25 17:21:05 | 显示全部楼层
感谢您的分享!!
学以致用!
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2017-3-14
在线时间
3 小时
发表于 2017-5-11 16:03:04 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2017-3-14
在线时间
3 小时
发表于 2017-5-11 16:03:34 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2017-4-2
在线时间
7 小时
发表于 2017-5-18 10:49:54 | 显示全部楼层
下载参考参考,谢谢分享
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2017-5-18
在线时间
5 小时
发表于 2017-5-18 12:50:57 | 显示全部楼层
下载来参考参考,多谢楼主分享
回复 支持 反对

使用道具 举报

226

主题

482

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1680
金钱
1680
注册时间
2012-4-10
在线时间
105 小时
发表于 2018-10-29 11:27:47 | 显示全部楼层
楼主现在做成功了吗。
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2015-8-28
在线时间
19 小时
发表于 2018-12-24 15:23:21 | 显示全部楼层
谢谢楼主
回复 支持 反对

使用道具 举报

16

主题

189

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1296
金钱
1296
注册时间
2013-8-27
在线时间
503 小时
 楼主| 发表于 2019-1-5 09:52:36 | 显示全部楼层

不用谢,账号丢了好久现在才找回来
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2019-7-29
在线时间
5 小时
发表于 2019-7-29 21:06:57 | 显示全部楼层
楼主,有DVR8825驱动步进电机的代码吗
回复 支持 反对

使用道具 举报

10

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2014-7-10
在线时间
51 小时
发表于 2019-12-13 09:00:33 | 显示全部楼层
谢楼主分享,我也正常学习这个。
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2020-8-2
在线时间
4 小时
发表于 2020-8-4 14:47:37 | 显示全部楼层

感谢分享
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2020-6-14
在线时间
3 小时
发表于 2021-9-9 21:59:56 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-2 20:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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