網(wǎng)上有很多關(guān)于遙控pos機,用Arduino控制伺服電機的知識,也有很多人為大家解答關(guān)于遙控pos機的問題,今天pos機之家(m.dsth100338.com)為大家整理了關(guān)于這方面的知識,讓我們一起來看下吧!
本文目錄一覽:
1、遙控pos機
遙控pos機
如果您需要控制船上或飛機上的舵機以控制方向,則伺服系統(tǒng)是完美的選擇。它們在機器人工作中非常有用,可以定位相機、傳感器或機器人的運動部件。伺服也可以用作模擬儀表,如速度表和轉(zhuǎn)速表。
本文翻譯自科普大神donebotWorkshop.com
譯者:DIY百事
目錄
1 什么是伺服電機? 1.1伺服電機的種類 1.2模擬伺服電機
2 伺服是如何工作的? 2.1連續(xù)旋轉(zhuǎn)伺服電機
3 伺服電機控制信號 3.1常規(guī)伺服電機時序 3.2連續(xù)旋轉(zhuǎn)伺服電機時序
4 伺服電機規(guī)格4.1電機尺寸 4.2齒輪材料 4.3速度 4.4扭矩 4.5工作電壓 4.6臂(連桿)和配件
5 測試伺服電機 5.1伺服測試儀 5.2伺服電機連接
6 連接到 Arduino 6.1 PWM 輸出 6.2電源注意事項
7 旋轉(zhuǎn)掃描的代碼
8 可調(diào)節(jié)角度的旋轉(zhuǎn)掃描的代碼
9 PCA9685 伺服驅(qū)動板
10 多個伺服系統(tǒng)——控制 MeArm
11 結(jié)論
什么是伺服電機?伺服電機是一種低速、高扭矩的電機,有多種尺寸可供選擇。與直流和步進電機不同,伺服電機通常不會旋轉(zhuǎn)完整的 360 度。相反,它被限制在 180、270 或 90 度的范圍內(nèi)。
控制信號被發(fā)送到伺服系統(tǒng)以將軸定位在所需的角度。這種具有單一信號的布置使得伺服系統(tǒng)可以簡單地用于無線電和遙控設(shè)計以及單片機。
我們已經(jīng)構(gòu)建了一些使用電機使物體移動的項目,并且在此過程中我們查看了一些可以通過 Arduino 和 Raspberry Pi 項目控制的不同類型的電機。
圖1
伺服電機的種類伺服電機本質(zhì)上是一種電機,它有一個控制信號輸入端用于指定電機軸位置。
伺服系統(tǒng)用于工業(yè)和業(yè)余愛好應(yīng)用。工業(yè)伺服系統(tǒng)通常是帶有數(shù)字控制輸入的交流電機,成本數(shù)百或數(shù)千美元。
業(yè)余愛好者用的伺服電機通常是直流電機,可以用數(shù)字或模擬信號進行控制。
數(shù)字伺服系統(tǒng)用于需要快速響應(yīng)的應(yīng)用中,例如飛機上的升降舵或直升機上的方向舵。我們也不會使用這些類型的電機,盡管用于使用 Arduino 驅(qū)動它們的電路圖和代碼與我們將用于模擬伺服系統(tǒng)的相同。
我們將使用普通的模擬伺服電機,這是業(yè)余愛好者最常用的類型。它們價格低廉且易于獲得。安裝硬件也很容易找到,因為這些伺服器具有一組標(biāo)準(zhǔn)尺寸。
模擬伺服電機模擬伺服電機價格低廉,有多種尺寸和額定值可供選擇。當(dāng)您需要可以準(zhǔn)確定位的小型高扭矩電機時,這是完美的選擇。
模擬伺服電機的“模擬”部分是控制信號。模擬伺服電機響應(yīng)脈沖寬度調(diào)制( PWM) 信號來定位其電機軸。
PWM 是一種理想的控制方式。它可以由一個簡單的定時器電路或單片機產(chǎn)生。它可以通過單根電線發(fā)送,也可以通過無線電或光束傳送信號。
Arduino 有許多支持 PWM 的輸出引腳,非常適合控制伺服電機。
伺服系統(tǒng)如何工作?伺服電機是一種內(nèi)置“伺服機構(gòu)”的電機。
伺服機構(gòu)使用傳感器來監(jiān)控電機軸位置然后用控制器來控制電機。它接收一個信號,指示軸應(yīng)運動到的位置。然后它將電機軸移動到所需的位置。
在模擬伺服電機中,我們將使用的控制信號是一個 PWM 信號,其脈沖寬度決定了電機軸的定位角度。電機本身是一個簡單的直流電機,帶有減速齒輪組以減慢其速度并增加其扭矩。
為了正常工作,伺服電機需要一個可以準(zhǔn)確測量其軸位置的傳感器。在一些工業(yè)和高端玩具伺服電機上,這是使用光電盤完成的,但在大多數(shù)標(biāo)準(zhǔn)業(yè)余伺服電機中,傳感器是一個電位計。這也是有效的,因為這些伺服系統(tǒng)通常會移動 180 到 270 度,完全在電位計的范圍內(nèi)。然而,電位計的精度,特別是在低成本伺服電機中的精度,會影響伺服機構(gòu)的整體精度。
連續(xù)旋轉(zhuǎn)伺服電機標(biāo)準(zhǔn)模擬伺服電機的旋轉(zhuǎn)受到限制,通常為 180 或 270 度(目前最常見的是 180 度)。其內(nèi)部齒輪裝置以小巧且廉價的包裝提供高扭矩動力組。
小尺寸和大扭矩的結(jié)合也使伺服電機在小型玩具和機器人等小型設(shè)備的設(shè)計中用作標(biāo)準(zhǔn)直流電機的替代品。有些人會通過移除電位計來修改標(biāo)準(zhǔn)模擬舵機,讓舵機可以旋轉(zhuǎn)整整 360 度。
從制造商得到的消息,現(xiàn)在也提供“連續(xù)旋轉(zhuǎn)伺服電機”,其實是剝離了伺服機構(gòu)的伺服電機。
在連續(xù)旋轉(zhuǎn)伺服電機中,軸旋轉(zhuǎn)的速度和方向由與傳統(tǒng)模擬伺服電機相同的 PWM 信號控制。
具有簡單的單線控制信號和與標(biāo)準(zhǔn)伺服電機相同的物理封裝使連續(xù)旋轉(zhuǎn)伺服電機能用到許多場合。
伺服電機控制信號為了使用模擬伺服電機,您需要了解如何使用 PWM 控制其運行。常規(guī)旋轉(zhuǎn)和連續(xù)旋轉(zhuǎn)這兩個品種使用相同的計時信號,但對它們的響應(yīng)略有不同。
讓我們來看看大多數(shù)模擬伺服電機中使用的PWM信號。
傳統(tǒng)伺服電機時序在傳統(tǒng)的模擬伺服電機中,使用周期為 20 ms 的 PWM 信號來控制電機。20 ms 的信號具有 50 Hz 的頻率。
脈沖寬度在 1 到 2 ms 之間變化,以控制電機軸位置。
圖2
1.5ms 的脈沖寬度將使伺服軸停留在 90 度位置,即其行程的中心。1ms 的脈沖寬度將導(dǎo)致伺服軸停在 0 度位置。2ms 的脈沖寬度將使伺服軸停在 180 度位置。
在 1ms 和 2ms 之間改變脈沖寬度將使伺服軸在 180 度的范圍內(nèi)移動。通過相應(yīng)地調(diào)整脈沖寬度,您可以將其放置在您想要的任何角度。
連續(xù)旋轉(zhuǎn)伺服電機時序在連續(xù)旋轉(zhuǎn)伺服電機中,相同的 PWM 信號將導(dǎo)致電機的性能不同。
圖3
1.5ms 的脈沖寬度將導(dǎo)致伺服軸停止旋轉(zhuǎn)。1ms的脈沖寬度將導(dǎo)致伺服軸逆時針全速旋轉(zhuǎn)。2ms 的脈沖寬度將導(dǎo)致伺服軸順時針全速旋轉(zhuǎn)。
在 1ms 和 1.5ms 之間改變脈沖寬度將使電機逆時針旋轉(zhuǎn),較短的脈沖寬度使電機旋轉(zhuǎn)得更快。
在 1.5ms 和 2ms 之間改變脈沖寬度將導(dǎo)致電機順時針旋轉(zhuǎn),脈沖越長,速度越快。
商用連續(xù)旋轉(zhuǎn)伺服電機將有一個調(diào)節(jié)電位器,可用于在電機輸入 1.5ms 脈沖寬度時將速度歸零。
伺服電機規(guī)格市面上有數(shù)百種模擬伺服電機可用,了解如何閱讀它們的規(guī)格對于為您的應(yīng)用選擇正確的電機至關(guān)重要。
以下是您在選擇伺服電機時會遇到的一些關(guān)鍵參數(shù)。
電機尺寸伺服電機的物理尺寸自然是一個重要的考慮因素,您的應(yīng)用可能會要求電機符合特定的尺寸限制。
有多種標(biāo)準(zhǔn)伺服電機尺寸,這使得找到適合您的伺服電機的安裝支架和硬件變得更加容易。
伺服大小通常指定如下:
納米亞微微小型的標(biāo)準(zhǔn)大也有特殊尺寸。微(Micro) 和 標(biāo)準(zhǔn)(Standard) 尺寸是 Arduino 實驗者最常使用的尺寸。
齒輪材料伺服系統(tǒng)有許多內(nèi)齒輪和直接在輸出軸上的齒輪裝置,這些用于降低電機速度并增加其扭矩。
齒輪可以使用塑料或金屬制造。
金屬齒輪提供更好的性能,通常可以支持更高的扭矩并且不易脫落。金屬齒輪伺服系統(tǒng)的成本也更高。
塑料齒輪更容易脫落,并且沒有金屬齒輪的扭矩能力。然而,它們比金屬齒輪伺服電機更安靜且更便宜。
相同的伺服電機結(jié)構(gòu)可能會使用不同的齒輪材料。一種常見的實驗電機是 SG90,帶有塑料齒輪的微型伺服電機。它的金屬齒輪對應(yīng)型號是MG90。由于它們采用相同的外殼并具有相同的電壓和驅(qū)動器要求,因此它們可以互換,MG90 因其金屬齒輪而提供卓越的性能。
伺服電機的質(zhì)量還受軸承類型和軸承數(shù)量的影響。帶有多個軸承的電機轉(zhuǎn)動更平穩(wěn)、更準(zhǔn)確。
速度伺服電機的速度定義為將伺服軸移動 60 度所需的時間。
圖4
比如規(guī)格0.25 秒/60°,這意味著行進 60 度需要四分之一秒。
伺服速度更適用于傳統(tǒng)伺服電機,連續(xù)旋轉(zhuǎn)電機與任何直流電機一樣額定為最大 RPM。
高速伺服系統(tǒng)用于航模和直升機應(yīng)用,以控制經(jīng)常需要快速移動的升降舵和方向舵。其中許多使用數(shù)字控制和內(nèi)部光學(xué)位置傳感器代替電位計,以實現(xiàn)更快速的移動。
對于一些業(yè)余愛好應(yīng)用如控制攝像機或超聲波傳感器的位置,速度通常不是關(guān)鍵因素。
扭矩扭矩是一個非常重要的參數(shù),它從字面上指定了電機的力道。
扭矩被定義為伺服系統(tǒng)可以施加到連桿上的力,換句話說,它可以承受多大的力。
它以千克厘米為單位。
要了解扭矩數(shù)字與現(xiàn)實世界情況的關(guān)系,請考慮以下示例:
圖5
如伺服電機的額定值為 5 kg-cm。也就是說伺服電機可在距軸中心 1 厘米處的杠桿上承受高達 5kg 的負載。
在兩倍距離處,負載將減半,因此在距軸 2 厘米處,杠桿可以支撐 2.5 千克。
一半的距離使可支撐的負載翻倍至 10kg。
更大的伺服電機往往具有更大的扭矩能力,更大扭矩的電機往往更貴。它們也更重,消耗更多電流。
工作電壓大多數(shù)業(yè)余模擬舵機的額定電壓為 4.8 到 6 伏,并在更高的電壓下實現(xiàn)其最大性能。
還有更多的伺服系統(tǒng),最大額定電壓為 7.5 到 8.5 伏。由于 7.4 伏鋰聚合物電池可用于模型飛機、船只、車輛和四軸飛行器,這些電池變得越來越受歡迎。
伺服電機,尤其是高扭矩型號,會消耗相當(dāng)多的電流,在為您的項目選擇電源或電池時需要考慮到這一點。
連桿、和配件大多數(shù)伺服電機都有一個齒輪軸,它的中心有螺紋方便堅固。
為了使用伺服電機,您需要在軸上裝上另一個零件—平臺、齒輪、輪子或任何您試圖與伺服電機軸一起移動的東西。
伺服電機配有各種不同形狀的杠桿和圓盤,可以與軸配合,以方便將伺服電機連接到您的設(shè)計中。這些部件通常被稱“連桿”。它們連接到伺服電機軸上并用中心螺釘固定到位,它們可以由塑料或金屬制成。
除了連桿,您還應(yīng)該隨伺服電機一起收到各種安裝硬件和螺釘,包括軸的中心螺釘(不要丟失它,因為它們往往因伺服類型而異)。
您還可以購買設(shè)計用于接受微型和標(biāo)準(zhǔn)等流行伺服尺寸的安裝板。
伺服連桿、固定件和附件的可用性和互換性使您可以輕松地將伺服電機集成到您的設(shè)計中。
測試伺服電機與任何組件一樣,了解如何測試伺服電機以確保正常運行很有用。
在將伺服電機安裝到您的項目中之前,能夠?qū)⑺欧S旋轉(zhuǎn)到預(yù)設(shè)位置(例如 90 度)也很有用,以便一切都正確對齊。
您可以使用多種方法來測試伺服。一個簡單的 Arduino 代碼和連接,就像您將在此處進一步看到的那樣,將成為測試伺服并將其軸定位到預(yù)設(shè)位置的絕佳方法。
另一種方法是使用專用伺服測試儀。
伺服測試儀正如您想象的那樣,伺服測試儀是一種用于測試伺服電機的設(shè)備!它們非常有用,而且可能非常便宜,具體取決于您想要的功能。
一個簡單的伺服測試儀,如這里所示(并在隨附的視頻中使用)只需幾美元。
更先進的伺服測試儀有多個電機的速度和定心控制,有些還有電流表。加上這些都不到20美元。
這些測試儀可以共用電機本身的電源。它們可以插入標(biāo)準(zhǔn)伺服電機連接器,然后它們將控制伺服電機。
伺服測試儀將允許您手動移動電機并將其置于 90 度位置的中心。這使您可以在連桿固定到電機之前檢查電機是否正確運行并對齊其軸位置。
伺服電機接線模擬伺服電機通常有一個 3 針連接器。
民用伺服電機上使用的顏色代碼因制造商而異。然而,大多數(shù)制造商使用相同的引腳排列,如下圖所示:
圖6
伺服電機的三個連接如下:
Ground接地- 電機和邏輯的公共接地。Power電源- 為伺服供電的正電壓。Control控制——PWM 控制信號的輸入。最常見的連接器是標(biāo)準(zhǔn)的杜邦連接器,間距為 0.1 英寸。這使得使用標(biāo)準(zhǔn)杜邦接頭將伺服電機連接到您的項目變得容易。
您還可以將面包板電線直接插入伺服 3 針連接器,以便您可以使用伺服電機進行原型設(shè)計。
連接到 Arduino正如我們已經(jīng)描述的那樣,伺服電機需要 PWM 控制信號才能正確運行。您可以通過多種方式生成此信號——簡單的定時器電路、專用控制芯片或使用具有 PWM 輸出功能的單片機。
單片機在能夠更有效地控制伺服方面自然具有許多優(yōu)勢。Arduino 是一個很好的選擇。
Arduino IDE 已經(jīng)包含一個伺服庫,因此您很快就會看到,將伺服添加到您的代碼中非常簡單。
PWM脈寬調(diào)制輸出所有 Arduino 板都有一些能夠進行脈寬調(diào)制( PWM )的輸出引腳。在 Arduino Uno 上有 6 個支持 PWM 的引腳。
請記住,要生成 PWM 信號,伺服庫文件需要使用一些內(nèi)部 Arduino 計時器,特別是計時器 1。這可能會干擾其他也需要相同計時器的庫。解決此問題的一種方法是為伺服或其他所需功能尋找替代庫,這是繞過這些限制的常用方法。
更高級的方法是使用外部 PWM 控制器板并釋放 Arduino 計時器的需求。這將在本文中進一步討論。
電源注意事項大多數(shù)伺服電機都可以在 5 伏電壓下運行,因此很容易使用 Arduino 板上的 5 伏輸出為伺服供電。
但這不是一個很好的主意。
伺服系統(tǒng)會消耗大量電流,尤其是在負載時。這可能比 Arduino 板上的電壓調(diào)節(jié)器所能承受的電流更大,尤其是在更便宜的克隆板上。雖然大多數(shù) Arduino 板可以支持一個微型伺服電機,但它仍然會給調(diào)壓器帶來很大的負擔(dān)。
伺服電機與所有其他電機一樣,會在電源電路上產(chǎn)生電噪聲。在為單片機和其他邏輯設(shè)備供電的線路上存在這種噪聲通常會導(dǎo)致系統(tǒng)錯誤。
為您的伺服電機使用單獨的電源是一個更好的主意。5 伏 USB 3 電源可以很好地工作, 4 節(jié) AA 電池也可以。
如果您真的必須直接從 Arduino 為伺服電機供電,請將其限制為一個微型伺服電機。在靠近伺服電機的電源線上安裝一個 100uf 或更大的電容器可以幫助吸收這些電涌。
伺服掃描旋轉(zhuǎn)的代碼對于我們的第一個 Arduino 代碼,我們將使用Arduino IDE內(nèi)置示例。無需編寫代碼或安裝庫!
連接硬件以用于我們的第一個演示非常簡單。您需要一個 Arduino(任何類型)、一個伺服電機和一個伺服電機電源。
圖7
連接再簡單不過了。伺服由自己的電源供電,接地連接也連接到 Arduino 接地。然后來自伺服的控制引線連接到 Arduino 上的引腳 9。
Arduino Uno 上的引腳 9 是能夠進行 PWM 的六個引腳之一,在大多數(shù) Uno 板上,您會在 6 個啟用 PWM 的 I/O 引腳旁邊看到一個符號。
將您的 Arduino 連接到您的計算機并啟動 Arduino IDE。
單擊屏幕頂部的文件菜單。從那里選擇示例子菜單。
將顯示示例代碼列表。它分為幾個部分,向下滾動列表直到到達“來自庫的示例”部分。
在“庫中的示例”部分,您將看到“伺服”。突出顯示以顯示兩個代碼,旋鈕和掃描。
加載代碼。
/* Sweep by BARRAGAN <http://barraganstudio.com> This example code is in the public domain. modified 8 Nov 2013 by Scott Fitzgerald http://www.arduino.cc/en/Tutorial/Sweep*/ #include <Servo.h> Servo myservo; // create servo object to control a servo// twelve servo objects can be created on most boards int pos = 0; // variable to store the servo position void setup() { myservo.attach(9); // attaches the servo on pin 9 to the servo object} void loop() { for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees // in steps of 1 degree myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position } for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position }}
掃描旋轉(zhuǎn)是一個非?;镜拇a,它只是將伺服軸從頭掃描到尾。
該代碼使用了Arduino IDE 中包含的Arduino 伺服庫。顧名思義,它是一個用 PWM 控制伺服電機的庫。我們包含該庫并定義一個名為myservo的對象來表示我們的伺服電機。如果您有多個伺服電機,您可以為每個電機定義一個對象。
然后,我們定義一個名為“ pos ”的變量,用于保存我們希望伺服電機軸移動到的位置(角度)。
在設(shè)置中,我們將伺服對象連接到 Arduino 引腳 9 上的伺服電機控制線。
然后是loop循環(huán),它由兩個 for 循環(huán)組成。第一個循環(huán)增加pos變量的值,并使用它使用myservo.write命令控制伺服電機,將軸從 0 度發(fā)送到 180 度。
第二個 for 循環(huán)是相同的,只是它將值從 180 遞減到 0,將軸朝相反的方向送回。
將代碼加載到 Arduino 中并觀察伺服電機軸,它應(yīng)該從一端移動到另一端。
您剛剛使用 Arduino 進行了伺服運動!
旋鈕代碼讓我們繼續(xù)看 Arduino IDE 附帶的另一個演示代碼,即旋鈕代碼。在我們做之前,我們需要在我們的電路中添加一個組件。
圖8
正如接線圖所示,您需要一個電位計,10k 以上的任何值都可以正常工作。將它的一端接地,另一端連接到 Arduino +5 伏。中間那個輸出連接到模擬輸入 A0。
電位器將用作定位伺服電機軸的控件,您可以使用它在其 180 度行程中撥動任何位置。這不僅是一個很好的演示,它還是一個有用的功能,用于在將伺服電機安裝到您的項目之前設(shè)置它們的位置。
如果您在電路中替換連續(xù)旋轉(zhuǎn)伺服系統(tǒng),您可以使用電位計來控制電機旋轉(zhuǎn)的速度和方向。
修改實驗以包含電位計后,打開 Arduino IDE 并返回示例代碼。這次從伺服菜單中選擇掃描。
/* Controlling a servo position using a potentiometer (variable resistor) by Michal Rinott <http://people.interaction-ivrea.it/m.rinott> modified on 8 Nov 2013 by Scott Fitzgerald http://www.arduino.cc/en/Tutorial/Knob*/ #include <Servo.h> Servo myservo; // create servo object to control a servo int potpin = 0; // analog pin used to connect the potentiometerint val; // variable to read the value from the analog pin void setup() { myservo.attach(9); // attaches the servo on pin 9 to the servo object} void loop() { val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023) val = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180) myservo.write(val); // sets the servo position according to the scaled value delay(15); // waits for the servo to get there}
掃描代碼也很簡單。與旋鈕代碼一樣,它使用它包含的 Arduino 伺服庫,然后創(chuàng)建一個myservo對象來表示伺服電機。
然后我們定義幾個整數(shù)。第一個,potpin,代表我們用于電位計游標(biāo)連接的模擬引腳。另一個val是讀取該模擬輸入時采用的值。
設(shè)置與旋鈕代碼相同,我們將伺服對象連接到引腳 9。
在循環(huán)中,我們首先從模擬引腳讀取值,0 到 1023 的值將分配給val。接下來我們使用 Arduino Map Function 改變val來表示 0 到 180 度之間的角度。
之后,我們使用寫入命令將伺服定位到val的值,即電位器選擇的角度。
在短暫延遲讓伺服電機趕上之后,我們重新開始。
將代碼加載到您的 Arduino 并轉(zhuǎn)動電位計。您應(yīng)該看到伺服電機的軸與可調(diào)電阻同步移動。
PCA9685伺服驅(qū)動板正如我們剛剛看到的那樣,直接從 Arduino 控制伺服電機非常簡單。但是它有它的局限性:
您受到 Arduino 上 PWM 引腳數(shù)量的限制。如果伺服是需要其他 PWM 設(shè)備的設(shè)計的一部分,則可能會出現(xiàn)問題。Arduino 伺服庫可能會與其他 Arduino 庫沖突,因為它們嘗試使用相同的計時器。這有時可以通過尋找替代庫來解決。您需要控制很多伺服電機,即使是 Arduino Mega 也有其局限性。一個更好的解決方案是使用單獨的伺服驅(qū)動器板。這將省掉將 PWM 發(fā)送到伺服系統(tǒng)的任務(wù),解放您的 Arduino 以做更好的事情。
我們將使用的電路板基于 PCA9685 芯片。這些板非常受歡迎,由幾家公司制造。
PCA9685 板使用 I2C 與 Arduino 通信。這意味著與 Arduino只有兩個時鐘和數(shù)據(jù)連接。由于板子 I2C 地址可以使用一系列焊盤進行配置,因此您可以在同一電路上使用多個驅(qū)動板。
每塊板卡最多可控制 16 個伺服電機。您可以級聯(lián)多達 62 個板來控制多達 992 個伺服電機!
如果您真的需要控制 992 個伺服電機,您可以使用 I2C 擴展板將多個 I2C 總線連接到您的 Arduino!
與電路板的連接非常簡單。
圖9
電路板的每一側(cè)都有一組相同的連接,這使得將多個模塊連接起來很容易。它們?nèi)缦拢?/p>GND – 接地連接。OE——輸出使能。您可以使用此引腳啟用和禁用所有 16 個輸出。通常它保持未連接狀態(tài),這將導(dǎo)致啟用所有輸出。SCL – I2C 總線的時鐘線。SDA – I2C 總線的數(shù)據(jù)線。VCC – 邏輯電源,+5 伏。V+ – 伺服電機的電源。為此,電路板頂部還有另一個連接器,推薦用該連接器,因為它具有反接保護,而 V+ 則沒有。V+ 引腳真正用于級聯(lián)多個 PCA9685 模塊,并通過單個電源為所有伺服系統(tǒng)供電。
頂部還有一個用于伺服電源的 2 針螺絲連接器。如上所述,它受到反極性保護。
板子底部有 16 組 3 針公頭連接器。每一個可連接一個伺服電機。
電路板的右上角是六個焊盤。這些用于設(shè)置電路板的 I2C 地址。如果您使用多個板,則需要跳線其中的一個或多個以將其內(nèi)部 I2C 地址更改為唯一。
沒有短接任何跳線的 PCA9685 模塊的基地址是 0x40。
如果將 A0 焊盤短路,則地址變?yōu)?0x41。
改為橋接 A1,它現(xiàn)在是 0x42 的地址。橋接 A0 和 A1,地址將為 0x43。
多舵機——控制 MeArm為了演示如何使用 PCA9685 PWM 模塊來控制多個伺服電機,我決定推出我之前構(gòu)建的 MeArm。它有四個伺服電機。
我按如下方式連接所有內(nèi)容:
圖10
你會注意到我還添加了四個電位器,和以前一樣,它們可以是 10k 或以上的任何值,將用于調(diào)節(jié)四個伺服電機中每一個的運行。
PCA9685 模塊連接到 Arduino 上的 SCL 和 SDA 連接。如果您的 Arduino 沒有用于這些 I2C 連接的引腳,則將模擬引腳 A4 用于 SDA,將引腳 A5 用于 SCL。
請注意,即使您確實有單獨的 SCL 和 SDA 引腳,在使用 I2C 時也無法將 A4 和 A5 用作模擬輸入。
四個電位器一側(cè)接地,另一側(cè)接地 5 伏。它們的輸出連接到模擬輸入 A0 到 A3。
Arduino 電源還用于為 PCA9685 模塊上的 VCC 電源供電。四個舵機的獨立電源連接到模塊上的螺釘連接器。
我將伺服電機連接到輸出 0、4、8 和 12。您實際上可以使用任何四個連接,只需記下它們,以便您可以修改代碼以匹配您的選擇。
由于這是我連接到 Arduino 的唯一 PCA9685 模塊,因此我沒有短路任何地址焊盤。
現(xiàn)在讓我們看看我用來完成這一切的代碼:
/* PCA9685 PWM Servo Driver Example pca9685-servomotor-demo.ino Demonstrates use of 16 channel I2C PWM driver board with 4 servo motors Uses Adafruit PWM library Uses 4 potentiometers for input DroneBot Workshop 2018 https://dronebotworkshop.com*/ // Include Wire Library for I2C Communications#include <Wire.h> // Include Adafruit PWM Library#include <Adafruit_PWMServoDriver.h> #define MIN_PULSE_width="360px",height="auto" />
該代碼使用了 Adafruit PWM 伺服驅(qū)動程序庫,您需要安裝該庫才能完成這項工作。它可以從 Arduino IDE 中的庫管理器安裝。
打開 Arduino IDE。從頂部的菜單中選擇Sketch。選擇包括庫。將出現(xiàn)一個子菜單。從子菜單中選擇管理庫...。庫管理器將打開。在庫管理器中搜索“Adafruit PWM”該Adafruit的PWM伺服Library驅(qū)動程序應(yīng)該是第一個結(jié)果。單擊“更多信息”鏈接以顯示“安裝”按鈕。使用此按鈕將庫安裝到您的 IDE 中。關(guān)閉庫管理器。該庫現(xiàn)已安裝,可以在您的 IDE 中使用。我們通過包含 Wire 庫開始代碼。它內(nèi)置于您的 Arduino IDE 中,用于控制 I2C 通信。
接下來我們包括我們剛剛安裝的 Adafruit PWM 伺服庫。
我們現(xiàn)在將定義一些常量。
前兩個常量定義了我們將發(fā)送到伺服系統(tǒng)的 PWM 信號的最小和最大脈沖寬度。你還記得這個脈沖寬度將決定伺服軸的位置。
我們定義的第三個常數(shù)是 PWM 頻率,模擬伺服電機的頻率為 50 Hz。如果您使用的是數(shù)字伺服電機,您可能需要增加它,因為它們通??梢允褂酶哌_ 200 Hz 的頻率。
接下來,我們使用 Adafruit PWM 庫創(chuàng)建一個名為pwm的對象。如果您使用了默認 0x40 以外的地址,則需要在此處定義它。
現(xiàn)在我們定義一些變量。第一個是電位器輸入引腳,A0 到 A3。之后是 PCA9685 板上的電機輸出,我在連接電機時使用了 0、4、8 和 12。如果您為電機使用不同的連接器,請更改這些值。
現(xiàn)在進入setup設(shè)置。我們初始化我們之前創(chuàng)建的pwm對象,然后將 PWM 振蕩器的頻率設(shè)置為我們定義的頻率,在我們的例子中是 50 Hz。
現(xiàn)在我們創(chuàng)建一個函數(shù)來驅(qū)動電機以響應(yīng)電位計的位置。然后我們可以為每個電機調(diào)用這個函數(shù)。
我們的函數(shù)叫做moveMotor。它有兩個輸入,controlIn代表電位計輸入,motorOut代表PCA9685上的電機連接。
該函數(shù)讀取電位計值并將其轉(zhuǎn)換為脈沖寬度。然后將此脈沖寬度與Adafruit PWM 伺服庫的setPWM方法一起使用,以將脈沖發(fā)送到由motorOut變量指定的電機。
在循環(huán)中,我們只調(diào)用moveMotor函數(shù)四次,每個電位器-伺服電機組合調(diào)用一次。
結(jié)果是 MeArm 中的四個伺服電機將響應(yīng)電位計。在演示中,我使用了滑動電位計,這使得精確定位 MeArm 變得更加容易。
結(jié)論伺服電機是多功能的小設(shè)備,在業(yè)余愛好者項目中有無數(shù)用途,知道如何控制它們是一項必不可少的 Arduino 編碼和接線技能。
希望本文及其相關(guān)視頻有助于闡明伺服電機的使用,伺服電機可以直接連接到 Arduino,也可以使用 PCA9685 PWM 控制器通過 I2C 連接。
因此,請為自己準(zhǔn)備一堆伺服電機,今天就開始動起來吧!
以上就是關(guān)于遙控pos機,用Arduino控制伺服電機的知識,后面我們會繼續(xù)為大家整理關(guān)于遙控pos機的知識,希望能夠幫助到大家!
