光敏传感器的主要是光敏二极管,核心是PN结,利用了光电效应,对光强很敏感,有单向导电性,工作时需要加反向电压。光照越强,等效电阻越小。

实验要求通过ADC3通道6(PF8)采集光敏二极管的电压,然后转换为0~100的光纤强度值并显示在液晶屏上。

由下图可知对于的通道是PF8

首先确定我们的最小刻度,Vref = 3.3V,所以0V <= Vin <= 3.3V,所以最小刻度是3.3V / 4096(2^12)。

接下来确定转换时间。采样时间239.5个ADC时钟周期为例,可以得到转换时间为21us。

时间转换公式参考如下公式:Tcvtmin=(12.5+X)周期=(12.5 + X)/(12MHz)=21us。

因为使用的是单通道,所以不使用扫描模式。因为未使用到DMA,所以使用单次扫描模式。

由于光敏二极管是光照越强,阻值越小,获取的电压值与光强关系成负相关,所以在处理数据的时候需要在取互补的部分。

接下来编写我们的函数代码:

接下来编写函数文件代码adc_l.c:

#include "./BSP/ADC/adc_l.h"ADC_HandleTypeDef g_adc_handle;void adc_init(void){ADC_ChannelConfTypeDef adc_ch_conf;g_adc_handle.Instance = ADC3;g_adc_handle.Init.DataAlign = ADC_DATAALIGN_RIGHT; //右对齐g_adc_handle.Init.ScanConvMode = ADC_SCAN_DISABLE; //不扫描g_adc_handle.Init.ContinuousConvMode = DISABLE; //单次模式g_adc_handle.Init.NbrOfConversion = 1; //转换通道数为1,单通道g_adc_handle.Init.DiscontinuousConvMode = DISABLE; //不用间断模式g_adc_handle.Init.NbrOfDiscConversion = 0; //无间断模式则无间断通道g_adc_handle.Init.ExternalTrigConv = ADC_SOFTWARE_START; //外部软件触发HAL_ADC_Init(&g_adc_handle);HAL_ADCEx_Calibration_Start(&g_adc_handle);adc_ch_conf.Channel = ADC_CHANNEL_1;adc_ch_conf.Rank = ADC_REGULAR_RANK_1; //转换顺序adc_ch_conf.SamplingTime = ADC_SMAPLINGTIME_239CYCLES_5; //设置为最大值HAL_ADC_ConfigChannel(&g_adc_handle, &adc_ch_conf);
}void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc){if(hadc->Instance == ADC3){GPIO_InitTypeDef gpio_init_struct;RCC_PeriphCLKInitTypeDef adc_clk_init = {0};__HAL_RCC_GPIOF_CLK_ENABLE();  //使能ADC时钟__HAL_RCC_ADC3_CLK_ENABLE();   //使能GPIO时钟gpio_init_struct.Pin = GPIO_PIN_8;gpio_init_struct.Mode = GPIO_MODE_ANALOG; //模拟模式HAL_GPIO_Init(GPIOF, &gpio_init_struct);adc_clk_init.PeriphClockSelection = RCC_PERIPHCLK_ADC; //选择ADC外设时钟设置adc_clk_init.AdcClockSelection = RCC_ADCPCLK2_DIV6; //选择6分频,72/6=12MHzHAL_RCCEx_PeriphCLKConfig(&adc_clk_init, &g_adc_handle);}
}uint32_t adc_get_result(void){HAL_ADC_Start(&g_adc_handle);HAL_ADC_PollForConversion(&g_adc_handle, 10); //第二个参数比1大就行return (uint16_t)HAL_ADC_GetValue(&g_adc_handle);
}uint32_t adc_get_result_average(uint32_t ch, uint8_t times){uint32_t temp_val = 0;uint8_t t;for(t = 0; t < times; t++){temp_val += adc_get_result();delay_ms(5);}return temp_val / times;
}uint8_t lsens_get_val(void){uint32_t temp_val;temp_val = adc_get_result();temp_val /= 40;if(temp_val > 100) temp_val = 100;return (uint8_t)(100 - temp_val);
}

再编写函数头文件adc_l.h:

#ifndef __ADC_L_H
#define __ADC_L_Hextern ADC_HandleTypeDef g_adc_handle;void adc_init(void);
void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc);
uint32_t adc_get_result(void);
uint32_t adc_get_result_average(uint32_t ch, uint8_t times);#endif

最后编写我们的主函数代码main.c:

#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"
#include "./USMART/usmart.h"
#include "./BSP/LED/led.h"
#include "./BSP/LCD/lcd.h"
#include "./BSP/LSENS/lsens.h"int main(void)
{short adcx;HAL_Init();                                 /* 初始化HAL库 */sys_stm32_clock_init(RCC_PLL_MUL9);         /* 设置时钟, 72Mhz */delay_init(72);                             /* 延时初始化 */usart_init(115200);                         /* 串口初始化为115200 */led_init();                                 /* 初始化LED */lcd_init();                                 /* 初始化LCD */lsens_init();                               /* 初始化光敏传感器 */lcd_show_string(30,  50, 200, 16, 16, "STM32", RED);lcd_show_string(30,  70, 200, 16, 16, "LSENS TEST", RED);lcd_show_string(30,  90, 200, 16, 16, "ATOM@ALIENTEK", RED);lcd_show_string(30, 110, 200, 16, 16, "LSENS_VAL:", BLUE);while (1){ adcx = lsens_get_val();lcd_show_xnum(30 + 10 * 8, 110, adcx, 3, 16, 0, BLUE); /* 显示ADC的值 */LED0_TOGGLE();   /* LED0闪烁,提示程序运行 */delay_ms(250);}
}

