蘇紅衛(wèi)
摘要:螺絲是緊固件的通用說法,是日常生活中不可或缺的工業(yè)必需品,目前多數(shù)產(chǎn)品上的螺絲仍是操作工手動鎖緊,如果需鎖緊螺絲數(shù)量較多的話,容易漏打、錯打。該文以C語言為編程語言,圍繞以STM8S903K3為主的硬件電路功能,對序列打螺絲夾具進行了軟件設(shè)計說明,文章首先提出了序列打螺絲夾具軟件設(shè)計的總體思路,然后對序列打螺絲夾具的主要功能函數(shù)進行了重點設(shè)計說明,最后對軟件設(shè)計調(diào)試結(jié)果進行說明。該軟件設(shè)計在硬件設(shè)計的基礎(chǔ)上進行了實驗調(diào)試和實際操作,并已投入實際應(yīng)用中,實際解決了螺絲數(shù)量較多時按統(tǒng)一順序鎖緊,防止錯打、漏打的問題,具備很大的推廣價值。
關(guān)鍵詞:軟件設(shè)計;序列夾具;順序鎖緊
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 章編號:1009-3044(2016)25-0080-03
基于STM8S903K3的序列打螺絲夾具中功能的設(shè)定、螺絲鎖緊的選擇、信息數(shù)據(jù)的處理存儲、加工信息的顯示、工作數(shù)據(jù)通信、報警等一系列功能是根據(jù)STM8S903K3單片機的特點及硬件電路的設(shè)計而通過C語言編程來實現(xiàn)的。
1 系統(tǒng)軟件設(shè)計
1.1 系統(tǒng)設(shè)計總流程
開機后,先對各硬件端口進行初始化,然后讀取撥碼開關(guān)數(shù)據(jù)來確定需要鎖緊螺絲數(shù)目,之后按循序點亮指示燈,系統(tǒng)自檢(自檢中出現(xiàn)錯誤時會發(fā)出報警聲音提示錯誤);系統(tǒng)自檢后,RESET指示燈亮,為鎖緊螺絲做好準(zhǔn)備。
需要鎖緊螺絲工作時,先用螺絲刀碰觸RESET位置,第一個螺絲位置的指示燈亮,螺絲刀碰觸到第一個螺絲的導(dǎo)柱時產(chǎn)生signal in信號輸入單片機,單片機接收后將SET置1輸出電動起子允許工作信號,當(dāng)螺絲擰到要求的扭矩后,電動起子控制器會發(fā)出一個BZ信號給單片機,單片機再接收到該信號后,關(guān)閉單片機輸出信號并通過點亮FirstHC595SendData函數(shù)第2個螺絲的提示燈,重復(fù)上述動作。
設(shè)計中有一個三位的撥碼開關(guān)用來設(shè)置總螺絲的數(shù)量,例如設(shè)置為48個螺絲,那么在第48個螺絲鎖緊后,RESET指示燈亮,返回初始化狀態(tài)(此時RESET位置沒有鎖螺絲確認(rèn)信號,即只有螺絲刀觸碰到該位置后才點亮第1個螺絲指示燈)。
在鎖螺絲時,假如應(yīng)該鎖第3個螺絲,而實際上螺絲刀在其他螺絲位置時,此時螺絲刀不啟動,并發(fā)出報警聲音提示錯誤。
程序設(shè)計總流程圖如圖1所示:
1.2 硬件初始化操作
系統(tǒng)的硬件進行初始化包括系統(tǒng)時鐘配置初始化Clock_init()、指示燈端口初始化GPIO_LEDInit()和功能端口(編碼器端口、蜂鳴器端口、BZ端口、SET端口、RESET端口、Signal In端口、功能選擇端口、74HC595端口)初始化General_IO_init()。截取程序段如下:
void General_IO_init(void)
{ /**編碼器端口初始化**/
GPIO_Init(GPIOB,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, GPIO_MODE_IN_PU_NO_IT);
GPIO_Init(GPIOC,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5,GPIO_MODE_IN_PU_NO_IT);
GPIO_Init(GPIOE, GPIO_PIN_5,GPIO_MODE_IN_PU_NO_IT);
/**蜂鳴器端口初始化**/
GPIO_Init(GPIOA, GPIO_PIN_1, GPIO_MODE_OUT_PP_HIGH_FAST);
/**BZ端口初始化**/
GPIO_Init(GPIOC, GPIO_PIN_6, GPIO_MODE_IN_PU_IT); /**改為中斷方式**/
/**SET端口初始化**/
GPIO_Init(GPIOC, GPIO_PIN_7, GPIO_MODE_OUT_PP_LOW_FAST);
/**ER BZ端口初始化**/
GPIO_Init(GPIOB, GPIO_PIN_5, GPIO_MODE_IN_PU_IT); /**改為中斷方式**/
/**RESET端口初始化---RESET螺絲刀控制器**/
GPIO_Init(GPIOB, GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_FAST);
/**為了不影響PC6的中斷響應(yīng),特意初始化沒有使用的PC0管腳**/
GPIO_Init(GPIOC, GPIO_PIN_0, GPIO_MODE_OUT_PP_HIGH_FAST);
/**signal_in端口初始化**/
GPIO_Init(GPIOA, GPIO_PIN_2, GPIO_MODE_IN_PU_NO_IT);
/**功能選擇端口初始化**/ /**74HC595端口初始化**/
GPIO_Init(GPIOD,GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, GPIO_MODE_OUT_PP_HIGH_FAST);
/**Reset_IO CLKIN**/
GPIO_Init(GPIOD, GPIO_PIN_0, GPIO_MODE_OUT_PP_HIGH_FAST);
}
1.3 讀撥碼開關(guān)的流程
程序中,利用ReadCounterNum函數(shù)讀取撥碼開關(guān)的數(shù)據(jù)設(shè)定值,分辨對撥碼開關(guān)的個位、十位、百位數(shù)據(jù)進行設(shè)置和讀取。讀取個位數(shù)據(jù)程序段如下:
/**讀取個位數(shù)據(jù)**/
bit_status = GPIO_ReadInputPin(GPIOC, GPIO_PIN_2); //DC1-8 8
if (bit_status == RESET) //SET or RESET
wCodeNum +=8; }
bit_status = GPIO_ReadInputPin(GPIOC, GPIO_PIN_3); //DC1-4 4
if (bit_status == RESET) //SET or RESET
wCodeNum +=4;
bit_status = GPIO_ReadInputPin(GPIOC, GPIO_PIN_4); //DC1-2 2
if (bit_status == RESET) //SET or RESET
wCodeNum +=2;
bit_status = GPIO_ReadInputPin(GPIOC, GPIO_PIN_5); //DC1-1 1
if (bit_status == RESET) //SET or RESET
wCodeNum +=1;
對于十位數(shù)據(jù)和百威數(shù)據(jù)的讀取流程與個位數(shù)據(jù)的讀取一致,只是對應(yīng)位數(shù)據(jù)不同,十位數(shù)據(jù)對應(yīng)位數(shù)據(jù)分別是128、64、32、16,百位數(shù)據(jù)對應(yīng)位數(shù)據(jù)分別是2048、1024、512、256。
1.4 Signal in 信號的處理
Signal in 信號的處理通過TimeDo函數(shù)來實現(xiàn)。TimeDo函數(shù)中,每500ms掃描一次signal in信號,如果signal in信號來自RESET銅柱,那么保存銅柱位置,關(guān)閉蜂鳴器,并且點亮第一個螺絲位置的指示燈;如果signal in信號來自第1-47個螺絲,那么置位SET信號,關(guān)閉蜂鳴器,開啟電動起子開始鎖緊螺絲,如果signal in信號來自第48個螺絲,就點亮RESET銅柱位置的指示燈;另外,從硬件設(shè)計中我們可知,Signal in 信號是當(dāng)電動起子碰觸治具板上螺絲孔位置的銅柱產(chǎn)生的,如果電動起子碰觸錯誤位置的螺絲孔位置的銅柱則開啟蜂鳴器發(fā)出報警提示的聲音,比如,當(dāng)前待打螺絲位置為2,如果電動起子碰觸螺絲孔2位置以外的銅柱,則蜂鳴器發(fā)出報警提示音,提醒操作人員打錯螺絲位置。其程序流程圖如圖2所示。
1.5 BZ信號的處理流程
BZ信號的處理流程如圖2所示。螺絲鎖緊到位后電動起子控制器發(fā)出BZ信號,MCU控制模塊接受到BZ信號后進入中斷處理子程序中,中斷處理程序包括關(guān)中斷、SET信號清零、關(guān)閉電動起子,如果鎖緊的螺絲是1-47個,那么點亮下一個位置螺絲的指示燈,如果鎖緊的螺絲是最后一個即第48個,那么點亮RESET指示燈,然后開中斷為下一個signal in信號的讀取做好準(zhǔn)備。
1.6 74HC595數(shù)據(jù)存儲器數(shù)據(jù)的讀取
通過HC595SendData函數(shù)可發(fā)送1到6個字節(jié)的數(shù)據(jù),這些數(shù)據(jù)用來點亮和關(guān)閉對應(yīng)個螺絲位置的指示燈、獲取某個位置螺絲是否有電動起子的輸入信號,最終將串行輸入數(shù)據(jù)并行輸出。傳送1個字節(jié)的流程如圖3所示。
2 程序下載調(diào)試
本設(shè)計所使用的編譯環(huán)境是ST Visual Develop,編譯環(huán)境開發(fā)界面如圖4所示。程序使用ST-LINK工具下載,下載軟件是ST Visual Programmer,程序下載界面如圖5所示。
程序調(diào)試過程中,還有個bug在里面,BUG: 當(dāng)打完第一個銅柱對應(yīng)的螺絲的時候,在打第二個螺絲時出現(xiàn)告警提示音,通過DEBUG程序發(fā)現(xiàn),在處理完前面打螺絲流程時遺漏了保存當(dāng)前所打螺絲銅柱位置信息,導(dǎo)致后面判斷中出現(xiàn)位置錯誤而開啟蜂鳴器進行告警提示。
3 結(jié)束語
本文以C語言為編程語言,圍繞以STM8S903K3為主的硬件電路功能,對序列打螺絲夾具中功能的設(shè)定、螺絲鎖緊的選擇、信息數(shù)據(jù)的處理存儲、加工信息的顯示、工作數(shù)據(jù)通信、報警等一系列功能進行了軟件設(shè)計說明。該軟件設(shè)計在硬件設(shè)計的基礎(chǔ)上進行了實驗調(diào)試和實際操作,并已投入實際應(yīng)用中,實際解決了螺絲數(shù)量較多時按統(tǒng)一順序鎖緊,防止錯打、漏打的問題并且具備提示、報警等功能,從實踐結(jié)果和參數(shù)來看,該裝置很好地解決了生產(chǎn)中的實際問題,具備很大的推廣價值。
參考文獻(xiàn):
[1] 王雷. 基于STM8S903K3的電動自行車控制器設(shè)計與實現(xiàn)[D]. 南京: 南京理工大學(xué), 2014.
[2] 陳方里, 欽仿仿. 基于STM8S的大功率BLDC驅(qū)動系統(tǒng)設(shè)計[J]. 技術(shù)與市場, 2015(10):9-10.
[3] 王強. 無刷直流電機無位置傳感器起動控制與逆變器故障診斷研究[D]. 南京: 南京航空航天大學(xué), 2015.
[4] 譚浩強. C語言程序設(shè)計[M].2版.北京: 清華大學(xué)出版社, 1999.
[5] STM8S903手冊[Z]. June 2009.
[6] 74HC595 手冊[Z]. 2003 Jun 25.
[7] A7C系列小型撥碼開關(guān)參數(shù)手冊[Z].