將單片機項目實訓——51單片機電子秤(語音播報版)分享出來,如有不足,敬請指出。
一、設計要求1.利用單片機對數字電子秤的各種功能進行控制。 2.數字電子秤能夠顯示商品的重量、單價,且自動完成商品總價的計算,可通過語音播報商品總價。 3.數字電子秤的測量范圍要求達到5KG,測量精度要求達到1g。 二、方案設計 (1)設計思路 根據設計要求,首先要實現電子秤的稱重基本功能,需要通過稱重傳感器采集到重量信號,經放大電路處理后,由模數轉換成數字量,因此每一數字量就對應著一個物體的質量(在一定精度范圍內),所以只要將轉換成的數質量與物體質量建立映射關系,即可完成稱重的要求。而其他的功能則可以通過程序運算來實現,并通過鍵盤進行控制。 總體結構框架圖如下所示: 原理圖如下所示: (2)控制器 本系統基于51單片機來實現,因為系統需要控制液晶顯示和鍵盤,不宜采用大規模可編程邏輯器件,如CPLD、FPGA來實現。因為大規模可編程邏輯器件一般是使用狀態機方式來實現的,即所解決的問題都是有規則的有限狀態轉化問題。本系統狀態較多,難度較大。另外系統沒有其他高標準的要求,最終選擇STC89C52RC單片機來實現系統設計,其內部帶有8K的程序存儲器,可以滿足系統設計需求。 (3)數據采集部分 (1)傳感器。傳感器是測量機構最重要的部件,本系統選擇的是電阻應變式壓力傳感器,電阻應變式壓力傳感器主要有彈性體、電阻應變片電纜線等組成。內部線路采用惠斯通電橋,當彈性體承受載荷產生的變形時,電阻應變片受到拉伸或壓縮應變片變形后,它的阻值將會發生變化(增大或減小),從而電橋失去平衡,產生相應的差動信號,供后續電路測量和處理。本系統要求測量范圍是0~4.999Kg,考慮到秤臺自重、振動和沖擊分量,還要避免超重損壞傳感器,所以傳感器量程必須大于額定稱重(4.999Kg),我們選擇的稱重傳感器量程為5Kg,實物如下圖所示。 (2)A/D轉換器。所謂A/D轉換器,是將輸入的模擬信號轉換成數字信號的器件,本設計采用的是HX711,HX711是24位高精度的A/D轉換芯片,是一款專為高精度電子秤設計的,具有兩路模擬通道輸入,內部集成128倍增益可編程放大器,是一款理想的高精度、低成本的設計方案。 (3)液晶顯示部分 由于顯示需要,本系統選擇1602液晶顯示屏。 (4)鍵盤輸入 選用帶有16個按鍵的矩陣鍵盤,其中0 ~ 9數字按鍵、小數點按鍵用于輸入單價;去皮按鍵用于僅顯示物品凈重;刪除按鍵用于刪除物品單價;校準+/校準-按鍵用于調節矯正系數,播報按鍵用于播報物品總價,矩陣鍵盤布局如圖所示。 (5)語音模塊 方案一:采用OTP語音芯片(一次性語音芯片)。一次性的語音芯片在廠家完成燒錄后,語音內容就無法進行更改,所以需要事先和廠家溝通好,需要播報的語音內容,例如: 先將自己可能用到的語音,全部寫入到語音芯片,然后燒寫到語音芯片中。雖然OTP語音芯片不能重復燒寫,但低成本的優勢也讓它占有了一定的市場份額,OTP語音芯片被廣泛應用在兒童玩具、汽車電子、醫療器械、安防報警等行業。作者之前用到的一款OTP語音芯片,成本不超過2元,對于固定內容的播報,建議使用該方案,其硬件連接也很簡單,比如如下圖。 方案二:采用集成的語音模塊,最好可以支持支持 FAT 文件系統、操作簡單類似U盤,但成本是OTP芯片的幾倍。考慮到作者后期作品可能涉及到語音播報,需要為后期作品預留可延續性實驗,所以作者選擇了該方案,電子秤作品中使用的是JQ8400-FL,只需制作好音頻文件,通過類U盤操作拷貝至模塊內存,然后“一線串口”發送文件名(數字)即可播報語音內容。 此芯片最大的優勢在于能夠靈活的更換 SPI-flash 內的語音內容,省去了傳統語音。芯片需要安裝上位機更換語音的麻煩,SPI FLASH 直接模擬成 U 盤,跟拷貝 U 盤一樣,非常方便。使得產品研發和生產變得便捷簡單。一線串口控制模式、RX232 串口控制可選,為研發提供更多的選擇性。 三、軟件設計(1)主程序 (2)流程圖 <1>主程序流程圖 <2>鍵盤掃描程序流程圖 四、圖片展示(1)PCB-3D視圖 (2)實物演示 五、資料鏈接(1)作品演示視頻鏈接 (2)硬件電路分析視頻: (3)軟件程序分析視頻: 六、設計要點 (1)如何實現數據的穩定輸出? 數據的穩定輸出主要依靠兩個方面:①硬件電路;②軟件程序。 ①先分析硬件電路,HX711為24位的AD模塊,對微量的變動非常敏感,所以硬件電路部分一定要注意: 這是作者在設計第一版的電路板的時候的硬件鏈接,設計后完成發現數據輸出不是很穩定,而在E+和E-之間連接一個電解電容,數據的穩定性會有所改善,具體實驗過程如下如下: ①首先,E+和E-之間不連接電解電容,然后放置200g標準砝碼,采用串口打印相關信息,采集20000次數據,重量數據作圖得到: 可以看到,數據穩定性不好,數據范圍在0.199Kg~0.202Kg,上下起伏為0.003Kg,即3g左右誤差。具體統計如下: 也就是正確數據占比為76.295%。(實際上,經過作者實驗,獲取337143次數據,得到的正確數據僅占比46.647%) ②在E+和E-之間連接電解電容,再次實驗,采集20000次數據,數據穩定性如下所示: 可以看到,數據穩定性有所好轉,具體統計如下: 也就是正確數據占比為99.990%。在E+和E-之間連接電解電容,20000次數據中只有2次數據出現異常,數據誤差只是1g,數據準確性達到99.99%,穩定性較好。 綜上所述,建議在E+和E-之間連接電解電容,有利于數據穩定性。 ②再分析軟件程序,對單片機獲取到的重量值,可以采用軟件濾波的方式,獲取到較為穩定的數據,比如多次求值,然后求平均值,當然還有其他很多濾波方式,都可以去實驗,本作品中作者未涉及,有興趣的可以去試著做。 (2)如何保留小數點后兩位有效數字? 該作品程序中,有這樣兩部分代碼,摘抄這兩句代碼在一起。具體舉例分析,假設money最開始等于22.986元,通過 得到money等于22.991元,再通過: 注意這里包含兩次數據類型轉換,第一次money先乘以100得到2299.1,然后強制轉換為unsigned long類型數據,得到的就是2299元,然后再將其類型轉換為float,得到2299.0元,然后除以100,得到的就是22.99元,得到的結果就是四舍五入后保留小數點后兩位的結果。這里巧妙通過加法、兩次數據類型轉換就可以達到想要的結果,注意這些操作很有技巧性。(該方法是作者現有知識體系下較好的方法,如果有其他方法,歡迎留言評論分享) 七、關于作者 |