【關(guān)鍵詞】模塊化;按摩椅;ARM;驅(qū)動
按摩椅驅(qū)動系統(tǒng)是一種含有揉捏、敲擊、3D徑向和氣囊等功能的綜合系統(tǒng),通常由傳感器、電機、氣泵、氣閥及單片機組成。單片機將上位機發(fā)來的按摩手法解析成各個執(zhí)行機構(gòu)能理解的指令并輸入到各模塊的接口函數(shù)中[1],各個模塊快速響應(yīng)并成功實現(xiàn)相應(yīng)的功能。
本文將基于模塊化的按摩椅驅(qū)動系統(tǒng)設(shè)計做一個詳細的論述,給出主要模塊的硬件電路圖、軟件方框圖和實驗結(jié)果。
硬件模塊化:固化現(xiàn)有的成熟電路圖,以及其中的電子元器件的設(shè)計參數(shù),固化硬件電路的PCB的布局以及PCB的設(shè)計要求。
軟件模塊化:將軟件分成數(shù)據(jù)層、邏輯層、硬件層三層[2]。數(shù)據(jù)層接收上位機的鍵值,然后將鍵值解析成每一個執(zhí)行機構(gòu)的動作參數(shù)。邏輯層執(zhí)行電機、氣囊、通訊、傳感器等機構(gòu)的邏輯運算,將它們按照功能分類;硬件層是跟單片機強相關(guān)的端口配置。
(一)電機驅(qū)動
按摩的經(jīng)典動作:揉捏、敲擊、頂背、搖擺、搓腳等,這些都離不開電機的控制。所有電機控制全部用DRV8840芯片來驅(qū)動,除了端子顏色不一樣外,電路的其他任何元器件要保持一致。在硬件電路圖庫[3]中通過端子確認電機功能。
此電路可以調(diào)整電機的轉(zhuǎn)速、方向,通過軟件動態(tài)調(diào)節(jié)電機的驅(qū)動狀態(tài),實現(xiàn)按摩的平穩(wěn)度。
(二)氣囊控制
氣囊可以按摩肩膀、手臂、小腿、大腿、腳、腰等部位。電路如上,通過SPI方式實現(xiàn)每一個氣閥的打開或關(guān)閉。
用戶是通過手控器控制按摩椅運行的。手控器與驅(qū)動板之間通過UART串口來通訊,它們之間波特率是9600,全雙工方式。驅(qū)動板每50ms向手控器發(fā)送按摩椅的運動參數(shù),手控器每50ms將按鍵值發(fā)給驅(qū)動板。
(一)軟件模塊圖
(二)電機軟件控制
揉捏電機就是實現(xiàn)揉捏功能,電機帶動兩個輪子運動,每個輪子運動一圈為橢圓。揉捏的運動由速度、軌跡決定。
揉捏電機的功能,就是在背部表面上進行揉捏動作。
1、軟件控制方框圖
2、控制參數(shù)
控制參數(shù)是一個結(jié)構(gòu)體數(shù)據(jù),里面含有揉捏電機運行所需的速度、軌跡等關(guān)鍵要素。控制參數(shù)在數(shù)據(jù)層將上位機命令解析后生成的。
變量Data_Update:
當數(shù)據(jù)層有新的揉捏運動模式時,置1;否則揉捏電機還是按照之前的模式運動。
變量Control_DEF:
運動基準分為三大類:時間、次數(shù)、不停。 默認以時間來運行。
變量Run_Data:
當運動基準為時間時,此變量代表時間;當基準為次數(shù)時,它代表次數(shù);當基準為不停運動時,它沒有意義。
變量Work_State:
揉捏電機一共分為9種狀態(tài),停在任意位置、逆時針運動、順時針運動、停在寬、停在窄、停在中,寬窄來回運動、窄中來回運動,中窄來回運動。寬中窄是三個位置信號,主要用來記錄次數(shù)及搓背用的。默認停在任意位置。
變量Run_Speed:
控制揉捏電機的速度大小,一共7檔,默認0檔,0檔即沒有速度,電機停止。
3、定時器
模塊在運行時需要用到時間,由于是模塊化設(shè)計,不可能專門給此模塊弄一個特有的硬件定時器來做時間統(tǒng)計。由于SysTick是ARM內(nèi)核里的一個功能單元,因此使用SysTick產(chǎn)生一個1ms的中斷來調(diào)用每個模塊的“1ms中斷”函數(shù),每一個模塊既實現(xiàn)了計時功能,也滿足了代碼在不同單片機之間能夠快速移植。
4、外部信號
揉捏電機在運行時需要知道直流24V電壓大小、寬中窄傳感器信號,但這些數(shù)據(jù)不是模塊特有的。直流24V電壓,其他電機也需要用到;寬中窄信號是信號小板采集的一部分,通過UART方式傳送給主驅(qū)動板。軟件模塊化的核心思想是保持模塊的獨立性,所以這些只能以形參的方式傳遞進來。
5、實驗結(jié)果
(1)以時間為基準,讓揉捏電機以順時針方式運行6000秒,結(jié)果正確。
(2)以時間為基準,讓揉捏電機以窄中來回運行6000秒,結(jié)果正確。
(3)以次數(shù)為基準,讓揉捏電機以逆時針方式運行50000次,結(jié)果正確。
(4)以次數(shù)為基準,讓揉捏電機以窄寬來回運行500000次,結(jié)果正確。
(三)脈沖計數(shù)數(shù)字濾波
當行走機芯上行或下行時,通過電平的變化來統(tǒng)計脈沖數(shù),往上走脈沖加,往下走脈沖減。
當脈沖電平發(fā)生變化時,就直接進行脈沖數(shù)增減。對于正常的方波信號是沒有問題的。但是電子產(chǎn)品不可能做到100%不受到外界的一絲干擾,進入單片機的脈沖信號不可能非常的完美。
即使同一類型的機臺,行車機芯從最底端跑到最頂端,脈沖數(shù)也不可能一模一樣,由于安裝存在差異,最大脈沖數(shù)相差30都有可能。假設(shè)一臺按摩椅實際最大脈沖數(shù)是842,跑到頂點卻強行設(shè)置成832;本來統(tǒng)計脈沖數(shù)就不準,再加上人為制造一個誤差,雙重誤差下導致行車機芯運動就很不準。
當進行模塊化設(shè)計時,會收集過去按摩椅發(fā)生的各種不良現(xiàn)象,在設(shè)計時會避免相同問題的發(fā)生。
增加數(shù)字濾波,在電平發(fā)生反轉(zhuǎn)后10毫秒內(nèi)電平未發(fā)生變化(每1ms檢查一次,連續(xù)10次)才確認電平真發(fā)生了反轉(zhuǎn),否則認為是干擾波。
當行走機芯上電后第一次運行時,首先要做歸零動作,即先運行到下限位,將脈沖數(shù)置0。當運行到上限位,不管脈沖數(shù)是多少,都不能人為地進行修正。
(四)通信
1、通信小板
通信小板與主驅(qū)動板之間通過UART通訊,主驅(qū)動只負責接收數(shù)據(jù),不對通信小板發(fā)送數(shù)據(jù)。通信小板負責靠背電機上下極限、行走電機上下極限、小腿升降上下極限、揉捏寬中窄、肩膀、前滑電機前后極限、腳底、小腿角度、小腿伸縮極限等信號的采集。
2、3D電機信號小板
3D電機信號小板負責采集3D電機的前后極限、3D電機脈沖數(shù)等信號。
3D電機信號是通過485方式和主驅(qū)動板通信。主驅(qū)動板是主,其他連接上485總線上的都是從設(shè)備。主驅(qū)動板每50ms輪流給不同的從設(shè)備發(fā)送數(shù)據(jù),從設(shè)備收到正確的命令后,將相應(yīng)的信號數(shù)據(jù)反饋至主驅(qū)動板。
3、快捷按鍵小板
快捷按鍵安裝在扶手上方便用戶操作,它也是通過485方式與主驅(qū)動板通信的。為了方便用戶操控快捷鍵,當用戶按下某個按鍵時,主驅(qū)動板根據(jù)查詢到的按鍵值通過喇叭播報。
4、手控器
手控器與主驅(qū)動板通過UART通信,它們之間是全雙工。主驅(qū)動板每50ms將主驅(qū)動板每個模塊的狀態(tài)發(fā)送給手控器;手控器每50ms將鍵值發(fā)送給主驅(qū)動板,無鍵按下時發(fā)無鍵值。手控器是TFT屏,屏幕上顯示按摩椅自動按摩的程式及手動按摩的選擇,畫面簡單明了。
5、藍牙模塊
主驅(qū)動板與APP通訊時,其實是與主驅(qū)動上的藍牙模塊進行通信。通信也是UART方式,與手控器通訊協(xié)議內(nèi)容一致。APP上的顯示內(nèi)容也和手控器一致。
APP可以理解成第二個手控器,無論手控器或APP按下某個按鍵后,主驅(qū)動板將更新后的狀態(tài)發(fā)給所有手控器,它們的狀態(tài)也會同時更新,這樣就解決了多設(shè)備操作按摩椅顯示不協(xié)調(diào)的問題。
(五)錯誤代碼
原先的按摩椅沒有“錯誤代碼”功能。當產(chǎn)品出現(xiàn)問題后,工程師無法快速知道問題的源頭來自哪里,只能通過更換各個電路板來慢慢鎖定。這樣做既費時也費力,而且增加企業(yè)運營成本。如果通過模塊化設(shè)計,就能將問題解決在產(chǎn)品出廠或入庫之前。
編寫每一個獨立模塊代碼時,事先要考慮好它可能會產(chǎn)生哪些錯誤,并添加偵測這些錯誤的代碼。
錯誤代碼模塊收集每個模塊的錯誤,將之轉(zhuǎn)化成錯誤代碼和LED報警。工程師到達現(xiàn)場后,通過觀察LED閃爍次數(shù)或者在手控器上查詢最近產(chǎn)生的錯誤代碼,能在極短的時間知曉錯誤來源,對產(chǎn)品質(zhì)量提升起到一個非常好的促進作用。
以往的按摩椅沒有以模塊化方式來設(shè)計,從硬件到軟件都是由一個工程師全權(quán)封閉式負責,由于工程師們急于完成設(shè)計,很多地方繞過規(guī)范來做。這樣做的后果是電路圖存在缺陷,代碼非常難懂,且同樣的問題一錯再錯。對于企業(yè)及個人來說,浪費了極大的時間成本。
模塊化設(shè)計提高了產(chǎn)品質(zhì)量,杜絕隱患發(fā)生,同時也大大降低企業(yè)經(jīng)營成本。