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

STM32单片机雨滴模块

[复制链接]
STMCU小助手 发布时间:2021-7-22 14:47
一、设备说明
单片机:STM32f103zet6
雨滴模块
1.png


2.png


二、部分关键代码
1.初始化ADC采集
代码如下(示例):
  1. <font face="微软雅黑" size="3">void  Adc_Init(void)
  2. {        
  3.         ADC_InitTypeDef ADC_InitStructure;
  4.         GPIO_InitTypeDef GPIO_InitStructure;
  5.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1        , ENABLE );          //使能ADC1通道时钟
  6.         RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14M
  7.         //PA1 作为模拟通道输入引脚                        
  8.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
  9.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;                //模拟输入引脚
  10.         GPIO_Init(GPIOA, &GPIO_InitStructure);       
  11. //**All notes can be deleted and modified**//
  12.         ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;        //ADC工作模式:ADC1和ADC2工作在独立模式
  13.         ADC_InitStructure.ADC_ScanConvMode = DISABLE;        //模数转换工作在单通道模式
  14.         ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;        //模数转换工作在单次转换模式
  15.         ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;        //转换由软件而不是外部触发启动
  16.         ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;        //ADC数据右对齐
  17.         ADC_InitStructure.ADC_NbrOfChannel = 1;        //顺序进行规则转换的ADC通道的数目
  18.         ADC_Init(ADC1, &ADC_InitStructure);        //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器   
  19.         ADC_Cmd(ADC1, ENABLE);        //使能指定的ADC1       
  20.         ADC_ResetCalibration(ADC1);        //使能复位校准           
  21.         while(ADC_GetResetCalibrationStatus(ADC1));        //等待复位校准结束       
  22.         ADC_StartCalibration(ADC1);         //开启AD校准
  23.         while(ADC_GetCalibrationStatus(ADC1));         //等待校准结束
  24. </font>
复制代码
2.读入数据
代码如下(示例):
  1. <font face="微软雅黑" size="3">   adcx=Get_Adc_Average(ADC_Channel_0,5);//读取ad转换值 5次求平均               
  2.                         printf(" adcx %d\r\n",adcx);       
  3.                        
  4.                         sensorVal =99-((float)adcx*3.3/4096)*2*99.0/5.0;// 采集值  *2表示电阻分压        输出最大5v 但是要转化为最大3.3v               
  5.                         sensorVal =99-((float)adcx*3.3/4096)*99.0/5.0;
  6.                        
  7.                         printf(" sensorVal %d\r\n",sensorVal);
  8.                         if(sensorVal<BASICS_VAL)sensorVal = 0;//过滤传感器本身自带电压
  9.                         else
  10.                         {
  11.                                 sensorVal = (sensorVal-BASICS_VAL)*99/(99-BASICS_VAL);//将30-99值转化为0-99的值
  12.                         }
  13.                        
  14.                         printf(dis0,"nowValue:%d   ",sensorVal);                //打印                                       
  15.                        
  16.                         if(setMode){
  17.                                 printf(dis1,"setValue:%02d<   ",setNum);                //打印                               
  18.                         }
  19.                         else{
  20.                                 printf(dis1,"setValue:%02d    ",setNum);       
  21.                         }
  22. </font>
复制代码


总结
最后输出的结果:
根据测试,雨滴模块浸入水的深度不同,返回的电压值转化成的adc值不同:
完全无水的情况返回的adc值为4096;
完全浸入水中返回值接近400(是因为有模块供电的电压)。
根据400~4096的区间,按百分比输出,无水情况输出0,完全浸没输出99;

收藏 评论0 发布时间:2021-7-22 14:47

举报

0个回答

所属标签

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