性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

lihui710884923
認(rèn)證:VIP會(huì)員
所在專題目錄 查看專題
STM32F767ZI 之人工智能(AI) 應(yīng)用
STM32 HAL庫(kù)中斷(繞來繞去)——剖析回調(diào)函數(shù)機(jī)制
stm32如何用虛擬地址存儲(chǔ)數(shù)據(jù)
500A功率采集電路原理和源碼分析
開源之RFID自動(dòng)分揀系統(tǒng)
實(shí)例分析stm32F103逆變器(源碼+硬件)
作者動(dòng)態(tài) 更多
物聯(lián)網(wǎng)專題之NB-IoT項(xiàng)目框架(二)
2024-07-25 11:53
物聯(lián)網(wǎng)專題之介紹(一)
2024-07-11 18:37
單片機(jī)RTC的中斷剖析
2024-03-09 15:28
串口通訊的來龍去脈
2024-02-14 17:32
stm32單片機(jī)的USB燒錄程序
2023-09-08 22:48

開源之RFID自動(dòng)分揀系統(tǒng)

       自動(dòng)化物流系統(tǒng)可以對(duì)庫(kù)存的入庫(kù)、出庫(kù)、移庫(kù)、盤點(diǎn)等操作進(jìn)行全面的控制和管理,對(duì)物品進(jìn)行實(shí)時(shí)分析與控制,為企業(yè)管理者作出正確決策提供依據(jù),將庫(kù)存量減至最優(yōu)存儲(chǔ)量,大幅提高資金流轉(zhuǎn)速度與利用率,降低庫(kù)存成本;從物流效率和管理水平、空間利用率、人工成本、等方面可以看出,自動(dòng)化物流系統(tǒng)與傳統(tǒng)物流系統(tǒng)相比,具有更加明顯的優(yōu)勢(shì)。 

       今天簡(jiǎn)單分享一下物流自動(dòng)化倉(cāng)儲(chǔ)分揀系統(tǒng)的自動(dòng)識(shí)別原理,下面是基本的原理圖:

具體工作原理如下:

主控MCU采用stm32F103C8T6,是目前非常常用的一個(gè)單片機(jī)型號(hào),采用M3內(nèi)核,72M主頻,采用射頻模塊主要是用來獲取RFID標(biāo)簽中的數(shù)據(jù)信息,當(dāng)系統(tǒng)處于主菜單時(shí),按下鍵盤中的OK鍵,啟動(dòng)射頻模塊(拉低SHD引腳)。單片機(jī)通過捕獲EM4095的DEMOD_OUT引腳輸出的曼切斯特碼波形,利用解碼算法獲取當(dāng)前讀入標(biāo)簽的信息。如果讀取到標(biāo)簽的信息,則在屏幕上顯示標(biāo)簽ID號(hào);并通過單片機(jī)TTL串口將數(shù)據(jù)通過wifi模塊發(fā)送給服務(wù)器

一、一鍵啟動(dòng)電路

圖中KEY_COND和EN_A分別與單片機(jī)的IO口相連。其工作原理為:

  • 當(dāng)系統(tǒng)處于關(guān)閉時(shí),EN_A通過R26處于低電平,SP6205穩(wěn)壓器不工作,此時(shí)系統(tǒng)沒有上電。當(dāng)按下電源鍵(KEY_POWER),EN_A為高電平,系統(tǒng)啟動(dòng)。又由于EN_A與IO腳相連,啟動(dòng)后立即將EN_A拉高,這時(shí)抬起電源按鍵,實(shí)現(xiàn)自鎖,系統(tǒng)正常工作。
  • 當(dāng)系統(tǒng)處于運(yùn)行狀態(tài)時(shí)(電源鍵沒有按下),此時(shí)EN_A為高電平,但由于分壓電阻R24,R25的存在,KEY_COND上的電壓只有50mV可以認(rèn)為是低電平,當(dāng)按下電源按鍵,此時(shí)KEY_COND拉高并能被單片機(jī)讀取,當(dāng)抬起電源按鍵后KL25將與EN_A相連的IO腳電平拉低,這時(shí)SP6205停止工作,系統(tǒng)關(guān)閉。

 二、射頻模塊識(shí)別原理

射頻模塊這塊是采用識(shí)別近距離RFID標(biāo)簽并為節(jié)省能源降低功耗,因此選用低頻段RFID技術(shù),選用EM5095芯片作為射頻模塊的主芯片。EM4095是EM MICROELECTRONIC公司開發(fā)的一款CMOS集成的應(yīng)用于100kHz~150kHz頻率的RFID系統(tǒng)的收發(fā)前端芯片,其工作電壓為5V,主要完成的工作是:

