名人堂再聚首 2024-03-02 17:19 采纳率: 55.8%
浏览 2
已结题

PIC18F45K80 ADC采样问题

大家好!最近看到一个用PIC18F45K80系列单片机写的ADC采样代码,主要代码如下:
ADC是12位精度的,一个通道采样64次,然后求平均值,但是我对V_SampleSum += (V_SampleData >> 4);这句不理解,V_SampleSum是累计64次的AD采样值,这里为什么不直接使用 V_SampleSum += ADC_SampleData;

还望专家们解释下这里代码的意义,谢谢了!

#define        ShiftPoint            6
uint          V_SampleData = 0;                         //临时变量
ulong          V_SampleSum  = 0;                         //输出电压采集值累加
volatile    uint          V_SampleValueFilt = 0;                         //输出电压滤波采集值

ADC_SampleData = (uint)(((ADRESH&0x0F)<<8) + ADRESL);

case    S_54V:                    //54V采样电压通道
            {
                V_SampleData = ADC_SampleData + (V_SampleData - (V_SampleData >> 4));
                if(SampleFlag == 0)
                    V_SampleSum    += (V_SampleData >> 4);
                                        
                break;
            }

V_SampleValueFilt = (V_SampleSum>>(ShiftPoint));//求最终的ADC平均值
  • 写回答

4条回答 默认 最新

  • 关注

    名人堂再聚首 下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    基于您的描述,我对代码进行了分析并解释了相关部分的含义,以下是对代码的解释和意义的理解:

    1. ADC_SampleData = (uint)(((ADRESH&0x0F)<<8) + ADRESL); 这一行代码用于将ADC转换结果中的高位和低位数据合并成一个16位的值,其中ADRESH和ADRESL代表了ADC转换结果的高8位和低8位。

    2. V_SampleData = ADC_SampleData + (V_SampleData - (V_SampleData >> 4)); 这一行代码用于对采样数据进行平滑处理,即当前采样值加上前一次采样值与上一次采样值右移4位之后的差值。这样做的目的是消除相邻采样值之间的噪声波动,提高采样值的稳定性。

    3. V_SampleSum += (V_SampleData >> 4); 这一行代码用于将每次采样的结果进行累加,但是右移了4位,相当于将采样结果除以16。这样做的目的是获得64次采样的平均值。

    4. V_SampleValueFilt = (V_SampleSum >> ShiftPoint); 这一行代码用于计算最终的ADC平均值。根据代码的注释中提到的ShiftPoint的定义为6,则右移6位相当于将采样结果除以64。这样做的目的是获得64次采样的平均值。

    基于上述理解,以下是对代码意义的总结:

    • 通过对相邻采样值之间的差值进行平滑处理,减少了噪声的影响,提高采样结果的稳定性。
    • 通过将每次采样结果进行累加,并除以采样次数,获得了64次采样的平均值。
    • 最终的ADC平均值可以用于后续的处理和判断。

    解决方案:

    • 根据需求和系统的特点,可以选择适当的平滑算法或者改进现有的算法以提高采样值的稳定性。
    • 可以根据实际需要调整右移的位数,以获得更准确的采样平均值。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月12日
  • 已采纳回答 3月4日
  • 创建了问题 3月2日

悬赏问题

  • ¥15 C++ 句柄后台鼠标拖动如何实现
  • ¥15 有人会SIRIUS 5.8.0这个软件吗
  • ¥30 comsol仿真等离激元
  • ¥15 静电纺丝煅烧后如何得到柔性纤维
  • ¥15 (标签-react native|关键词-镜像源)
  • ¥100 照片生成3D人脸视频
  • ¥15 伪装视频时长问题修改MP4的时长问题,
  • ¥15 JETSON NANO
  • ¥15 VS开发qt时如何在paintgl函数中用pushbutton控制切换纹理
  • ¥20 关于 openpyxl 处理excel文件地问题