OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2593|回复: 2

关于带霍尔编码器的直流减速电机作为阀门开关的问题,如何确保阀门关闭,不会发生泄漏

[复制链接]

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2017-8-14
在线时间
22 小时
发表于 2018-4-25 19:53:22 | 显示全部楼层 |阅读模式
1金钱
我想要实现的功能是电机正转N秒打开阀门开关,转一圈64个脉冲的霍尔编码器计数,然后加压设备通过阀门加压,传感器采集压强值。当到达设定值时,电机反转霍尔编码器的计数值,阀门关闭(这是电机淘宝链接https://item.taobao.com/item.htm ... amp;_u=p1lt4msm2078,选的是12V 50R/Min的电机)。AB相的编码器,正转的脉冲和反转的脉冲相差。图片里面是我测得的数值,图片下方是我给反转多加了129个脉冲。/*电机PWM设置*/
void PWM_SET1(u8 dir,u16 a)  //PWN控制电机驱动,匀速转动,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\r\n",EncCnt);                                                                    
hEncoder_Timer_Overflow=0;
EncCnt=0;
choose=0;        

试了下,感觉电机反转的值比正转多一点点。这样设置的话,反转脉冲数数是和正转脉冲数作比较,但反转时的脉冲数由于是重新测得,值可能和正转测得的有误差,想请教下,如何设置确保阀门开关关闭完全呢。我想的是用传感器采集的压强值作为标准判断是否关闭,但我测得的压强值在跳动,不是很准,测量如下,用哪种方法可以提高压强值的精度呢,之前试过用中值法,但数据输出太慢了,现在用的是平均值法,效果不咋地

float T_Get_Adc_Average(u8 ch,u8 times)
{
        float temp_val=0;
        u16 t;
        for(t=0;t<times;t++)
        {
                temp_val+=T_Get_Adc(ch);       
                delay_ms(25);
        }
        temp_val=temp_val/times;
        return temp_val;
}           



presure=(float)(T_Get_Adc_Average(ADC_CH_TEMP1,8)*3300)/(float)4095;  //ADC采集的电压值
if(presure>=vol||vol==0)   //通过加减电压值调零点
presure=(presure-vol)*1.6;
else
presure=(vol-presure)*1.6;

[OC7OSPS$X2M@YEH}G~ZNEB.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-4-27 01:45:26 | 显示全部楼层
回复

使用道具 举报

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2017-8-14
在线时间
22 小时
 楼主| 发表于 2018-4-27 10:28:14 | 显示全部楼层

谢谢原子哥,我的这样的思路,能否确保电机关闭了呢。原子哥有补充的吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-18 18:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表