Mega64能同事控制4台步进电机动转吗?
以前没有做过涉及到控制电机的项目,对电机控制了解的甚少,最近一个项目,要用的四台步进电机,其中有三台同时工作,这三台中有两台工作情况相同,基本就是转120度停一下,然后再转120度再停,大概也就是1到2秒转一圈就行,但这两个电机不一定是同步运行,另一台步进电机的运动规迹是正转120度然后返转120度,然后再正转一120度,就这样往返运动下去,速度也不用太快,一秒内最多摆两次就可以。请各位前辈给指点一个,看看用什么方案,AVR单片机能胜任吗,用它的三个定时器,CTC模示,如要不行的话应该采用什么方案好呀,先谢谢各位了! 完全可以,1秒一圈也就是60转/分钟而已,只需一个定时器即可 谢谢楼上的,三台电机同时工作,要分别控制,一个定时器可以吗? 八个都可以.定时 一到就依此检测十个的状态. 有3个定时器,定时器1的两个比较器可以拆开用,这就4个了。如果有其他外设用到定时器,就必须整合使用了。
另,楼上的说一个定时器有点夸张了,项目是有4个电机的,如果只用一个定时器,控制电机的速度和长度比较吃力...... 定时到
第1个:switch (开关状态)
{ case 开:switch (位置)
{case 位置1:...
case 位置2:...
.....
}
case 关:...
.....
}
第2个:switch (开关状态)
{ case 开:switch (位置)
{case 位置1:...
case 位置2:...
.....
}
case 关:...
.....
}
第n个.......... 楼上的指的可能是直接驱动电机了,楼主应该是用了驱动器的。
另:步进电机控制要求实时性较高,这么驱动电机或者驱动器都是不可取的,电机运行起来效果不好...... 楼主所描述的速度较低,所以没有问题的
用一个定时器做时基,比如固定20us中断一次,再扩展多个软定时
//定时器中断处理
if (StepTime_1 != 0)
{
if (--StepTime_1 == 0)
{
StepTime_1 = SetTime_1; // 定时1 重装载
......
}
}
if (StepTime_2 != 0)
{
if (--StepTime_2 == 0)
{
StepTime_2 = SetTime_2; // 定时2 重装载
......
}
}
if (StepTime_3 != 0)
{
if (--StepTime_3 == 0)
{
StepTime_3 = SetTime_3; // 定时3 重装载
......
}
}
if (StepTime_4 != 0)
{
if (--StepTime_4 == 0)
{
StepTime_4 = SetTime_4; // 定时4 重装载
......
}
} 用软定时的方法可行,但是每个电机的速度毕竟就不是那么精确了。
当然,如果速度较慢,也没有这方面的要求的话可行,如果有高速,再涉及的到加减速的话就有问题了,限定了时基,就使得加速曲线的高速部分不会匀称了,以5000Hz为例,20us时基,需要10个软延时,他的最小上一步就是11个软延时,也就是4545Hz,跳动太大了。
只是方法问题,个人倾向于多个定时器,将来调整方便...... 谢谢各位的指点,听各位这么一说,看来同时控制是没有问题的,我就放心了,那我就用多个定时器算了,大不了再加一片单片机做别的处理工作,反正加几十元的成本还是没有什么问题的,但要求一定要运行稳定,因为不是民用,也不是工业用的。 难道是军用的?你去做军品开发,国家_安全成问题啊
页:
[1]