EM4095與單片機(jī)連接的信號(hào)有三個(gè)引腳,用于數(shù)據(jù)和時(shí)鐘的傳輸以及系統(tǒng)對(duì)EM4095的驅(qū)動(dòng)和控制:

  • DEMOD_OUT:輸出信號(hào),為EM4095感應(yīng)到線圈上的AM信號(hào)后經(jīng)過解調(diào)后得到的曼徹斯特編碼信號(hào),將之接收并解碼校驗(yàn)后可得到所讀出的標(biāo)簽的值。
  • RDY/CLK:時(shí)鐘信號(hào),為EM4095從天線線圈上提取出的經(jīng)過諧振后的時(shí)鐘頻率,范圍應(yīng)在100kHz-150kHz,而本文所設(shè)計(jì)的系統(tǒng)此頻率在125kHz。
  • SHD:休眠控制信號(hào),此引腳為高電平時(shí),EM4095將被強(qiáng)制進(jìn)入休眠狀態(tài),天線線圈上沒有電流,目的是保護(hù)芯片和節(jié)省能源。
  • EM4095與單片機(jī)的連接方式并不是標(biāo)準(zhǔn)的控制和通信接口,無法利用單片機(jī)任何現(xiàn)成的控制和接口單元對(duì)其進(jìn)行驅(qū)動(dòng)和控制,根據(jù)EM4095的DEMOD_OUT,RDY/CLK和SHD這三個(gè)引腳,并按其數(shù)據(jù)手冊(cè)上工作原理進(jìn)行控制。
  • DEMOD_OUT為EM4095感應(yīng)到線圈上的AM信號(hào)后經(jīng)過解調(diào)后得到的曼徹斯特編碼信號(hào),因此將與DEMOD_OUT引腳連接的單片機(jī)的IO設(shè)置為輸入,將曼徹斯特編碼信號(hào)讀入到單片機(jī)中。
  • RDY/CLK為EM4095的時(shí)鐘信號(hào),主要是在系統(tǒng)啟動(dòng)時(shí),檢測(cè)EM4095芯片能否正常工作。
  • SHD引腳控制的內(nèi)容為EM4095的線圈加電,在不需讀取RFID標(biāo)簽信息時(shí)將SHD引腳拉高,線圈未上電,EM4095不工作;在需要讀取RFID標(biāo)簽信息時(shí)將SHD引腳拉低,EM4095正常工作

三、源碼分析

檢測(cè)方法1).確定起始位,首先要正確找到數(shù)據(jù)1 按規(guī)則下跳為1 上跳為0. 可檢測(cè)高電平并等其變低 但這會(huì)把0錯(cuò)檢為1因?yàn)?也存在高電平。但是如果檢測(cè)到一個(gè)周期的高電平(數(shù)據(jù)01)則可 確定找到了數(shù)據(jù)1,找到1后就可以同步了,因?yàn)镋M4100卡最后一位數(shù)據(jù)就是0正好可以利用 作為判斷的特征。

2).對(duì)于數(shù)據(jù)的確定,由于有了同步則可在同步后延時(shí)384us即3/4個(gè)碼原周期在判斷接受段電平如何 如為高則置數(shù)據(jù)為1,并一直等到低電平的出現(xiàn),相反則等高電平的出現(xiàn),并在此之間插入超時(shí) 判斷。這樣,一個(gè)完整的數(shù)據(jù)判斷就完成了,并確保數(shù)據(jù)的準(zhǔn)確性,另外這種方法的抗干擾性 會(huì)非常好,而如果采用定時(shí)同步的話則會(huì)因信號(hào)的畸變而引起數(shù)據(jù)出錯(cuò),整體會(huì)導(dǎo)致讀卡幾率降低 但是此程序也有其缺點(diǎn),因?yàn)椴捎眉冄訒r(shí)判斷的手段,因此其占用單片機(jī)的運(yùn)行時(shí)間比較大。

3).同步后開始接受同步數(shù)據(jù)即9個(gè)1,這一部分用一個(gè)循環(huán)做,如果出錯(cuò)則放棄接收

4).同步數(shù)據(jù)接收完后,則開始接受數(shù)據(jù),數(shù)據(jù)分11行5列接收以利于校驗(yàn)位的判斷 如有出錯(cuò)則放棄數(shù)據(jù)

5).如一切正常則返回卡號(hào),如因嘗試讀卡次數(shù)到了則返回0以表示沒有識(shí)別到標(biāo)簽

