加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專(zhuān)業(yè)用戶(hù)
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入

基于STM32單片機(jī)水位檢測(cè)系統(tǒng)仿真設(shè)計(jì)

08/02 09:12
2109
服務(wù)支持:
技術(shù)交流群

完成交易后在“購(gòu)買(mǎi)成功”頁(yè)面掃碼入群,即可與技術(shù)大咖們分享疑惑和經(jīng)驗(yàn)、收獲成長(zhǎng)和認(rèn)同、領(lǐng)取優(yōu)惠和紅包等。

虛擬商品不可退

當(dāng)前內(nèi)容為數(shù)字版權(quán)作品,購(gòu)買(mǎi)后不支持退換且無(wú)法轉(zhuǎn)移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論
放大
實(shí)物圖
相關(guān)方案
  • 方案介紹
  • 相關(guān)文件
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

本設(shè)計(jì)基于STM32單片機(jī)水位檢測(cè)系統(tǒng)仿真設(shè)計(jì)(proteus仿真+程序)

仿真圖proteus 8.11

程序編譯器:keil 5

編程語(yǔ)言:C語(yǔ)言

設(shè)計(jì)編號(hào):C0046

主要功能

1.使用滑動(dòng)變阻器模擬水位監(jiān)測(cè)器,通過(guò)改變電壓值表示水位的變化。

2.單片機(jī)顯示水位的檢測(cè)值,同時(shí)顯示水泵的工作狀態(tài)。

3.stm32通過(guò)ADC檢測(cè)電壓值和設(shè)定的閾值比較,低于閾值則驅(qū)動(dòng)電機(jī)轉(zhuǎn)動(dòng),同時(shí)通過(guò)led表示水泵狀態(tài)。

資料下載

仿真圖

image-20220821121732591

程序(提供源文件源碼)

image-20220821121803449

main函數(shù)

主要完成ADC的初始化,延時(shí)函數(shù)的初始化,LED燈初始化,LCD1602的初始化,在while循環(huán)中讀取ADC的值,完成對(duì)水泵的控制。

int main(void)
{	 
	u16 ADCValue;
	float voltage;
	u8 Mflag=2;
	u8 OPENflag=0;	//起初代表水泵關(guān)
	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;//計(jì)算電壓
		H=(10000*voltage)/33;
		if(H>400) //40%  閾值
		{
		  display2();
		  Mflag=1;		//儲(chǔ)水量足夠,關(guān)閉水泵
		}
		else
	   {
		 display1();
		 Mflag=0;	//儲(chǔ)水量不足夠,需要啟動(dòng)水泵
	   }  
	   if(Mflag==1&&OPENflag==1)
		{ 
		   	LED1=1;
           	LED2=0;
			MOTOR=1;//關(guān)閉水泵
		    Mflag=2;
		    OPENflag=0;	 //已經(jīng)關(guān)好
		}
		else if(Mflag==0&&OPENflag==0)
	   {
		   LED1=0;
           LED2=1;
		   MOTOR=0;//開(kāi)水泵
		   Mflag=2; 
		   OPENflag=1;	  //已經(jīng)開(kāi)好
           
	   }
	}
}

ADC轉(zhuǎn)換驅(qū)動(dòng)

初始化ADC通道。

 #include "adc.h"
 #include "delay.h"	   
		   
//初始化ADC
//這里我們僅以規(guī)則通道為例
//我們默認(rèn)將開(kāi)啟通道0~3																	   
void  Adc_Init(void)
{ 	
	ADC_InitTypeDef ADC_InitStructure; 
	GPIO_InitTypeDef GPIO_InitStructure;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1	, ENABLE );	  //使能ADC1通道時(shí)鐘
 

	RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //設(shè)置ADC分頻因子6 72M/6=12,ADC最大時(shí)間不能超過(guò)14M

	//PA1 作為模擬通道輸入引腳                         
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;		//模擬輸入引腳
	GPIO_Init(GPIOA, &GPIO_InitStructure);	

	ADC_DeInit(ADC1);  //復(fù)位ADC1,將外設(shè) ADC1 的全部寄存器重設(shè)為缺省值

	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;	//ADC工作模式:ADC1和ADC2工作在獨(dú)立模式
	ADC_InitStructure.ADC_ScanConvMode = DISABLE;	//模數(shù)轉(zhuǎn)換工作在單通道模式
	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;	//模數(shù)轉(zhuǎn)換工作在單次轉(zhuǎn)換模式
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;	//轉(zhuǎn)換由軟件而不是外部觸發(fā)啟動(dòng)
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;	//ADC數(shù)據(jù)右對(duì)齊
	ADC_InitStructure.ADC_NbrOfChannel = 1;	//順序進(jìn)行規(guī)則轉(zhuǎn)換的ADC通道的數(shù)目
	ADC_Init(ADC1, &ADC_InitStructure);	//根據(jù)ADC_InitStruct中指定的參數(shù)初始化外設(shè)ADCx的寄存器   

  
	ADC_Cmd(ADC1, ENABLE);	//使能指定的ADC1
	
	ADC_ResetCalibration(ADC1);	//使能復(fù)位校準(zhǔn)  
	 
//	while(ADC_GetResetCalibrationStatus(ADC1));	//等待復(fù)位校準(zhǔn)結(jié)束
	
	ADC_StartCalibration(ADC1);	 //開(kāi)啟AD校準(zhǔn)
 
//	while(ADC_GetCalibrationStatus(ADC1));	 //等待校準(zhǔn)結(jié)束
 
}				  
//獲得ADC值
//ch:通道值 0~3
u16 Get_Adc(u8 ch)   
{
  	//設(shè)置指定ADC的規(guī)則組通道,一個(gè)序列,采樣時(shí)間
	ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );	//ADC1,ADC通道,采樣時(shí)間為239.5周期	  			    
  
	ADC_SoftwareStartConvCmd(ADC1, ENABLE);		//使能指定的ADC1的軟件轉(zhuǎn)換啟動(dòng)功能	
	 
	while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待轉(zhuǎn)換結(jié)束

	return ADC_GetConversionValue(ADC1);	//返回最近一次ADC1規(guī)則組的轉(zhuǎn)換結(jié)果
}

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;
} 	 

  • 設(shè)計(jì)資料獲取聯(lián)系方式.doc

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
ATXMEGA128A1U-AUR 1 Atmel Corporation RISC Microcontroller, 16-Bit, FLASH, AVR RISC CPU, 32MHz, CMOS, PQFP100, TQFP-100
$73.57 查看
LPC1768FBD100K 1 NXP Semiconductors RISC Microcontroller

ECAD模型

下載ECAD模型
$17.16 查看
DSPIC30F6014A-30I/PT 1 Microchip Technology Inc 16-BIT, FLASH, 30 MHz, RISC MICROCONTROLLER, PQFP80, 12 X 12 MM, 1 MM HEIGHT, PLASTIC, MS-026, TQFP-80

ECAD模型

下載ECAD模型
$12 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