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

基于STM32的光敏模块经验分享

[复制链接]
攻城狮Melo 发布时间:2023-4-7 19:19
器件选择
硬件平台选择STM32F103C8T6最小系统开发板。
STM32代码配置工具使用STM32CubeMX的HAL库进行开发。
光敏模块选择4线光敏电阻传感器模块,(光敏电阻型号5516)。
注1:数据下载使用ST-LINK下载。
注2:串口数据接收使用USB转TTL传输,USB转TTL的TXD接STM32的PA10引脚RXD,RXD接STM32的PA9引脚TXD。


4线光敏传感器介绍
光敏模块原理图

fef84a4cb3b94d53b17bd33538eb8572.jpg


光敏模块实物


a40a9814338a4295b4e3da05ed2e17e0.png

光敏传感器是利用光敏元件将光信号转换为电信号的传感器。在光敏电阻模块中载入了一个光敏电阻。光敏电阻是用硫化镉或硒化镉等半导体材料制成的特殊电阻器。光敏电阻对环境光线十分敏感。光照越强阻值就越低,随着光照强度的升高,电阻值迅速降低。


光敏模块引脚说明
VCC:电源引脚,接单片机+5V或者3.3V。
GND:地线,接单片机GND。
DO:开关量输出(0或1),模块在无光条件下或光强达不到设定阈值时,DO口输出高电平;当外界环境光强超过设定阈值时,DO输出低电平。
AO:模拟量输出(电压),与单片机AD模块相连,通过AD转换,获得准确数值。(后续中使用PA1引脚作为ADC转换,因此此处接单片机的PA1引脚)


CubeMX配置
1、首先新建一个工程,芯片选择STM32F103C8T6,双击后进入开发。

b34ad06879ff45f083d3a6f18a4a84ee.png

2、进入后,首先进行一些基础配置。配置调试引脚,配置时钟。在SYS下的Debug中选择Serial Wire。

0645441d7e824b15b554900be5de6826.png

时钟配置选择外部时钟

885ca50819ea47b9bce27aeee00b3bfe.png

进入时钟配置:

3079b8857c364eea83f158ee0c72512a.png

3、ADC相关配置,使用PA1脚作为ADC:

d5633e418c9e47ecbddf52870691c263.png

使能配置:

f0f8215ff2fe4039b5bf580a9f8b4875.png
e2bbceb3937e4c24ab7529285d1adcfb.png

为了方便看出光敏模块输出模拟量的变化,通过PC端的串口工具返回电压值。因此也要进行串口的配置:

f0fde49c84b34806bbe405e2cc23bd10.png

同时也对其中断使能配置,勾选Enabled:

e8edbfb6d4004a7ba43ea1aef25699d4.png

后续配置:

b535f82955914f23a54eb5dfb7c34233.png




代码主体部分
1、引入头文件,为后续使用sprintf做准备。
  1. #include "stdio.h"
复制代码

2、变量预先定义。
  1. uint16_t ADC_Sample = 0,ADC_Volt = 0;//ADC_Value为采样值,ADC_Volt为电压值
  2. uint8_t str[64];//给定一个数组空间,存放sprintf的内容
复制代码

3、数据存放与发送。
  1. void UR1_Send_Info()
  2. {
  3.         sprintf((char*)str_buff,"\r\nSampling value:%d,Voltage value:%d.%d%d",ADC_Sample,ADC_Volt/100,(ADC_Volt/10)%10,ADC_Volt%10);//使用sprintf把将要发送的内容存放到数组
  4.         HAL_UART_Transmit(&huart1,str,sizeof(str),10000);//将数组中的内容发送到串口
  5. }
复制代码

4、数据的获取。
  1. void Get_ADC_Sample()
  2. {
  3.         HAL_ADC_Start(&hadc1);//打开ADC转换
  4.         if(HAL_ADC_PollForConversion(&hadc1,10) == HAL_OK)
  5.         {
  6.                 ADC_Sample = HAL_ADC_GetValue(&hadc1);//将得到的ADC采样值放入变量ADC_Sample中
  7.                 ADC_Volt = ADC_Sample * 330/4096;//数据转换,电压为3.3V,数据时12位,保留两位小数
  8.         }
  9.         UR1_Send_Info();//将上面数据进行存放,发送到上位机
  10.         HAL_ADC_Stop(&hadc1);//停止ADC转换
  11. }
复制代码

5、在main函数的while循环中加入写入的代码
  1. /* USER CODE BEGIN WHILE */
  2.   while (1)
  3.   {
  4.     Get_ADC_Sample();
  5.         UR1_Send_Info();
  6.         HAL_Delay(500);//使用HAL库的Delay函数延时500ms,每500ms转换一次
  7.     /* USER CODE END WHILE */

  8.     /* USER CODE BEGIN 3 */
  9.   }
  10.   /* USER CODE END 3 */
复制代码

结果展示

bc1c1be709b6447aaf62454cb049faf8.png

————————————————
版权声明:xiang--ying
如有侵权请联系删除


收藏 评论0 发布时间:2023-4-7 19:19

举报

0个回答

所属标签

相似分享

官网相关资源

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