//讀取卡號(hào),
ulong Read_Card()
{
	uchar i=0;	//起始為的計(jì)數(shù)值
	uchar error;  //時(shí)間溢出的計(jì)數(shù)值
	uchar error_flag; //時(shí)間溢出標(biāo)志
	uchar row,col;	  //行列寄存器
	uchar row_parity;  //行校驗(yàn)寄存器
	uchar col_parity[5]; //列校驗(yàn)寄存器
	uchar _data;		//數(shù)據(jù)寄存器
	ulong temp;			//卡號(hào)寄存器
	ulong timeout=0;	 //搜索次數(shù)寄存器
	while(1)
	{		
		if(timeout==10)return 0;//嘗試10次搜索,如沒有責(zé)返回0
		else timeout++;
		error=0;
		while(Manchester_IN==0)//等高電平
		{
			if(error==TIME_OF)break;//超時(shí)退出
			else error++;
		} 	
		if(error==100)continue;//結(jié)束本次主循環(huán)
		else error=0;	
		Delay384us();	  
		if(Manchester_IN)//尋找真正的1起始位,利用01的波形確定1起始位,即最后一位加第一位
		{	 
			for(i=0;i<8;i++)//判斷是否是真的起始位
			{	  
				error=0;	   //限定等待時(shí)間
				while(Manchester_IN)
				{	
					if(error==TIME_OF)
					{	  
						error_flag=1;//時(shí)間溢出
						break;	//退出
					}
					else error++;
				}	 
				Delay384us();				   //延時(shí)至下一碼原
				if(Manchester_IN&&error_flag==0); //判斷下一位是否為1 和是否沒有時(shí)間溢出
				else break;			 //不是1退出,溢出退出			   
			}
			if(error_flag)//因時(shí)間溢出造成的本次主循環(huán)退出
			{	  
				error_flag=0;
				continue;	//退出本次循環(huán)
			}
			else;
			if(i==8)  //起始位接受完并且正確后開始接受數(shù)據(jù)
			{	
				error_flag=0;
				error=0;	 //限定等待時(shí)間
				while(Manchester_IN)
				{  
					if(error==TIME_OF)
					{	
						error_flag=0;
						break;		 //時(shí)間溢出造成的出錯(cuò)
					}
					else error++;
				}	  
				if(error_flag)	   
				{
					error_flag=0;
					continue;	   //因等待待第一個(gè)正式數(shù)據(jù)錯(cuò)誤引起的本次主循環(huán)退出
				}
				else; 
				//所有列校驗(yàn)清零
				col_parity[0]=col_parity[1]=col_parity[2]=col_parity[3]=col_parity[4]=0;
				for(row=0;row<11;row++)	//共11行數(shù)據(jù)
				{
					for(col=0,row_parity=0/*行校驗(yàn)清零*/;col<5;col++)//共5列數(shù)據(jù)
					{
						Delay384us();  //延時(shí)至下一碼原
						if(Manchester_IN)_data=1;  //數(shù)據(jù)為1
						else _data=0;			   //數(shù)據(jù)為0
						if(col<4&&row<10)		   //數(shù)據(jù)區(qū)的接受,后四個(gè)字節(jié)
						{
							temp<<=1;			 //左移一位
							temp+=(ulong)_data;	 //數(shù)據(jù)相加
						}
						else;
						row_parity+=_data;		 //行校驗(yàn)加入數(shù)據(jù)
						col_parity[col]+=_data;	 //相應(yīng)列校驗(yàn)加入數(shù)據(jù)  雖最后一列沒有校驗(yàn)但為了方便也加上
						error=0;				 //限定等待時(shí)間清零
						while(Manchester_IN==(bit)_data)
						{
							if(error==TIME_OF)		  //由于時(shí)間溢出造成的數(shù)據(jù)出錯(cuò)
							{	
								error_flag=1;
								break;			  //退出本while循環(huán)
							}
							else error++;
						}
						if(error_flag)break;	 //出錯(cuò)退出內(nèi)層for循環(huán)
						else;
					}
					if(row<10)//最后一行沒有校驗(yàn)所以要加限制
					{
						if((row_parity&0x01)||error_flag) //出錯(cuò)退出外for循環(huán)
						{
							temp=0;
							error_flag=1; 
							break;			 //退出
						}
						else;
					}
					else; 	 
				}

				//對(duì)最后接收的列校驗(yàn)進(jìn)行判斷,及對(duì)來自上面數(shù)據(jù)錯(cuò)誤error_flag處理以結(jié)束本次主循環(huán)
				if(error_flag||((col_parity[0]&0x01)&&(col_parity[1]&0x01)&&(col_parity[2]&0x01)&&(col_parity[3]&0x01)))
				{	//最后一列沒有校驗(yàn)												 
					error_flag=0;
					temp=0;
					continue; //退出本次循環(huán)
				} 
				else return temp;//將正確的數(shù)據(jù)返回
			}
			continue;
		}
		continue;
	}
}

 四、OLED顯示

