wenbo2005.online

学习记录 / STM32

关于用 JOY 控制机器臂

STM322024-01-02

(一)数据抖动

1,机器臂简单消抖方法 - > 延时消抖:

if(JOY_X_1 == 255)
      {
          HAL_Delay(50);
          if(JOY_X_1 == 255)
          {
                i-=5;
                if(i<=50)
                {
                     i = 50;
                }
                __HAL_TIM_SET_COMPARE(&htim4,TIM_CHANNEL_1,i);
                HAL_Delay(10);
            }
      }

不流畅,还是轻微抖动

2,ADC采集数据取均值:

        uint16_t num_x,num_y;

        for(uint8_t i = 1;i<10;i++)//=====================采集10次取平均值,前面已经自动采集一次,这里只用采集9次
        {
            JOY_X = JOY_VALUE[0] & 0xFF;//=======================已经开启DMA
            HAL_Delay(10);//=======================防止数据未保存
            num_x = JOY_X+ num_x;//============刷新数据
        }
               num_x = num_x/10;//==========================对num_x的值进行判断处理
        printf("X = %d\r\n", num_x);
            HAL_Delay(200);

数据可能在0~254之间,到不了255,注意数据的处理;还可以通过调节平均次数来改变机器臂反应快慢,越少越快,反之。