加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入

基于STM32单片机水位检测系统仿真设计

08/02 09:12
1187
服务支持:
技术交流群

完成交易后在“购买成功”页面扫码入群,即可与技术大咖们分享疑惑和经验、收获成长和认同、领取优惠和红包等。

虚拟商品不可退

当前内容为数字版权作品,购买后不支持退换且无法转移使用。

加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
放大
实物图
相关方案
  • 方案介绍
  • 相关文件
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

本设计基于STM32单片机水位检测系统仿真设计(proteus仿真+程序)

仿真图proteus 8.11

程序编译器:keil 5

编程语言:C语言

设计编号:C0046

主要功能

1.使用滑动变阻器模拟水位监测器,通过改变电压值表示水位的变化。

2.单片机显示水位的检测值,同时显示水泵的工作状态。

3.stm32通过ADC检测电压值和设定的阈值比较,低于阈值则驱动电机转动,同时通过led表示水泵状态。

资料下载

仿真图

image-20220821121732591

程序(提供源文件源码)

image-20220821121803449

main函数

主要完成ADC的初始化,延时函数的初始化,LED灯初始化,LCD1602的初始化,在while循环中读取ADC的值,完成对水泵的控制。

int main(void)
{	 
	u16 ADCValue;
	float voltage;
	u8 Mflag=2;
	u8 OPENflag=0;	//起初代表水泵关
	delay_init();	    	 	  
	Adc_Init();		  	
	GPIO_InitStructReadtempCmd();
	MotoR_GPIO();
	lcd_system_reset();
	LED1=1;
	LED2=0;
	MOTOR=1;
	while(1)
	{
	    ADCValue=Get_Adc_Average(ADC_Channel_0,10);
		voltage=((float)ADCValue/4096)*3.3;//计算电压
		H=(10000*voltage)/33;
		if(H>400) //40%  阈值
		{
		  display2();
		  Mflag=1;		//储水量足够,关闭水泵
		}
		else
	   {
		 display1();
		 Mflag=0;	//储水量不足够,需要启动水泵
	   }  
	   if(Mflag==1&&OPENflag==1)
		{ 
		   	LED1=1;
           	LED2=0;
			MOTOR=1;//关闭水泵
		    Mflag=2;
		    OPENflag=0;	 //已经关好
		}
		else if(Mflag==0&&OPENflag==0)
	   {
		   LED1=0;
           LED2=1;
		   MOTOR=0;//开水泵
		   Mflag=2; 
		   OPENflag=1;	  //已经开好
           
	   }
	}
}

ADC转换驱动

初始化ADC通道。

 #include "adc.h"
 #include "delay.h"	   
		   
//初始化ADC
//这里我们仅以规则通道为例
//我们默认将开启通道0~3																	   
void  Adc_Init(void)
{ 	
	ADC_InitTypeDef ADC_InitStructure; 
	GPIO_InitTypeDef GPIO_InitStructure;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1	, ENABLE );	  //使能ADC1通道时钟
 

	RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14M

	//PA1 作为模拟通道输入引脚                         
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;		//模拟输入引脚
	GPIO_Init(GPIOA, &GPIO_InitStructure);	

	ADC_DeInit(ADC1);  //复位ADC1,将外设 ADC1 的全部寄存器重设为缺省值

	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;	//ADC工作模式:ADC1和ADC2工作在独立模式
	ADC_InitStructure.ADC_ScanConvMode = DISABLE;	//模数转换工作在单通道模式
	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;	//模数转换工作在单次转换模式
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;	//转换由软件而不是外部触发启动
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;	//ADC数据右对齐
	ADC_InitStructure.ADC_NbrOfChannel = 1;	//顺序进行规则转换的ADC通道的数目
	ADC_Init(ADC1, &ADC_InitStructure);	//根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器   

  
	ADC_Cmd(ADC1, ENABLE);	//使能指定的ADC1
	
	ADC_ResetCalibration(ADC1);	//使能复位校准  
	 
//	while(ADC_GetResetCalibrationStatus(ADC1));	//等待复位校准结束
	
	ADC_StartCalibration(ADC1);	 //开启AD校准
 
//	while(ADC_GetCalibrationStatus(ADC1));	 //等待校准结束
 
}				  
//获得ADC值
//ch:通道值 0~3
u16 Get_Adc(u8 ch)   
{
  	//设置指定ADC的规则组通道,一个序列,采样时间
	ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );	//ADC1,ADC通道,采样时间为239.5周期	  			    
  
	ADC_SoftwareStartConvCmd(ADC1, ENABLE);		//使能指定的ADC1的软件转换启动功能	
	 
	while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束

	return ADC_GetConversionValue(ADC1);	//返回最近一次ADC1规则组的转换结果
}

u16 Get_Adc_Average(u8 ch,u8 times)
{
	u32 temp_val=0;
	u8 t;
	for(t=0;t<times;t++)
	{
		temp_val+=Get_Adc(ch);
		delay_ms(5);
	}
	return temp_val/times;
} 	 

 Get_Adc_Average(u8 ch,u8 times)
{
	u32 temp_val=0;
	u8 t;
	for(t=0;t<times;t++)
	{
		temp_val+=Get_Adc(ch);
		delay_ms(5);
	}
	return temp_val/times;
} 	 

  • 设计资料获取联系方式.doc

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
MK66FN2M0VLQ18 1 NXP Semiconductors FLASH, 180MHz, RISC MICROCONTROLLER, PQFP144

ECAD模型

下载ECAD模型
$48.66 查看
ATSAMA5D31A-CU 1 Atmel Corporation RISC Microprocessor, 32-Bit, 536MHz, CMOS, PBGA324, 15 X 15 MM, 1.40 MM HEIGHT, 0.80 MM PITCH, GREEN, MO-275KAAE-1, LFBGA-324

ECAD模型

下载ECAD模型
$22.61 查看
AT89C51CC03UA-RDTUM 1 Atmel Corporation Microcontroller, 8-Bit, FLASH, 8051 CPU, 60MHz, CMOS, PQFP64, GREEN, VQFP-64

ECAD模型

下载ECAD模型
$9.5 查看

相关推荐

电子产业图谱