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