STM32 控制7个步进电机

2019-10-15 18:05发布

7个步进电机有驱动器,STM32只输出脉冲和方向就可以了。每个电机都有位移要求,用定时器发脉冲的话,脉冲数控制不够用。每一个电机的脉冲数控制需要2个定时器,7个的话就要14个。没有这么多的?我看见别人的控制板上用的芯片是STM32F103VCT6,也没有这篸多的定时器。我的思路有问题?哪位指点一下
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
46条回答
1楼-- · 2019-10-20 19:54
MARK============
pathfinder
2楼-- · 2019-10-20 22:25
按照这个意思,我觉得“一个定时器+RAM”的模式
pathfinder
3楼-- · 2019-10-21 02:38
 精彩回答 2  元偷偷看……
wyudcl
4楼-- · 2019-10-21 06:49
就是64脚的32,,6个298就能实现
破隆冬之晓
5楼-- · 2019-10-21 09:08
 一个定时器中断就行。我们做过控制两个个步进电机的就是省赛。

[mw_shl_code=c,true] void task1(int i) { switch(i) { case 1:A1A2;break; case 2:B1B2;break; case 3:A2A1;break; case 4:B2B1;break; } } void task2(int i) { switch(i) { case 12D1;break; case 2:C2C1;break; case 31D2;break; case 4:C1C2;break; } } [/mw_shl_code] 这里是两个电机的驱动函数,D2D1等就是一个控制信号的宏定义
[mw_shl_code=c,true]void TimingDelay_Decrement() { if (task1_time!= 0x00) { task1_time--; } else work_flag_1=1; if (task2_time!= 0x00) { task2_time--; } else work_flag_2=1; }[/mw_shl_code] [mw_shl_code=c,true]void work1() { if(work_flag_1) { if ((++task1flag)>4) task1flag=1; task1(task1flag); work_flag_1=0; task1_time=task1_time_conf; } } void work2() { if(work_flag_2) { if ((++task2flag)>4) task2flag=1; task2(task2flag); work_flag_2=0; task2_time=task2_time_conf; } } [/mw_shl_code] 这个是工作函数
然后你只需啊修改这个task2_time,和task1_time的参数就可以控制转的快慢,执行一次work函数走一步。
哎。。有时间了开个贴说说这个吧。。这个自己想的


2013的弹子球
6楼-- · 2019-10-21 12:18
一个定时器就能控制一路,STM32F103VE总共有八个定时器,能输出PWM的有六个,就可以控制六路电机,实现加减速和定位控制,最高可达2MHz

一周热门 更多>