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

摇杆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个回答
toofree 回答时间: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块左右的摇杆。。。
toofree 回答时间: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引脚
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版