到这里我们的函数代码便编写完成了

STM32-光敏传感器实验相关推荐

  1. STM32——光敏传感器实验-M4

    一.光敏传感器原理 1.光敏传感器简介 光敏传感器是最常见的传感器之一,它的种类繁多,主要有:光电管.光电倍增管.光敏电阻.光敏三极管.太阳能电池.红外线传感器.紫外线传感器.光纤式光电传感器.色彩传 ...

  2. (27)STM32——光敏传感器实验笔记

    目录 学习目标 运行结果 内容 介绍 配置 代码 总结 学习目标 我们这篇文章介绍的是有关光敏传感器的知识点,本节内容比较简单,主要的知识还是我们的ADC,而且我们在51单片机也介绍过相应的知识,感兴 ...

  3. STM32光敏传感器实验

    本章所要实现的功能是:通过 ADC3 通道 6 采集光敏传感器的 AD 值,并将该 值转换为光照强度值 0-100,0 对应最暗,100 对应最亮,并通过串口 1 输出光 照强度值,DS0 指示灯闪烁 ...

  4. stm32 adc输入电压范围_正点原子【STM32-F407探索者】第二十五章 光敏传感器实验...

    1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 本章我们将向大家介绍探索者 STM32F4 开发板自带的 ...

  5. 光敏传感器实验报告_光敏传感器实验论文-大物实验

    光敏传感器实验及探究 摘要: 光敏传感器是以光电器件作为转换元件的传感器.它可用于检测光量变化或直 接引起光量变化的非电量, 也可用于检测能转换成光量变化的其他非电量. 它首先把被测量 的变化转换成光 ...

  6. 内部温度传感器和光敏传感器实验

    内部温度传感器 STM32F407 有一个内部的温度传感器,可以用来测量 CPU 及周围的温度(TA).该温度传感器在内部和 ADC1_IN16输入通道相连接,此通道把传感器输出的电压转换成数字值. ...

  7. STM32学习笔记(六 定时器及应用 4 光敏传感器实验 )

    一.光敏传感器简介 光敏传感器是最常见的传感器之一,它的种类繁多,主要有:光电管.光电倍增管.光敏电阻.光敏三极管.太阳能电池.红外线传感器.紫外线传感器.光纤式光电传感器.色彩传感器.CCD 和 C ...

  8. 光敏传感器实验报告_光敏传感器光电特性测量实验分析报告.ppt

    思考题 1.光电效应有哪些分类? 光电效应可以分为外光电效应和内光电效应. 2.光敏电阻的物理基础是什么? 内光电效应. * * 光敏传感器的光电特性测量实验 实验简介 光敏传感器是将光信号转换为电信 ...

  9. STM32光敏传感器原理

    发现很多人都使用光敏电阻,但只是用了AD读取了电压值,或者算出了电阻值,就发送给上位机或者服务器,美其名曰获取了光照度,但其原理并...... 图中的 LS1 就是光敏传感器,其实就是一个光敏二极管, ...

  10. Arduin光敏传感器实验

    相关资料链接 链接:https://pan.baidu.com/s/1eE0rkaSJsKJMU_RUorS5OA 提取码:3ujh 1.1 项目介绍: 光敏传感器它对环境光线最敏感,S输出一个模拟信 ...

最新文章

  1. css 中文字旋转,css
  2. php抽奖概率算法(刮刮卡,大转盘)
  3. [emacs] Python代码补全的各种方法介绍以及对比
  4. Julia: 趣!,13579分别在一本168页书的页码中出现的次数
  5. 图画日记怎么画_画画日记(通用10篇)
  6. vmlogin效果怎么样?亚马逊防关联超级浏览器,电商多账号管理神器
  7. DLL Care破解版|DLL Care(DLL修复工具)破解版下载(附激活码)
  8. 计算机专业学生毕业实习周记
  9. 小白鼠测试---VR头戴设备-暴风魔镜4
  10. 【HTML+CSS】字体字号行高
  11. 从数据分析角度谈谈谁才是这个夏天的无价之姐——基于弹幕文本分析
  12. el-table 表格内容多一根线的解决办法
  13. Hbase(nosql)体系结构有基本操作 笔记八
  14. 即时通讯 SDK 一对一通讯技术
  15. 政企数智办公潮水里的融云「答卷」
  16. 一线城市nbsp;ornbsp;二线城市?(目前为止…
  17. Agile敏捷开发管理Salesforce项目(第一篇)- 4大核心价值观+12条原则
  18. 5、Python学习笔记第5课:数据类型,运算符
  19. React入门第一个程序及使用JS和JSX的区别
  20. 掰碎了的正则表达式 : Java 篇

热门文章

  1. Android异常-android5.0以上网络请求失败-retry error, curr request is null
  2. 图论(二) 树与二分图
  3. linux qgis源码编译,ubuntu安装QGIS(一)
  4. OutLook中发送用户密码加密的小技巧
  5. 电脑版频谱测试软件,电脑实时声音频谱PC Sound Spectrum
  6. opencascade实现一些刀具路径规划方法
  7. HTML5触摸界面的程序设计
  8. 【堡垒机】第9章——堡垒机后台处理批量任务
  9. Linux发行版制作指南(转)
  10. 航空公司客户价值分析python实战