(一)数据抖动
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,注意数据的处理;还可以通过调节平均次数来改变机器臂反应快慢,越少越快,反之。