之前我們主要介紹了仿真電路的一些知識,對於硬體方面的知識,我們在進行單片機學習時還是要不斷跟著學習,當然,仿真電路中的元件,有時候會誤導我們,跟我們預期的不一致,不一定是我們的設計問題,也許是仿真的問題,所以如果對於簡單的可以練習的電路,建議還是要用實際電路來仿真一下,軟體仿真只是一個輔助。
在這裡說明一下情況,由於家裡的小寶貝會爬了,為了防止他把細小的電子器件吞入口中,我把硬體元件收了起來,過段時間會定製一個柜子,等柜子好了,再把之前沒有進行硬體仿真的一個一個得過一遍。所以接下來的日子裡就只能靠著仿真軟體過日子了。手頭有東西可以仿真的,仿真後有什麼問題可以留言,我們共同去查看問題原因,一起學習。
這是我們仿真的電路圖。
行吊遙控電路相對簡單,輸入輸出也比較少,於是我們會從三個方面來進行程序的編寫。
第一個:單個按鍵定義的方法。
按鍵定義後,我們寫下運行的代碼。
首先是定義了一個中間變量,為了防止開機啟動,所以需要對m等於1操作,接著將P1埠統一置1,這是為了讀取按鍵所必須的操作。然後是判斷開機按鍵是否按下,如果按下,就將中間變量m=0,同時將電源輸出埠置0,從電路圖上可以看出,置0後三極體導通,繼電器吸合,正極導通。
然後判斷急停按鍵是否按下,若是按下,就將m=1,清空輸出的所有操作。
循環函數中是按鍵的控制操作,進入循環的條件是中間函數等於0,這樣當開機時,m=1,就不會進入按鍵操作函數,按鍵按下功能鍵也不會誤操作。
當進入循環函數後,會繼續進入循環,條件是功能鍵是否按下,例如當向下按鍵按下,就會進入向下的循環函數,當按鍵鬆開,會進入判斷是否急停,如果沒有急停就會清空功能埠的電位,僅留下電源埠。
在循環中添加急停按鍵的判斷,是為了防止功能按鍵循環中無法退出循環,造成無法關機。
這個行吊的操作中,是無法同時進行兩個動作的,例如同時向下和向東,實際生產中,部分行吊是可以同時動作的,大家可以思考下如何對代碼進行改動。
代碼寫完,我們需要進行輸出可執行文件,就是「***.hex」文件,一定要記得修改debug中的參數,選中輸出可執行文件這一項,否則就無法找到這個文件,就沒有辦法仿真了。
成功輸出後,會在下方的提示框中顯示,倒數第三行的那句話,就是說:輸出了可執行文件到「文件地址」。
說這麼多是因為有同學從中間開始看的文章,沒有看前期的介紹,於是有些地方會不熟悉。沒事,不會就多說兩遍。學習就是學會為止。我們又沒有績效,也沒有學分,哈哈哈。
這是運行後的狀態,總電源繼電器斷開,每個電機都沒有轉動。我們嘗試按下其中一個功能鍵,測試下,是否會動作。
我按下了東這個按鍵,輸入已經拉低,但是顯然輸出均為高電位,程序沒有輸出,程序目前沒有問題。我們繼續測試,按下開始鍵。
按下後,繼電器吸合,電源接通。並保持。
按下向上鍵,電機顯示為正值不斷增加,鬆開後電機停止,符合我們的預定設計。接下來需要對下和東西南北進行操作,查看狀態是否正常。
圖片太多就不作貼圖了我們測試後,沒有異常情況發生,一切與代碼運行設計一致,當然還是有不足之處,例如,當我們運行向上時,如果此時上鍵出現損壞,導致出現問題,需要停止,此時,因為程序中在執行向上的語句,就無法完成急停的操作,我們就無法將問題停止,會造成事故的繼續加劇。為此我們需要對代碼進行優化。
之前是通過循環語句,來判斷是否按下,如果按下就停在循環語句中,接下來我們使用if判斷語句來寫,這樣,判斷按鍵按下後,就不會一直停留在語句中,會跳出判斷,流程結束會再次判斷。在流程中添加急停語句就可以了。
程序代碼修改為了使用if和else if語句,南北,東西,上下使用else if可以保證不會同時動作,然後我又添加了P2=P2|0xf0;這個語句,是說,讓輸出去或上0xf0,因為頭四位中,前兩位是電源輸出控制,所以不用控制,用0去保持原有狀態,P2.2和P2.3是上下,由於需要動作,所以就需要0去保持現有操作,而其他的四位是東西南北,此時無需動作,所以就需要清空操作,全部置1.
如果我們不添加這一句,那麼就會出現前文所說的,我們可以既操作南北,又操作上下,同時動作。這要根據實際情況,看控制要求了。
最後除了急停語句,我又添加了一句if(P1==0xff){P2=0xfe;},這句是為了我們在鬆開按鍵時,保證所有動作停止,因為行吊不允許自鎖運行,要做到按鍵按下工作,按鍵鬆開停止,這就是為了安全,同時可以在工作中通過點按,來實現小幅度的近似精確移動。
代碼更改後,我們再次驗證下效果,不過為了保持一個按鍵損壞的狀態,我們需要一個按鍵一直接地。然後再按下急停,看下是否會出現繼續運行的情況。
對向北按鍵進行了短路,當按下開始,電機就開始旋轉。
按下急停後,儘管向北按鍵還在短路狀態,但是電機已經停止轉動,因為電源斷開了。這就保證了作業的安全。生產生活中,安全才是第一位。
寫的篇幅又長了,再分一篇吧,不然太長看著眼疼。