[其他ST产品] STM32+光敏电阻实现单通道单次采样实验

[复制链接]
861|10
 楼主| lxs0026 发表于 2023-1-15 17:34 | 显示全部楼层 |阅读模式
准备设备:
        STM32系列单片机,光敏电阻,Keil uVision5,STM32CubeMX,其他外设

需要知识点:
        了解ADC模数转换工作原理

简单介绍ADC
ADC简介
        ADC其实就是模数转换器,是指将连续的模拟信号,转换为离散的数字信号的一种元件,因此,模数转换一般要经过采样,保持,量化以及编码。

评论

———————————————— 版权声明:本文为CSDN博主「爱犬小柴」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/Zhoutonghao/article/details/128540231  发表于 2023-1-15 17:35
 楼主| lxs0026 发表于 2023-1-15 17:36 | 显示全部楼层
ADC的主要特性
        高性能

        低功耗

        模拟输入通道

        多种启动转换方式

                软件
                通过具有可配置极性的硬件触发器(定时器事件或GPIO输入事件)

        转换模式

                可转换单通道或一序列通道。

                触发的选定输入单模式转换

                持续的选定输入连续模式转换

                继续模式 (Discontinuous mode)

        转换完成后、序列转换完成、模拟看门狗或转换溢出事件都可以产生中断

        模拟看门狗

        ADC供电要求:1.62~3.6V

        ADC输入范围:VSSA ≤ VIN ≤ VREF+
 楼主| lxs0026 发表于 2023-1-15 17:36 | 显示全部楼层
实验步骤
1.查看光敏电阻电路图,发现光敏电阻的输出引脚为A1,位于p1排线的第4个插针位置处,根据p1排线的位置,找到底板相应位置处,发现底板对应引脚标号也为A1

8302763c3c9389080f.png

 楼主| lxs0026 发表于 2023-1-15 17:39 | 显示全部楼层
找到单片机对应位置的A1编号的引脚,发现为单片机的PA4引脚
4235363c3c9b6b3d4c.png
 楼主| lxs0026 发表于 2023-1-15 17:40 | 显示全部楼层
找到STM32CubeMX软件中芯片的PA4引脚位置,对引脚进行配置(这里默认定义PB0~PB3为发光二极管指定引脚,原理图就不再赘述了,大家可以根据需求自行配置其他引脚,外接设备)
 楼主| lxs0026 发表于 2023-1-15 17:40 | 显示全部楼层
 楼主| lxs0026 发表于 2023-1-15 17:41 | 显示全部楼层
找到STM32CubeMX软件中芯片的PA4引脚位置,对引脚进行配置(这里默认定义PB0~PB3为发光二极管指定引脚,原理图就不再赘述了,大家可以根据需求自行配置其他引脚,外接设备)
 楼主| lxs0026 发表于 2023-1-15 17:43 | 显示全部楼层
 楼主| lxs0026 发表于 2023-1-15 17:43 | 显示全部楼层
.在Keil中配置如下代码,编译并运行后即可实现光敏电阻控制二极管的操作
 楼主| lxs0026 发表于 2023-1-15 17:44 | 显示全部楼层
  1. uint16_t value;  
  2. while (1)
  3.   {
  4.     /* USER CODE END WHILE */
  5.                 HAL_ADC_Start(&hadc1);        
  6.                 HAL_ADC_PollForConversion(&hadc1,100);
  7.                 value=HAL_ADC_GetValue(&hadc1);
  8.                 if(value>3000&&value<=3700){
  9.                         HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1|GPIO_PIN_2,GPIO_PIN_SET);
  10.                         HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
  11.                 }else if(value>3700&&value<4000){
  12.                         HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_SET);
  13.                         HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0|GPIO_PIN_1,GPIO_PIN_RESET);
  14.                 }else if(value>4000){
  15.                         HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2,GPIO_PIN_RESET);
  16.                 }else{
  17.                         HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2,GPIO_PIN_SET);
  18.                 }
  19.                 HAL_ADC_Stop(&hadc1);
  20.     /* USER CODE BEGIN 3 */
  21.   }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

103

主题

1290

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部