方庄网站建设公司国家网站标题颜色搭配
2026/3/12 16:52:53 网站建设 项目流程
方庄网站建设公司,国家网站标题颜色搭配,成都设计公司注册,杭州 做网站简介通过stm32与ntc热敏电阻进行对水温的检测#xff0c;测温范围为0~60℃#xff0c;当温度超过60℃时#xff0c;led闪烁#xff0c;采用6针的OLED#xff08;spi通信协议#xff09;显示ntc的ad值和水温。功能1、温度测量范围#xff1a;室温#xff5e;60#xff…简介通过stm32与ntc热敏电阻进行对水温的检测测温范围为0~60℃当温度超过60℃时led闪烁采用6针的OLEDspi通信协议显示ntc的ad值和水温。功能1、温度测量范围室温60°需在屏幕上显示2、温度测量精度±2°3、超温提示设定温度大于 60°时报警。简易电路图NTC测温电阻一端接地一端接电阻接口和第一个图的原理一样就是和10K的电阻分压测量思路1.A0口采用模拟输入(ADC专用)对ntc进行ad采集将采集到的AD值在OLED显示2.ntc与10k电阻在3.3V下串联分压将ntc所在的温度与对应的ad值通过电压进行计算进行比对用excel进行简单的拟合即可求出温度与ad的对应关系进而在OLED上显示3.通过代码控制gpio口使其在60摄氏度时led闪烁代码部分含解析1、采集AD.C#include stm32f10x.h // Device header void AD_Init(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE); //开启时钟ADC都是APB2上的设备 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //开启GPIOA的时钟要用到A0口 RCC_ADCCLKConfig(RCC_PCLK2_Div6); //分频ADCCLK72/6 GPIO_InitTypeDef GPIO_Initstructure; GPIO_Initstructure.GPIO_Mode GPIO_Mode_AIN; //模拟输入ADC专用 //断开GPIO防止GPIO输入输出对模拟电压造成干扰 GPIO_Initstructure.GPIO_Pin GPIO_Pin_0;//即A0口 GPIO_Initstructure.GPIO_Speed GPIO_Speed_50MHz;//输入速度 GPIO_Init (GPIOA, GPIO_Initstructure); //GPIO初始化 ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_7Cycles5); //ADCx指定通道规则组里的次序序列 //指定通道的采样时间参数小转换快不稳定 ADC_InitTypeDef ADC_InitStructure;//定义结构体 ADC_InitStructure.ADC_Mode ADC_Mode_Independent; //独立模式 ADC_InitStructure.ADC_DataAlign ADC_DataAlign_Right; //对齐方式右对齐 ADC_InitStructure.ADC_NbrOfChannel 1; //扫描模式下通道数目1 ADC_InitStructure.ADC_ScanConvMode DISABLE; //扫描模式 单次模式 ADC_InitStructure.ADC_ExternalTrigConv ADC_ExternalTrigConv_None; //外部触发转换选择软件触发 ADC_InitStructure.ADC_ContinuousConvMode ENABLE; //转换模式连续/单次连续 ADC_Init(ADC1, ADC_InitStructure); //初始化结构体 ADC_Cmd(ADC1, ENABLE);//给ADC供电 ADC_ResetCalibration(ADC1);//复位校准 while (ADC_GetResetCalibrationStatus(ADC1) SET);//等待复位校准完成 ADC_StartCalibration(ADC1);//开始校准 while (ADC_GetCalibrationStatus(ADC1) SET);//等待校准完成 } uint16_t AD_GetValue(void) { ADC_SoftwareStartConvCmd(ADC1, ENABLE);//软件触发 while (ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC) RESET);//规则或注入 return ADC_GetConversionValue(ADC1);//返回ADC的值 }2、主函数main.c#include stm32f10x.h // Device header #include Delay.h #include OLED.h #include AD.h uint16_t ADValue; uint16_t TEMP; //分别定义变量 int main(void) { OLED_Init();//OLED初始化 AD_Init();//ADC初始化 OLED_ShowString(1, 1, ADValue:); OLED_ShowString(2, 1, TEMP:); //OLED显示 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//打开时钟 GPIO_InitTypeDef GPIO_Initstructure1; GPIO_Initstructure1.GPIO_ModeGPIO_Mode_Out_PP;//输出模式为推挽输出 GPIO_Initstructure1.GPIO_PinGPIO_Pin_10;//选中引脚A0 GPIO_Initstructure1.GPIO_SpeedGPIO_Speed_50MHz;//输出速度为50MHz GPIO_Init(GPIOB,GPIO_Initstructure1);//用结构体参数来初始化GPIO口 //使用GPIOA while (1) { ADValueAD_GetValue(); OLED_ShowNum(1,9,ADValue,4); TEMP((uint16_t)ADValue-(uint16_t)1002)/(38); //通过excel拟合的函数从而求得的公式 OLED_ShowNum(2,9,TEMP,2); Delay_ms(500);//显示时间延时0.5s GPIO_ResetBits(GPIOB,GPIO_Pin_10);//led默认为灭 if(TEMP60)//判断是否超过60 { while (1) { GPIO_ResetBits(GPIOB,GPIO_Pin_10);//亮 Delay_ms(100); GPIO_SetBits(GPIOB,GPIO_Pin_10);//灭 Delay_ms(100); ADValueAD_GetValue(); if(ADValue3200) //若小于60℃退出循环 break; } } } }数据分析1.求出ntc的ad值通过原ntc温度对应电阻在3.3v的串联电路下求其分压与ad值0~4095对应2.数据拟合将对应数据转换成温度与NTC的ad值对应的曲线并求出曲线的近似函数进而确定温度与adc的对应关系。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询