当前位置: 首页 > news >正文

一、旋钮式滑动变阻器模块

一、旋钮式滑动变阻器模块

在这里插入图片描述

二、说明:

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;
}

相关文章:

  • 最新常见的图数据库对比,选型,架构,性能对比
  • LangPrompt提示词
  • 【弹性计算】弹性裸金属服务器和神龙虚拟化(三):弹性裸金属技术
  • 【RAG】Embeding 和 Rerank学习笔记
  • 【计算机网络入门】初学计算机网络(九)
  • jenv 使用指南
  • Java异常
  • Python Cookbook-2.24 在 Mac OSX平台上统计PDF文档的页数
  • [含文档+PPT+源码等]精品基于Python实现的微信小程序的乡村医疗咨询系统
  • Gin从入门到精通 (七)文件上传和下载
  • 计算机毕业设计SpringBoot+Vue.js社区智慧养老监护管理平台(源码+文档+PPT+讲解)
  • C++20中`constexpr`的显著增强
  • 前缀和算法 算法4
  • AIGC在影视、广告、游戏行业的协同创作报告
  • AI分析股票基本面案例:小米集团
  • 一、对于fdcan配置与使用记录
  • 阿里云轻量级服务器通过宝塔安装PgVector要点
  • Linux mkdir 命令
  • C++11——智能指针和function库
  • 前端学习——HTML
  • 做wps的网站赚钱/市场营销试题库(带答案)
  • 360做网站经常打骚扰电话/体验营销案例
  • 云南电商网站建设/象山seo外包服务优化
  • 巨鹿网站建设多少钱/30个免费货源网站
  • 视差网站/北京网优化seo公司
  • 先做网站后付款/青岛百度seo排名