当前位置:网站首页>STM32 光敏电阻传感器&两路AD采集
STM32 光敏电阻传感器&两路AD采集
2022-07-01 04:40:00 【花开半朵ོ】
光敏电阻传感器
原理图

Tr_AO:模拟输出,将采集的光线变成一个连续的模拟信号从Tr_AO引脚输出。
Tr_DO:调节RP7,与光敏电阻的分压值比较,通过Tr_DO输出0或1。

代码
Photo.c
#include "Photo.h"
uint32_t Get_Adc2(void)
{
uint32_t adc_value;
HAL_ADC_Start(&hadc2);
if(HAL_ADC_PollForConversion(&hadc2,10) == HAL_OK)
{
adc_value = HAL_ADC_GetValue(&hadc2);
}
return adc_value;
}
Photo.h
#ifndef _PHOTO_H_
#define _PHOTO_H_
#include "main.h"
#include "adc.h"
uint32_t Get_Adc2(void);
#endif显示分压值
void Lcd_Proc(void)
{
if(uwTick - lcd_uwTick < 200)
return;
lcd_uwTick = uwTick;
sprintf((char *)lcd_disp_string,"photo_value: %d ",Get_Adc2());
LCD_DisplayStringLine(Line3,lcd_disp_string);
//" R-P:%.2fK ", Get_Adc2() / (4096. - Get_Adc2()) * 10
sprintf((char *)lcd_disp_string," R-P:%.2fK ", Get_Adc2() / (4096. - Get_Adc2()) * 10);
LCD_DisplayStringLine(Line4,lcd_disp_string);
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_3) == GPIO_PIN_SET)
{
sprintf((char *)lcd_disp_string," DO: high ");
}
else
{
sprintf((char *)lcd_disp_string," DO: low ");
}
LCD_DisplayStringLine(Line5,lcd_disp_string);
}两路AD采集
对于采集不同AD的不同通道,还是很容易的,下面是要采集同一个AD的不同通道。
原理图


前面一部分是对ADC2的初始化,后面是对通道的配置,但是我们使用的是同一个AD不同的通道,且只能单独配置一个通道,所以我们可以在获取ADC值的函数中分别配置,把这个函数中的配置给删了。

这里引脚的配置也要注意一下。
2AD.c
#include "2AD.h"
uint32_t Get_adc1(void)
{
uint32_t adc1;
ADC_ChannelConfTypeDef sConfig = {0};
sConfig.Channel = ADC_CHANNEL_17;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_640CYCLES_5;
sConfig.SingleDiff = ADC_SINGLE_ENDED;
sConfig.OffsetNumber = ADC_OFFSET_NONE;
sConfig.Offset = 0;
if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
{
Error_Handler();
}
HAL_ADC_Start(&hadc2);
if(HAL_ADC_PollForConversion(&hadc2,10) == HAL_OK)
{
adc1 = HAL_ADC_GetValue(&hadc2);
}
return adc1;
}
uint32_t Get_adc2(void)
{
uint32_t adc2;
ADC_ChannelConfTypeDef sConfig = {0};
sConfig.Channel = ADC_CHANNEL_13;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_640CYCLES_5;
sConfig.SingleDiff = ADC_SINGLE_ENDED;
sConfig.OffsetNumber = ADC_OFFSET_NONE;
sConfig.Offset = 0;
if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
{
Error_Handler();
}
HAL_ADC_Start(&hadc2);
if(HAL_ADC_PollForConversion(&hadc2,10) == HAL_OK)
{
adc2 = HAL_ADC_GetValue(&hadc2);
}
return adc2;
}
2AD.h
#include "main.h"
#include "adc.h"
uint32_t Get_adc1(void);
uint32_t Get_adc2(void);
显示电压值函数
void Lcd_Proc(void)
{
if(uwTick - lcd_uwTick < 200)
return;
lcd_uwTick = uwTick;
sprintf((char *)lcd_disp_string," RP5_V: %.2fV ",Get_adc1() * 3.3 / 4096);
LCD_DisplayStringLine(Line2,lcd_disp_string);
sprintf((char *)lcd_disp_string," RP6_V: %.2fV ",Get_adc2() * 3.3 / 4096);
LCD_DisplayStringLine(Line3,lcd_disp_string);
}有些在读取的时候这两个值的顺序会颠倒,记得在15单片机读取两个AD值的时候也发生过类似的情况,当时的解决方案是读两次,那这个的话,可以做适当的延时,但是我不知道为啥,我自己写这个程序的时候一写就成功了,没有位置交换的问题,所以,有位置交换了的问题的,可以在读取的时候做适当延时哈哈。

边栏推荐
- TASK04|數理統計
- Daily question - line 10
- js 图片路径转换base64格式
- VR线上展览所具备应用及特色
- LeetCode_53(最大子数组和)
- One click shell to automatically deploy any version of redis
- 技术分享| 融合调度中的广播功能设计
- Web server: how to choose a good web server these five aspects should be paid attention to
- Software testing needs more and more talents. Why do you still not want to take this path?
- 2022 Shanghai safety officer C certificate examination question simulation examination question bank and answers
猜你喜欢

Research on medical knowledge atlas question answering system (I)

Section 27 remote access virtual private network workflow and experimental demonstration

Pytorch(三) —— 函数优化

C#读写应用程序配置文件App.exe.config,并在界面上显示

TASK04|數理統計

RuntimeError: mean(): input dtype should be either floating point or complex dtypes.Got Long instead

Maixll-Dock 使用方法

Sorting out 49 reports of knowledge map industry conference | AI sees the future with wisdom

数据加载及预处理
![[learn C and fly] S1E20: two dimensional array](/img/68/34fad73ff23d3e0719ef364fc60cb5.jpg)
[learn C and fly] S1E20: two dimensional array
随机推荐
LeetCode_35(搜索插入位置)
[deep learning] (4) decoder mechanism in transformer, complete pytoch code attached
神经网络-最大池化的使用
JVM栈和堆简介
Basic usage, principle and details of session
Learn Chapter 20 of vue3 (keep alive cache component)
测量三相永磁同步电机的交轴直轴电感
selenium打开chrome浏览器时弹出设置页面:Mircrosoft Defender 防病毒要重置您的设置
One click shell to automatically deploy any version of redis
如何看待智慧城市建设中的改变和机遇?
TCP/IP 详解(第 2 版) 笔记 / 3 链路层 / 3.4 桥接器与交换机 / 3.4.2 多属性注册协议(Multiple Registration Protocol (MRP))
[ue4] event distribution mechanism of reflective event distributor and active call event mechanism
Shell之一键自动部署Redis任意版本
Summary of testing experience - Testing Theory
pytorch中常用数据集的使用方法
How do I sort a list of strings in dart- How can I sort a list of strings in Dart?
为什么香港服务器最适合海外建站使用
2022年T电梯修理题库及模拟考试
VIM简易使用教程
Advanced application of ES6 modular and asynchronous programming