void timer0() interrupt 1 using 2
{
if(t==0) /* 1个PWM周期完成后才会接受新数值 */
{
temp1=m1
temp2=m2
}
if(t<temp1)
{
s1=1
s2=0
}
else
{
s1=0/* 产生电机1的PWM信号 */ //一个PWM信号的周期为2.5ms
s2=0
}
if(t<temp2)
{
s3=1
s4=0
}
else
{
s3=0
s4=0
}/* 产生电机2的PWM信号 */
t++//完成一次中断,记数一次
if(t>=50)
t=0/* 1个PWM信号由50次中断产生 */
jishu++
;******************将修改定时器初始值放在后面**************
TH0=(65536-50)/256//一次中断的时间为50us
TL0=(65536-50)%256
}
事情没有你想象的那么简单,步进电机的运行和停止,是有个对应的加速和减速过程,不是像LED那样给个电平就能亮。按照你现有的程序,i是肢敏孙在变化的,那么是否就会有频繁变化的可能?这样的话步进电机就会频繁地开停,这个过程是否有考虑到?
步进电机运行是一个过程,可在电机的驱动函数里面增加一个停止检测,检测到停止条件时,就开始停止,这个是比较合理的停止过程,拿祥不会损坏电机,当然,如果对于急停那种,可以直接在else里面将步历链进电机的PWM停止,这种情况对于高速运行的电机会有损伤的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)