如何使用Arduino同步兩個線性執行器

多個線性執行器之間的同步運動對於某些客戶應用的成功至關重要,一種常見的做法是打開兩個活板門的兩個線性執行器。為了實現這一目標,我們建議使用專用的Firgelli 同步控制盒FA-SYNC-2和FA-SYNC-4。但是,一些DIY者和黑客更喜歡像Arduino這樣的微控制器的自由,而是更喜歡編寫自己的同步控製程序。本教程旨在概述如何使用 光學系列線性執行器.

前言

本教程不是對用Arduino實現同步控制所需步驟的嚴格處理,而是對幫助您編寫自己的自定義程序的廣泛概述。 本教程是高級教程,假定您已經熟悉Arduino的硬件,軟件,並且理想情況下具有脈衝寬度調製(PWM)信號,中斷服務程序(ISR),傳感器的反跳以及電機編碼器的經驗。 本教程提供的示例是基本比例控制器。在以下示例中可以實現許多改進,包括但不限於:實現PID控制迴路並縮放到兩個以上的線性執行器。 請注意,我們沒有資源為Arduino應用程序提供技術支持,並且不會在這些公開教程之外調試,編輯,提供代碼或接線圖。

概述同步控制

通過比較兩個線性執行器的長度並按比例調整速度來實現同步控制。如果一個執行器開始運動的速度快於另一個執行器,我們將使其減速。我們可以通過內置的光學編碼器讀取線性執行器的位置。光學編碼器是一個小的塑料盤,其中有10個孔,該盤連接到DC電動機,因此當電動機旋轉時,塑料盤也是如此。紅外LED指向塑料盤,因此當它旋轉時,光要么通過光盤上的孔傳輸,要么被光盤的塑料阻擋。光盤另一側的紅外傳感器檢測光何時穿過孔並輸出方波信號。通過計算接收器檢測到的脈衝數,我們既可以計算出電動機的RPM,也可以計算出線性執行器的行進距離。 35lb的光學線性致動器每英寸行程具有50(+/- 5)個光脈衝,而200lb和​​400lb的致動器均具有每英寸100(+/- 5)個脈衝。通過比較每個線性致動器已延伸的距離,我們能夠按比例調整兩個致動器的速度,以使它們在延伸時始終保持相同的長度。

所需組件

接線圖

如何使用Arduino同步兩個線性執行器