OLED顯示貨物識(shí)別狀態(tài)信息,采用SPI串口的通訊模式控制數(shù)據(jù)的傳輸和顯示,OLED模塊與單片機(jī)連接的引腳共有4個(gè),分別為OLED_RST,OLED_DC,OLED_SCK,OLED_SDA。

  • OLED_RST為OLED模塊的復(fù)位引腳,低電平時(shí)OLED模塊復(fù)位;
  • OLED_DC控制寫入的是數(shù)據(jù)是控制命令還是普通的點(diǎn)陣數(shù)據(jù)。當(dāng)OLED_DC拉高時(shí),寫入的數(shù)據(jù)為顯示的點(diǎn)陣數(shù)據(jù);當(dāng)OLED_DC拉低時(shí),寫入的數(shù)據(jù)為OLED的控制命令;
  • OLED_SCK為單片機(jī)與OLED通信的時(shí)鐘信號(hào)線;
  • OLED_SDA為單片機(jī)與OLED通信的數(shù)據(jù)信號(hào)線。

配套資料中有射頻模塊的驅(qū)動(dòng)程序,歡迎下載。

聲明:本內(nèi)容為作者獨(dú)立觀點(diǎn),不代表電子星球立場(chǎng)。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請(qǐng)聯(lián)系:editor@netbroad.com
本篇所含全部資料,點(diǎn)擊此處留下郵箱我會(huì)發(fā)給你
資料明細(xì):EM4095程序.zip
覺得內(nèi)容不錯(cuò)的朋友,別忘了一鍵三連哦!
贊 16
收藏 14
關(guān)注 210
成為作者 賺取收益
全部留言
0/200
  • dy-cPiyiCjU 1星期前
    老師,能不能發(fā)我一下資料,謝謝! 19****@****.com
    回復(fù) 1條回復(fù)
  • dy-TECDKeT4 01-06 16:19
    老師,能不能發(fā)我一下資料,謝謝! 64****@****.com
    回復(fù) 1條回復(fù)
  • dy-SFyTWSiE 2024-12-05 14:53
    老師,能不能發(fā)我一下資料,謝謝! 21****@****.com
    回復(fù) 1條回復(fù)
  • dy-nE83KiaB 2024-11-01 15:22
    老師,能不能發(fā)我一下資料,謝謝! 30****@****.com
    回復(fù) 1條回復(fù)
  • dy-LkxDbaui 2024-10-14 13:44
    老師,能不能發(fā)我一下資料,謝謝! 56****@****.com
    回復(fù) 1條回復(fù)
  • dy-pNaswETU 2024-09-06 13:38
    老師,能不能發(fā)我一下資料,謝謝! 10****@****.com
    回復(fù) 1條回復(fù)
  • dy-4rAI7YxR 2024-07-11 10:07
    老師,能不能發(fā)我一下資料,謝謝! xi****@****.com
    回復(fù) 1條回復(fù)
  • dy-C7cTljnX 2024-04-10 08:22
    老師,能不能發(fā)我一下資料,謝謝! 53****@****.com
    回復(fù) 1條回復(fù)
  • 不吃土豆D 2024-01-23 22:32
    老師,能不能發(fā)我一下資料,謝謝! 25****@****.com
    回復(fù) 1條回復(fù)
  • 不吃土豆D 2024-01-23 22:31
    老師,能發(fā)我一下資料嘛?學(xué)習(xí)一下,謝謝您!
    回復(fù)
  • dy-GQGIEwxK 2024-01-22 15:01
    老師,能不能發(fā)我一下資料,謝謝! 98****@****.com
    回復(fù) 1條回復(fù)
  • sdll825 2023-03-16 14:45
    老師,能不能發(fā)我一下資料,謝謝! sd****@****.com
    回復(fù) 1條回復(fù)
  • dy-52CNfgif 2023-03-05 17:51
    老師,有沒有更詳細(xì)的資料,我想做一下這個(gè)試試
    回復(fù)
  • dy-52CNfgif 2023-03-05 15:44
    老師,能不能發(fā)我一下資料,謝謝! 25****@****.com
    回復(fù) 1條回復(fù)
  • dy-AADLTwmq 2023-01-15 14:05
    老師,能不能發(fā)我一下資料,謝謝! da****@****.com
    回復(fù) 1條回復(fù)
  • dy-UjjuYBCc 2022-09-16 10:44
    老師,能不能發(fā)我一下資料,謝謝! 38****@****.com
    回復(fù) 1條回復(fù)
  • 小董 2021-03-09 09:35
    佩服樓主
    回復(fù)
  • dy-blNlwnWV 2021-02-24 23:07
    請(qǐng)教一下
    回復(fù)
  • liuxiaofei126 2021-01-30 19:44
    開源不錯(cuò)
    回復(fù)
  • 星球居民-YBPLIKJ1 2021-01-24 12:59
    挺好的
    回復(fù)