本人想用摇杆控制电机的正反转,摇杆有2个通道,通过串口显示摇杆在中间位置时,2个通道的数据不一样(如果摇杆在中间位置的话2个通道的数据应该是一样的吧。)。2个通道都先去掉了最大值最小值,然后求出平均值,最后返回数据。但是过一段时间数据就会有较大的变化(如从原来的50慢慢增大到60),想问一下这个是什么情况。。。
下面是对ADC的设置
- void ADC_Configuration(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- ADC_CommonInitTypeDef ADC_CommonInitStructure;
- ADC_InitTypeDef ADC_InitStructure;
-
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA时钟
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //使能ADC1时钟
- //先初始化ADC1通道5 IO口
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//PA5 通道5
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//模拟输入
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//不带上下拉
- GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;//PA5 通道5
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//模拟输入
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//不带上下拉
- GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化
-
- RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,ENABLE); //ADC1复位
- RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,DISABLE); //复位结束
-
-
- ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;//独立模式
- ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;//两个采样阶段之间的延迟5个时钟
- ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; //DMA关闭
- ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;//预分频4分频。ADCCLK=PCLK2/4=84/4=21Mhz,ADC时钟最好不要超过36Mhz
- ADC_CommonInit(&ADC_CommonInitStructure);//初始化
-
- ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;//12位模式
- ADC_InitStructure.ADC_ScanConvMode = DISABLE;//非扫描模式
- ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//关闭连续转换
- ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;//禁止触发检测,使用软件触发
- ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//右对齐
- ADC_InitStructure.ADC_NbrOfConversion = 1;//1个转换在规则序列中 也就是只转换规则序列1
- ADC_Init(ADC1, &ADC_InitStructure);//ADC初始化
-
-
- ADC_Cmd(ADC1, ENABLE);//开启AD转换器
- }
复制代码
|
你用的什么摇杆?是工业级的吗?
一般的遥杆零位偏差很大,这种时候得用动态校准。如果在正常工作中,一段时间内(比如10秒)的值在中间位置附件,并且变化幅度不太大的话,认为是机械零位。人手操作是很难保持10秒内位置不变化的。
怀疑AD有问题的话,那么接个电位器或电阻分压,来测个固定电压,看看还变化大不大,不要用遥杆。
建议你把STM32内部温度传感器和内部参考电压,也采一下,跟你的外部AD通道数据做一下对比。看一下变化趋势,内部温度会随着通电时间会慢慢变大一些,但是内部参考电压是应该变的,即使变也会很小。如果变化大,那就是你外部AD参考电压或电源电压有变化。
评分
查看全部评分
评分
查看全部评分
完全听不懂 请问这个具体应该怎么做呢?
你好,,用的是淘宝上4块左右的摇杆。。。
那先排除AD的问题吧,这个摇杆归零不好。
其实一直对这点很疑惑:我用的是ADC的两个通道,看视频我理解的时应该开启扫描模式和连续转换模式,但是现在2个都没有开,2个通道却一直有数据。
ADC自校准在HAL库里面有
电阻分压的接法就是这样
这样就算ADC那边算作开路,在Vin电压变化时,电荷可以通过电阻流到地,不会积累在ADC那里
你好,我没有接触过这种图,学硬件的能不能看懂这个呢?我让学硬件的帮我看一下这个图。。
VIN就是你需要用AD采集的电压,ADC就是你选择的ADC输入引脚,最下面那个就是GND引脚