進行上述接線。請務必檢查從線性執行器出來的電線顏色,因為上色約定可能會與上圖所示有所不同。

    快速教程

    如果只想讓兩個線性執行器同步運動,請按照以下步驟操作:

    • 如接線圖所示進行連接。
    • 上傳並運行下面的第一個程序。
    • 將此程序輸出的兩個值複製到下面第二個程序的第23行。
    • 上載並運行第二個程序。
    • 通過更改變量K_p(第二行的第37行)來微調您的系統。最簡單的方法是將一個電位計連接到模擬引腳A0,然後修改代碼以讀取電位計並使用map()函數:K_p = map(analogRead(A0),0,1023,0,20000);

    本教程的其餘部分將更詳細地介紹程序的一些關鍵功能。我們再次重申,這不是詳盡的教程,而是概述了在創建自己的程序時要考慮的事項。

    校準程序概述

    在實現同步控制之前,我們必須首先校準系統。這涉及到對每個致動週期的脈衝數進行計數,因為如產品規格中所述,每英寸行程有(+/- 5)個脈衝的公差。在下面上傳並運行程序。該程序將完全收回執行器(第53行),並將光脈衝計數器變量設置為零,然後它將完全伸出並完全收回(分別為第63和74行)。在此啟動週期中,中斷服務程序(ISR)的行153和166將對脈衝數進行計數。啟動週期完成後,將在第88行輸出平均脈衝數,並記下這些值以供以後使用。

    https://gist.github.com/Will-Firgelli/89978da2585a747ef5ff988b2fa53904

    同步程序概述

    在上傳同步控製程序之前,必須首先將校準程序輸出的值複製到第23行,並用您自己的值替換當前數組:{908,906}。另外,如果您使用的是35lb線性執行器,則需要將第29行中的變量值從20毫秒更改為8毫秒。

    完全收回一次(確定原點)後,您可以通過按下與伸展,收回和停止命令相對應的三個按鈕來同步移動兩個線性執行器。通過比較執行器的相對脈衝計數器並調整它們之間的速度以始終保持同步,即使在不均勻負載下,執行器也將保持同步。請注意,當前程序實現了一個簡單的比例控制器(第93行),因此會在平衡附近出現過沖和振盪。您可以通過更改在第37行定義的變量K_p進行調整。 最簡單的方法是將一個電位計連接到模擬引腳A0,然後修改代碼以讀取電位計並使用map()函數:K_p = map(analogRead(A0),0,1023,0,20000);

    為了獲得最佳結果,我們強烈建議您刪除比例控制器並實施PID控制迴路。但是,這超出了本入門教程的範圍,因此已被故意省略。

    https://gist.github.com/Will-Firgelli/44a14a4f3cac3209164efe8abe3285b6

    同步使用Bullet 36和Bullet 50執行器

    除了我們的光學系列線性執行器,我們還提供兩種帶內置編碼器的線性執行器:Bullet 36 Cal。和Bullet 50 Cal,它們都具有內部正交霍爾效應編碼器。霍爾效應編碼器的工作原理與光學編碼器相同,但是它不使用光,而是利用磁性。此外,作為正交編碼器,它具有兩個信號輸出,每個信號輸出相差90度。因此,您需要使用具有4個或更多中斷引腳的Arduino板(Arduino Uno只有兩個),並修改代碼以處理每個執行器來自兩個信號的輸入。此外,防抖時間變量falsepulseDelay將需要與K_p一起調整。

    編寫自己的程序的技巧

    超過兩個線性執行器

    當使用兩個或多個線性執行器時,Arduino Uno將不再工作,因為它只有兩個中斷引腳。您將需要使用帶有適當數量的中斷引腳的Arduino板,更多信息: https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/

    其次,為了提高效率,建議使用數組和for()循環對每個執行器進行迭代來向量化您的編程。

    防彈跳

    與許多感測器一樣,瞭解彈跳信號非常重要。與機械開關一樣,編碼器也會受到彈跳的損壞。在上面的示例中,去彈跳過程通過簡單的延遲(由 falsepulseLay 變數定義)處理,在您所做的任何軟體更改或物理電路中處理此操作以過濾回彈雜訊非常重要。

    處理翻滾

    如果修改代碼,在處理 millis() 函數時請注意翻轉。millis() 和 lastDebounceTime 陣列都聲明為無符號長變數,這意味著它們可以存儲高達 4,294,967,295 (32+2-1) 的值。這大約相當於 49.7 天的展期。當前程式設計用於處理 ISR(中斷服務例程)函數中的展期:count_0 和 count_1,但是如果您修改此程式,請務必正確處理變數翻轉,否則您的程式將在連續使用 49.7 天後崩潰。有關詳細資訊,請參閱: https://www.norwegiancreations.com/2018/10/arduino-tutorial-avoiding-the-overflow-issue-when-using-millis-and-micros/

     

    Share this article

    特色产品

    Linear Actuator - 12v dc
    經典桿式線性執行器 In Stock
    From $109.99USD
    water resistant IP66 Premium Linear Actuator
    優質線性執行器 In Stock
    $129.99USD
    TVL-170後置彈出式電視升降機
    TVL-170後置彈出式電視升降機 In Stock
    On Sale From $590.00USD
    子彈系列50 Cal。線性執行器
    子彈系列50 Cal。線性執行器 In Stock
    From $279.99USD

    需要幫助找到合適的執行器?

    我們精密設計和製造我們的產品,以便您直接獲得製造商的價格。我們提供當日發貨和專業的客戶支持。嘗試使用我們的執行器計算器來獲得幫助,為您的應用選擇合適的執行器。