打印
[其他ST产品]

STM32+光敏电阻实现单通道单次采样实验

[复制链接]
188|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lxs0026|  楼主 | 2023-1-15 17:34 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
准备设备:
        STM32系列单片机,光敏电阻,Keil uVision5,STM32CubeMX,其他外设

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

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

使用特权

评论回复
评论
lxs0026 2023-1-15 17:35 回复TA
———————————————— 版权声明:本文为CSDN博主「爱犬小柴」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/Zhoutonghao/article/details/128540231 
沙发
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



使用特权

评论回复
地板
lxs0026|  楼主 | 2023-1-15 17:39 | 只看该作者
找到单片机对应位置的A1编号的引脚,发现为单片机的PA4引脚

使用特权

评论回复
5
lxs0026|  楼主 | 2023-1-15 17:40 | 只看该作者
找到STM32CubeMX软件中芯片的PA4引脚位置,对引脚进行配置(这里默认定义PB0~PB3为发光二极管指定引脚,原理图就不再赘述了,大家可以根据需求自行配置其他引脚,外接设备)

使用特权

评论回复
6
lxs0026|  楼主 | 2023-1-15 17:40 | 只看该作者

使用特权

评论回复
7
lxs0026|  楼主 | 2023-1-15 17:41 | 只看该作者
找到STM32CubeMX软件中芯片的PA4引脚位置,对引脚进行配置(这里默认定义PB0~PB3为发光二极管指定引脚,原理图就不再赘述了,大家可以根据需求自行配置其他引脚,外接设备)

使用特权

评论回复
8
lxs0026|  楼主 | 2023-1-15 17:43 | 只看该作者

使用特权

评论回复
9
lxs0026|  楼主 | 2023-1-15 17:43 | 只看该作者
.在Keil中配置如下代码,编译并运行后即可实现光敏电阻控制二极管的操作

使用特权

评论回复
10
lxs0026|  楼主 | 2023-1-15 17:44 | 只看该作者
uint16_t value;  
while (1)
  {
    /* USER CODE END WHILE */
                HAL_ADC_Start(&hadc1);        
                HAL_ADC_PollForConversion(&hadc1,100);
                value=HAL_ADC_GetValue(&hadc1);
                if(value>3000&&value<=3700){
                        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1|GPIO_PIN_2,GPIO_PIN_SET);
                        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
                }else if(value>3700&&value<4000){
                        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_SET);
                        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0|GPIO_PIN_1,GPIO_PIN_RESET);
                }else if(value>4000){
                        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2,GPIO_PIN_RESET);
                }else{
                        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2,GPIO_PIN_SET);
                }
                HAL_ADC_Stop(&hadc1);
    /* USER CODE BEGIN 3 */
  }

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

905

帖子

1

粉丝