一、旋钮式滑动变阻器模块
- 开源代码
- 2025-09-18 15:06:02

一、旋钮式滑动变阻器模块 二、说明:
vcc,gnd,供电 out,输出电压,adc采集电压
三、配置采样时间其中fadc根据自己的配置来设定 其中Rain 为adc采样目标的阻值 一般而言,最理想的Rain为0,但实际中由于采样时间越大结果误差越小,但用所用时间也就越长,所以采取合适的配置才会更有效。 调用:
adc分频后:75/4=18.75mhz, 18.75mhz*3.96us=74.25cycles,选取接近的。
//配置列表 hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV4; hadc2.Init.Resolution = ADC_RESOLUTION_16B; //位数 hadc2.Init.ScanConvMode = ADC_SCAN_DISABLE;//扫描 hadc2.Init.EOCSelection = ADC_EOC_SINGLE_CONV;// eoc中断 hadc2.Init.LowPowerAutoWait = DISABLE;//低功耗 hadc2.Init.ContinuousConvMode =ENABLE; //打开连续转换 轮询时打开,中断关闭 DISABLE; hadc2.Init.NbrOfConversion = 1;//只转换规则序列1 hadc2.Init.DiscontinuousConvMode = DISABLE;//不开启 不连续采样 hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START;//开启软触发 hadc2.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;//软触发 hadc2.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DR;//保存数据到dr寄存器 hadc2.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;//覆盖旧数据 hadc2.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;//不左偏移 hadc2.Init.OversamplingMode = DISABLE; HAL_ADC_Start(&hadcx); HAL_ADC_Start_IT(&hadcx); float ADC_Real_Value; // 实际计算得出的电压值 __IO int32_t ADC_Cover_Value=0; // 获取的AD值 __IO uint8_t Finish_flag=0; // 记录简单滤波次数以及滤波完成 void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) { ADC_Cover_Value=0; ADC_Cover_Value=HAL_ADC_GetValue(&hadcx); Finish_flag=1; } //中断方式 uint8_t get_vcc_value(float *adc_value) { if(Finish_flag==1) { ADC_Real_Value =(double)ADC_Cover_Value*V_ref/Data_ref; *adc_value =ADC_Real_Value; // printf("AD转换原始值 = 0x%04X \r\n", ADC_Cover_Value); // printf("计算得出电压值 = %f V \r\n",ADC_Real_Value); /* 启动AD转换并使能AD中断 */ HAL_ADC_Start_IT(&hadcx); Finish_flag=0; return 0; } else { return 1; } } int32_t get_adc_average(uint8_t count) { uint8_t i; int32_t Value=0; ADC_Cover_Value=0; for(i=0;i<count;i++) { /* 等待完成常规组的转换 */ if (HAL_ADC_PollForConversion(&hadcx, 10) == HAL_OK) /* 获取ADC的转换 */ Value=HAL_ADC_GetValue(&hadcx); /* 转换数值累加 */ ADC_Cover_Value =ADC_Cover_Value+Value; } /* 返回平均值 */ return ADC_Cover_Value/count; } //轮询方式 uint8_t get_vcc_value1(float *adc_value) { int32_t ADC_value=0; ADC_value=get_adc_average(40); /* 获取转换平均值 */ // printf("AD转换原始值 = 0x%04X \r\n", ADC_value); /* 3.3为AD转换的参考电压值,stm32的AD转换为16bit,2^16=65535 */ ADC_Real_Value =(double)ADC_value*V_ref/Data_ref; *adc_value=ADC_Real_Value; // printf("计算得出电压值 = %f V \r\n",ADC_Real_Value); return 0; }一、旋钮式滑动变阻器模块由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“一、旋钮式滑动变阻器模块”
下一篇
c语言getchar