你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

摇杆ADC采集数据

[复制链接]
miracle533 提问时间:2018-3-13 09:40 /
本人想用摇杆控制电机的正反转,摇杆有2个通道,通过串口显示摇杆在中间位置时,2个通道的数据不一样(如果摇杆在中间位置的话2个通道的数据应该是一样的吧。)。2个通道都先去掉了最大值最小值,然后求出平均值,最后返回数据。但是过一段时间数据就会有较大的变化(如从原来的50慢慢增大到60),想问一下这个是什么情况。。。
下面是对ADC的设置
  1. void  ADC_Configuration(void)
  2. {   
  3.   GPIO_InitTypeDef  GPIO_InitStructure;
  4.         ADC_CommonInitTypeDef ADC_CommonInitStructure;
  5.         ADC_InitTypeDef       ADC_InitStructure;
  6.        
  7.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA时钟
  8.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //使能ADC1时钟

  9.   //先初始化ADC1通道5 IO口
  10.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//PA5 通道5
  11.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//模拟输入
  12.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//不带上下拉
  13.   GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化  
  14.        
  15.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;//PA5 通道5
  16.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//模拟输入
  17.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//不带上下拉
  18.   GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化  


  19.         RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,ENABLE);          //ADC1复位
  20.         RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,DISABLE);        //复位结束         

  21.        
  22.   ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;//独立模式
  23.   ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;//两个采样阶段之间的延迟5个时钟
  24.   ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; //DMA关闭
  25.   ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;//预分频4分频。ADCCLK=PCLK2/4=84/4=21Mhz,ADC时钟最好不要超过36Mhz
  26.   ADC_CommonInit(&ADC_CommonInitStructure);//初始化
  27.        
  28.   ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;//12位模式
  29.   ADC_InitStructure.ADC_ScanConvMode = DISABLE;//非扫描模式       
  30.   ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//关闭连续转换
  31.   ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;//禁止触发检测,使用软件触发
  32.   ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//右对齐       
  33.   ADC_InitStructure.ADC_NbrOfConversion = 1;//1个转换在规则序列中 也就是只转换规则序列1
  34.   ADC_Init(ADC1, &ADC_InitStructure);//ADC初始化
  35.        

  36.         ADC_Cmd(ADC1, ENABLE);//开启AD转换器       

  37. }       
复制代码

收藏 评论13 发布时间:2018-3-13 09:40

举报

13个回答
七哥 回答时间:2018-3-13 10:03:48
本帖最后由 toofree 于 2018-3-13 10:08 编辑

你用的什么摇杆?是工业级的吗?
一般的遥杆零位偏差很大,这种时候得用动态校准。如果在正常工作中,一段时间内(比如10秒)的值在中间位置附件,并且变化幅度不太大的话,认为是机械零位。人手操作是很难保持10秒内位置不变化的。

怀疑AD有问题的话,那么接个电位器或电阻分压,来测个固定电压,看看还变化大不大,不要用遥杆。

建议你把STM32内部温度传感器和内部参考电压,也采一下,跟你的外部AD通道数据做一下对比。看一下变化趋势,内部温度会随着通电时间会慢慢变大一些,但是内部参考电压是应该变的,即使变也会很小。如果变化大,那就是你外部AD参考电压或电源电压有变化。

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

xmstudio 回答时间:2018-3-13 15:26:22
你这里的ADC复位是ADC自校准吗,STM32的ADC支持自校准的,楼主可以试试。另外ADC的负载电阻比较大,可以看做开路,最好通过电阻分压的方式提供一个从通道到GND的泄放通路,这样会稳定一些

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

miracle533 回答时间:2018-3-13 18:10:55
xmstudio 发表于 2018-3-13 15:26
你这里的ADC复位是ADC自校准吗,STM32的ADC支持自校准的,楼主可以试试。另外ADC的负载电阻比较大,可以看 ...

完全听不懂  请问这个具体应该怎么做呢?
miracle533 回答时间:2018-3-13 18:15:15
toofree 发表于 2018-3-13 10:03
你用的什么摇杆?是工业级的吗?
一般的遥杆零位偏差很大,这种时候得用动态校准。如果在正常工作中,一段 ...

你好,,用的是淘宝上4块左右的摇杆。。。
七哥 回答时间:2018-3-13 18:24:28
miracle533 发表于 2018-3-13 18:15
你好,,用的是淘宝上4块左右的摇杆。。。

那先排除AD的问题吧,这个摇杆归零不好。
miracle533 回答时间:2018-3-13 20:45:13
toofree 发表于 2018-3-13 18:24
那先排除AD的问题吧,这个摇杆归零不好。

其实一直对这点很疑惑:我用的是ADC的两个通道,看视频我理解的时应该开启扫描模式和连续转换模式,但是现在2个都没有开,2个通道却一直有数据。
xmstudio 回答时间:2018-3-13 21:44:47
miracle533 发表于 2018-3-13 18:10
完全听不懂  请问这个具体应该怎么做呢?

ADC自校准在HAL库里面有
  1.   HAL_ADCEx_Calibration_Start(&hadc1);
复制代码

电阻分压的接法就是这样
无标题.png
这样就算ADC那边算作开路,在Vin电压变化时,电荷可以通过电阻流到地,不会积累在ADC那里
miracle533 回答时间:2018-3-13 22:07:52
xmstudio 发表于 2018-3-13 21:44
ADC自校准在HAL库里面有

电阻分压的接法就是这样

你好,我没有接触过这种图,学硬件的能不能看懂这个呢?我让学硬件的帮我看一下这个图。。
xmstudio 回答时间:2018-3-13 23:36:51
miracle533 发表于 2018-3-13 22:07
你好,我没有接触过这种图,学硬件的能不能看懂这个呢?我让学硬件的帮我看一下这个图。。 ...

VIN就是你需要用AD采集的电压,ADC就是你选择的ADC输入引脚,最下面那个就是GND引脚
miracle533 回答时间:2018-3-14 16:28:53
xmstudio 发表于 2018-3-13 23:36
VIN就是你需要用AD采集的电压,ADC就是你选择的ADC输入引脚,最下面那个就是GND引脚 ...

谢谢
埃斯提爱慕 回答时间:2018-3-15 16:04:58
提示: 作者被禁止或删除 内容自动屏蔽
miracle533 回答时间:2018-3-15 16:18:23
dsjsjf 发表于 2018-3-15 16:04
摇杆质量不行吧,,,打315投诉

社会社会。。。(手动滑稽)
he129807 回答时间:2018-6-17 10:35:15
有可能跟设置以及AD转换并没有关系。
AD转换首先你得保证电源,采样点电压的稳定性。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版