我想要实现的功能是电机正转3秒打开阀门,转一圈64个脉冲的霍尔编码器计数,然后加压设备通过阀门加压,传感器采集压强值。当到达设定值时,电机反转霍尔编码器的计数值,阀门关闭。由于脉冲数小,加上是AB相的编码器,测量误差在129个脉冲。file:///C:UsersdellAppDataRoamingTencentUsers809965167QQWinTempRichOle]N~OZ%H5V1LXUXJ9HI9D06H.png
然后我在程序上加了个129,脉冲数成图下方的样子了。void PWM_SET1(u8 dir,u16 a)
{
if(dir==1)
{
tiM_SetCompare4(TIM8,0);
TIM_SetCompare3(TIM8,a);
dir=0;
}
else {
TIM_SetCompare3(TIM8,0);
TIM_SetCompare4(TIM8,a);
dir=1;
}
}
PWM_SET1(1,300); //电机正转
delay_s(2);
PWM_SET1(0,0); //获取先前的计数值
printf("EncCntAAAA = %d-------",EncCnt);
closeb=EncCnt; // EncCnt= hEncoder_Timer_Overflow * 64 + TIM3->CNT,closeb为反转圈数
hEncoder_Timer_Overflow=0; //hEncoder_Timer_Overflow为电机转一圈的脉冲数
EncCnt=0;
PWM_SET1(0,300);
out:if(closeb>=(EncCnt+129)) ///判断脉冲个数,加了129后脉冲数差不多
{ goto out; }
PWM_SET1(0,0);
printf("EncCntBBBB = %d
",EncCnt);
hEncoder_Timer_Overflow=0;
EncCnt=0;
choose=0;
试了下,感觉电机反转的值比正转多一点点。想请教下,如何确保阀门关闭完全呢。如果用传感器采集的压强值作为标准判断是否关闭,这样可以吗。因为我测得的压强值在跳动
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>