STM32 控制7个步进电机

2019-10-15 18:05发布

7个步进电机有驱动器,STM32只输出脉冲和方向就可以了。每个电机都有位移要求,用定时器发脉冲的话,脉冲数控制不够用。每一个电机的脉冲数控制需要2个定时器,7个的话就要14个。没有这么多的?我看见别人的控制板上用的芯片是STM32F103VCT6,也没有这篸多的定时器。我的思路有问题?哪位指点一下
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
46条回答
破隆冬之晓
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函数走一步。
哎。。有时间了开个贴说说这个吧。。这个自己想的


一周热门 更多>