【關鍵詞】模塊化;按摩椅;ARM;驅動
按摩椅驅動系統是一種含有揉捏、敲擊、3D徑向和氣囊等功能的綜合系統,通常由傳感器、電機、氣泵、氣閥及單片機組成。單片機將上位機發來的按摩手法解析成各個執行機構能理解的指令并輸入到各模塊的接口函數中[1],各個模塊快速響應并成功實現相應的功能。
本文將基于模塊化的按摩椅驅動系統設計做一個詳細的論述,給出主要模塊的硬件電路圖、軟件方框圖和實驗結果。
硬件模塊化:固化現有的成熟電路圖,以及其中的電子元器件的設計參數,固化硬件電路的PCB的布局以及PCB的設計要求。
軟件模塊化:將軟件分成數據層、邏輯層、硬件層三層[2]。數據層接收上位機的鍵值,然后將鍵值解析成每一個執行機構的動作參數。邏輯層執行電機、氣囊、通訊、傳感器等機構的邏輯運算,將它們按照功能分類;硬件層是跟單片機強相關的端口配置。
(一)電機驅動
按摩的經典動作:揉捏、敲擊、頂背、搖擺、搓腳等,這些都離不開電機的控制。所有電機控制全部用DRV8840芯片來驅動,除了端子顏色不一樣外,電路的其他任何元器件要保持一致。在硬件電路圖庫[3]中通過端子確認電機功能。
此電路可以調整電機的轉速、方向,通過軟件動態調節電機的驅動狀態,實現按摩的平穩度。

(二)氣囊控制

氣囊可以按摩肩膀、手臂、小腿、大腿、腳、腰等部位。電路如上,通過SPI方式實現每一個氣閥的打開或關閉。

用戶是通過手控器控制按摩椅運行的。手控器與驅動板之間通過UART串口來通訊,它們之間波特率是9600,全雙工方式。驅動板每50ms向手控器發送按摩椅的運動參數,手控器每50ms將按鍵值發給驅動板。
(一)軟件模塊圖

(二)電機軟件控制
揉捏電機就是實現揉捏功能,電機帶動兩個輪子運動,每個輪子運動一圈為橢圓。揉捏的運動由速度、軌跡決定。
揉捏電機的功能,就是在背部表面上進行揉捏動作。
1、軟件控制方框圖

2、控制參數
控制參數是一個結構體數據,里面含有揉捏電機運行所需的速度、軌跡等關鍵要素??刂茀翟跀祿訉⑸衔粰C命令解析后生成的。
變量Data_Update:
當數據層有新的揉捏運動模式時,置1;否則揉捏電機還是按照之前的模式運動。
變量Control_DEF:
運動基準分為三大類:時間、次數、不停。 默認以時間來運行。
變量Run_Data:

