猿2005 2023-12-31 19:01 采纳率: 66.7%
浏览 14
已结题

Stm32 HAL库 用JOY摇杆控制机器臂,无故抖动

img

img

Xin手技术有限,采用延时去抖,但又没什么效果😱😱
这里只是对ADC转换的值进行判断,并实现相应程序,有da神提出更好的方法吗?😳😳

img

可以用采集三次取平均值吗?效果好不?具体怎么实现?🤔🤔

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-12-31 20:03
    关注

    【以下回答由 GPT 生成】

    关于JOY摇杆的无故抖动问题

    如果您在使用Stm32 HAL库时遇到了JOY摇杆造成的无故抖动问题,我可以给您一些建议来解决这个问题。

    首先,延时去抖是一种常见的处理方法,但是您说它并不理想。抖动问题的出现可能是由于您的去抖时间不够长或者存在其他原因,下面是一个简单的示例代码,使用延时去抖的方法:

    #include "stm32f4xx_hal.h"
    
    #define JOY_THRESHOLD 50
    #define JOY_DEBOUNCE_DELAY_MS 100
    
    void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
    {
        if(hadc->Instance == ADCx)
        {
            if(HAL_ADC_GetValue(hadc) > JOY_THRESHOLD) {
                HAL_Delay(JOY_DEBOUNCE_DELAY_MS);
                if(HAL_ADC_GetValue(hadc) > JOY_THRESHOLD) {
                    // 执行控制机器臂的操作
                }
            }
        }
    }
    

    在上述代码中,我们判断了ADC的转换值是否超过一个阈值(JOY_THRESHOLD),如果超过了阈值,则在延时一段时间(JOY_DEBOUNCE_DELAY_MS)后再次判断,以确保抖动不会触发控制机器臂的操作。

    为了提高解决抖动问题的准确性,您可以尝试以下方法:

    1. 使用滑动窗口平均(Sliding Window Average):采集多个ADC转换值,并计算它们的平均值。这样可以消除大部分噪点,提高测量的准确性。下面是一个示例代码,用于采集三次ADC转换值并取平均值:
    #include "stm32f4xx_hal.h"
    
    #define JOY_WINDOW_SIZE 3
    
    int adc_values[JOY_WINDOW_SIZE];
    int adc_sum = 0;
    int adc_index = 0;
    
    void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
    {
        if(hadc->Instance == ADCx)
        {
            adc_sum -= adc_values[adc_index]; // 减去最早采集到的值
            adc_values[adc_index] = HAL_ADC_GetValue(hadc);
            adc_sum += adc_values[adc_index]; // 加上最新采集到的值
            adc_index = (adc_index + 1) % JOY_WINDOW_SIZE; // 更新索引
    
            if(adc_sum / JOY_WINDOW_SIZE > JOY_THRESHOLD) {
                // 执行控制机器臂的操作
            }
        }
    }
    

    在上述代码中,我们使用了一个数组 adc_values 来存储 JOY_WINDOW_SIZE (这里是 3) 次连续的 ADC 转换值。变量 adc_sum 存储这些 ADC 转换值的总和,变量 adc_index 用于跟踪数组的索引。每次新的 ADC 转换值进入数组时,我们更新数组的总和并计算平均值,如果平均值超过阈值(JOY_THRESHOLD),则执行控制机器臂的操作。

    这种方法可以减小抖动的影响,提高了测量的准确性。

    希望以上方法可以帮助您解决 JOY 摇杆控制机器臂时的无故抖动问题。如果还有其他问题或需要进一步的帮助,请随时告诉我。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月8日
  • 已采纳回答 12月31日
  • 创建了问题 12月31日

悬赏问题

  • ¥15 C++为什么这个代码没报错运行不出来啊
  • ¥15 第一行输入n,第二行输入a b c输出的字符向后平移n个位置,当移动到z时,重新返回a开始
  • ¥15 为什么跑这个代码,文件显示不在呀
  • ¥15 一道ban了很多东西的pyjail题
  • ¥15 关于#r语言#的问题:如何将生成的四幅图排在一起,且对变量的赋值进行更改,让组合的图漂亮、美观@(相关搜索:森林图)
  • ¥15 C++识别堆叠物体异常
  • ¥15 微软硬件驱动认证账号申请
  • ¥15 GPT写作提示指令词
  • ¥20 根据动态演化博弈支付矩阵完成复制动态方程求解和演化相图分析等
  • ¥20 关于DAC输出1.000V对分辨率和精度的要求