一个定时器中断就行。我们做过控制两个个步进电机的就是省赛。
[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 1  2D1;break;
case 2:C2C1;break;
case 3  1D2;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函数走一步。
哎。。有时间了开个贴说说这个吧。。这个自己想的
|