當運動基準為時間時,此變量代表時間;當基準為次數時,它代表次數;當基準為不停運動時,它沒有意義。
變量Work_State:
揉捏電機一共分為9種狀態,停在任意位置、逆時針運動、順時針運動、停在寬、停在窄、停在中,寬窄來回運動、窄中來回運動,中窄來回運動。寬中窄是三個位置信號,主要用來記錄次數及搓背用的。默認停在任意位置。
變量Run_Speed:
控制揉捏電機的速度大小,一共7檔,默認0檔,0檔即沒有速度,電機停止。
3、定時器
模塊在運行時需要用到時間,由于是模塊化設計,不可能專門給此模塊弄一個特有的硬件定時器來做時間統計。由于SysTick是ARM內核里的一個功能單元,因此使用SysTick產生一個1ms的中斷來調用每個模塊的“1ms中斷”函數,每一個模塊既實現了計時功能,也滿足了代碼在不同單片機之間能夠快速移植。
4、外部信號
揉捏電機在運行時需要知道直流24V電壓大小、寬中窄傳感器信號,但這些數據不是模塊特有的。直流24V電壓,其他電機也需要用到;寬中窄信號是信號小板采集的一部分,通過UART方式傳送給主驅動板。軟件模塊化的核心思想是保持模塊的獨立性,所以這些只能以形參的方式傳遞進來。
5、實驗結果
(1)以時間為基準,讓揉捏電機以順時針方式運行6000秒,結果正確。
(2)以時間為基準,讓揉捏電機以窄中來回運行6000秒,結果正確。
(3)以次數為基準,讓揉捏電機以逆時針方式運行50000次,結果正確。
(4)以次數為基準,讓揉捏電機以窄寬來回運行500000次,結果正確。
(三)脈沖計數數字濾波
當行走機芯上行或下行時,通過電平的變化來統計脈沖數,往上走脈沖加,往下走脈沖減。
當脈沖電平發生變化時,就直接進行脈沖數增減。對于正常的方波信號是沒有問題的。但是電子產品不可能做到100%不受到外界的一絲干擾,進入單片機的脈沖信號不可能非常的完美。
即使同一類型的機臺,行車機芯從最底端跑到最頂端,脈沖數也不可能一模一樣,由于安裝存在差異,最大脈沖數相差30都有可能。假設一臺按摩椅實際最大脈沖數是842,跑到頂點卻強行設置成832;本來統計脈沖數就不準,再加上人為制造一個誤差,雙重誤差下導致行車機芯運動就很不準。
當進行模塊化設計時,會收集過去按摩椅發生的各種不良現象,在設計時會避免相同問題的發生。
增加數字濾波,在電平發生反轉后10毫秒內電平未發生變化(每1ms檢查一次,連續10次)才確認電平真發生了反轉,否則認為是干擾波。
當行走機芯上電后第一次運行時,首先要做歸零動作,即先運行到下限位,將脈沖數置0。當運行到上限位,不管脈沖數是多少,都不能人為地進行修正。
(四)通信
1、通信小板
通信小板與主驅動板之間通過UART通訊,主驅動只負責接收數據,不對通信小板發送數據。通信小板負責靠背電機上下極限、行走電機上下極限、小腿升降上下極限、揉捏寬中窄、肩膀、前滑電機前后極限、腳底、小腿角度、小腿伸縮極限等信號的采集。
2、3D電機信號小板
3D電機信號小板負責采集3D電機的前后極限、3D電機脈沖數等信號。
3D電機信號是通過485方式和主驅動板通信。主驅動板是主,其他連接上485總線上的都是從設備。主驅動板每50ms輪流給不同的從設備發送數據,從設備收到正確的命令后,將相應的信號數據反饋至主驅動板。
3、快捷按鍵小板
快捷按鍵安裝在扶手上方便用戶操作,它也是通過485方式與主驅動板通信的。為了方便用戶操控快捷鍵,當用戶按下某個按鍵時,主驅動板根據查詢到的按鍵值通過喇叭播報。
4、手控器
手控器與主驅動板通過UART通信,它們之間是全雙工。主驅動板每50ms將主驅動板每個模塊的狀態發送給手控器;手控器每50ms將鍵值發送給主驅動板,無鍵按下時發無鍵值。手控器是TFT屏,屏幕上顯示按摩椅自動按摩的程式及手動按摩的選擇,畫面簡單明了。
5、藍牙模塊
主驅動板與APP通訊時,其實是與主驅動上的藍牙模塊進行通信。通信也是UART方式,與手控器通訊協議內容一致。APP上的顯示內容也和手控器一致。
APP可以理解成第二個手控器,無論手控器或APP按下某個按鍵后,主驅動板將更新后的狀態發給所有手控器,它們的狀態也會同時更新,這樣就解決了多設備操作按摩椅顯示不協調的問題。
(五)錯誤代碼
原先的按摩椅沒有“錯誤代碼”功能。當產品出現問題后,工程師無法快速知道問題的源頭來自哪里,只能通過更換各個電路板來慢慢鎖定。這樣做既費時也費力,而且增加企業運營成本。如果通過模塊化設計,就能將問題解決在產品出廠或入庫之前。
編寫每一個獨立模塊代碼時,事先要考慮好它可能會產生哪些錯誤,并添加偵測這些錯誤的代碼。
錯誤代碼模塊收集每個模塊的錯誤,將之轉化成錯誤代碼和LED報警。工程師到達現場后,通過觀察LED閃爍次數或者在手控器上查詢最近產生的錯誤代碼,能在極短的時間知曉錯誤來源,對產品質量提升起到一個非常好的促進作用。
以往的按摩椅沒有以模塊化方式來設計,從硬件到軟件都是由一個工程師全權封閉式負責,由于工程師們急于完成設計,很多地方繞過規范來做。這樣做的后果是電路圖存在缺陷,代碼非常難懂,且同樣的問題一錯再錯。對于企業及個人來說,浪費了極大的時間成本。
模塊化設計提高了產品質量,杜絕隱患發生,同時也大大降低企業經營成本。