找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1966|回复: 2
打印 上一主题 下一主题
收起左侧

STM32 LL库ADC双通道采样电压值叠加是什么?

[复制链接]
跳转到指定楼层
楼主
我在使用LL库中配置ADC用DMA模式传输数据,双通道采样电压值,为什么仿真出来的结果会是叠加的,而且值不能最低不能为0,最低为0x0800(上下波动一点),输入一个AI,最大值为0X0BFF,输入两个AI才会到0X0FFF,也就是AI1和AI2通道单独输入可以都能读取0X0800~0X0BFF的值,但是一起输入在DMA内存地址的数组中就会将两者的值叠加?这是为什么?有大佬能帮忙看看嘛?
STM32单片机源程序如下:
  1.   LL_ADC_EnableInternalRegulator(ADC3);//
  2.   //ADC3采样通道等初始化
  3.   ADC_InitStruct.Resolution = LL_ADC_RESOLUTION_12B;//设置ADC分辨率(12位)
  4.   ADC_InitStruct.DataAlignment = LL_ADC_DATA_ALIGN_RIGHT;//设置ADC转换数据对齐(右对齐)
  5.   ADC_InitStruct.LowPowerMode = LL_ADC_LP_MODE_NONE;
  6.   LL_ADC_Init(ADC3, &ADC_InitStruct);
  7.   
  8.   ADC_REG_InitStruct.TriggerSource = LL_ADC_REG_TRIG_SOFTWARE;
  9.   ADC_REG_InitStruct.SequencerLength = LL_ADC_REG_SEQ_SCAN_ENABLE_2RANKS;
  10.   ADC_REG_InitStruct.SequencerDiscont = LL_ADC_REG_SEQ_DISCONT_DISABLE;
  11.   ADC_REG_InitStruct.ContinuousMode = LL_ADC_REG_CONV_CONTINUOUS
  12.   ADC_REG_InitStruct.DMATransfer = LL_ADC_REG_DMA_TRANSFER_UNLIMITED;
  13.   ADC_REG_InitStruct.Overrun = LL_ADC_REG_OVR_DATA_OVERWRITTEN
  14.   LL_ADC_REG_Init(ADC3, &ADC_REG_InitStruct);
  15.   
  16.   
  17.   LL_ADC_SetGainCompensation(ADC3, 0)
  18.   LL_ADC_SetOverSamplingScope(ADC3, LL_ADC_OVS_DISABLE)
  19.   LL_ADC_DisableDeepPowerDown(ADC3)
  20.   
  21.   ADC_CommonInitStruct.CommonClock = LL_ADC_CLOCK_ASYNC_DIV4;
  22.   ADC_CommonInitStruct.Multimode = LL_ADC_MULTI_INDEPENDENT;
  23.   LL_ADC_CommonInit(__LL_ADC_COMMON_INSTANCE(ADC3), &ADC_CommonInitStruct);
  24.   LL_ADC_EnableIT_EOS(ADC3);
  25.   LL_ADC_DisableIT_EOC(ADC3);
  26.   /** Configure Regular Channel
  27.   */
  28.   LL_ADC_REG_SetSequencerRanks(ADC3, LL_ADC_REG_RANK_1, LL_ADC_CHANNEL_1;
  29.   LL_ADC_SetChannelSamplingTime(ADC3, LL_ADC_CHANNEL_1, LL_ADC_SAMPLINGTIME_92CYCLES_5);
  30.   LL_ADC_SetChannelSingleDiff(ADC3, LL_ADC_CHANNEL_1, LL_ADC_SINGLE_ENDED);
  31.   /** Configure Regular Channe5
  32.   */
  33.   LL_ADC_REG_SetSequencerRanks(ADC3, LL_ADC_REG_RANK_2, LL_ADC_CHANNEL_5);
  34.   LL_ADC_SetChannelSamplingTime(ADC3, LL_ADC_CHANNEL_5, LL_ADC_SAMPLINGTIME_92CYCLES_5);
  35.   LL_ADC_SetChannelSingleDiff(ADC3, LL_ADC_CHANNEL_5, LL_ADC_SINGLE_ENDED);
  36.   ActivateAdc3();//包含ADC3使能
  37.   
  38.   StartAdc3ConvPoll();
  39.   ADCSoftConversion();//添加调用此函数,ADC软件触发
复制代码
这是输入一个AI到10V的值:



这是两个AI都到10V的值:


而且,AI1FilterResult和AI2FilterResult分别对应DMA内存数组中的第一、二个数据之后的处理之后的值,只有AI1FilterResult又值,而AI2FilterResult一直为0,这又是为什么啊?????

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:939710 发表于 2021-7-10 09:26 | 只看该作者
你没有使能内存端地址增加吧,还有设置内存段数据长度
回复

使用道具 举报

板凳
ID:837826 发表于 2021-7-10 09:33 | 只看该作者
lishengaha 发表于 2021-7-10 09:26
你没有使能内存端地址增加吧,还有设置内存段数据长度

DMA的配置都是正常的,主要是ADC两个通道采样两个AI的值是会叠加
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表