计算里程计

const double PI = 3.14159265358979323846;  
double yiquan=650;
double ban_jing=0.0335;
double zspeed;
double yspeed;

int velocity_PID_valuez(int velocity_measure,int velocity_calcu);
int velocity_PID_valuey(int velocity_measure,int velocity_calcu);
void Motor_Control(int pwm1,int pwm2)
{
    if(pwm1>0)
    {
        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,GPIO_PIN_RESET);
    }
    if(pwm1<0)
    {
        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET);
        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,GPIO_PIN_SET);
    }
    
    if(pwm2>0)
    {
        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,GPIO_PIN_RESET);
    }
    if(pwm2<0)
    {
        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,GPIO_PIN_RESET);
        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,GPIO_PIN_SET);
    }
    __HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1,pwm1);
    __HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2,pwm2);
}
int encoder_left;//×ó±àÂëÆ÷µç»úËÙ¶È
int iencoder_left;//×ó±àÂëÆ÷ËÙ¶È»ý·Ö
int encoder_right;//ÓÒ±àÂëÆ÷µç»úËÙ¶È
int iencoder_right;//ÓÒ±àÂëÆ÷ËÙ¶È»ý·Ö
float distance;
int cout;
int speedz,speedy;
int mubiao=3;
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    static uint8_t key_count,oled_count; 
     if(htim->Instance == TIM1)   //10ms
     {
         
             encoder_left = -(short)(__HAL_TIM_GET_COUNTER(&htim3));        
            iencoder_left+=encoder_left;
          encoder_right = (short)(__HAL_TIM_GET_COUNTER(&htim4));        
            iencoder_right+=encoder_right;
            //distance=(iencoder_left/36.0);
          zspeed=(encoder_left*(2*PI*ban_jing))/6.5;
          yspeed=(encoder_right*(2*PI*ban_jing))/6.5;//m/s
          distance+=((zspeed+yspeed)/2)*0.01;
          speedz=velocity_PID_valuez(zspeed,mubiao);
          speedy=velocity_PID_valuey(yspeed,mubiao);
          if(distance>1){
                mubiao=0;
                Motor_Control(0,0);
            }else{
             Motor_Control(speedz,speedy);
            }
          
          __HAL_TIM_SET_COUNTER(&htim3,0);
          __HAL_TIM_SET_COUNTER(&htim4,0);
          HAL_TIM_Base_Start_IT(&htim1);
     }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值