遙控pos機(jī),用Arduino控制伺服電機(jī)

 新聞資訊2  |   2023-06-23 17:47  |  投稿人:pos機(jī)之家

網(wǎng)上有很多關(guān)于遙控pos機(jī),用Arduino控制伺服電機(jī)的知識(shí),也有很多人為大家解答關(guān)于遙控pos機(jī)的問(wèn)題,今天pos機(jī)之家(m.afbey.com)為大家整理了關(guān)于這方面的知識(shí),讓我們一起來(lái)看下吧!

本文目錄一覽:

1、遙控pos機(jī)

遙控pos機(jī)

如果您需要控制船上或飛機(jī)上的舵機(jī)以控制方向,則伺服系統(tǒng)是完美的選擇。它們?cè)跈C(jī)器人工作中非常有用,可以定位相機(jī)、傳感器或機(jī)器人的運(yùn)動(dòng)部件。伺服也可以用作模擬儀表,如速度表和轉(zhuǎn)速表。

本文翻譯自科普大神donebotWorkshop.com

譯者:DIY百事

目錄

1 什么是伺服電機(jī)? 1.1伺服電機(jī)的種類 1.2模擬伺服電機(jī)

2 伺服是如何工作的? 2.1連續(xù)旋轉(zhuǎn)伺服電機(jī)

3 伺服電機(jī)控制信號(hào) 3.1常規(guī)伺服電機(jī)時(shí)序 3.2連續(xù)旋轉(zhuǎn)伺服電機(jī)時(shí)序

4 伺服電機(jī)規(guī)格4.1電機(jī)尺寸 4.2齒輪材料 4.3速度 4.4扭矩 4.5工作電壓 4.6臂(連桿)和配件

5 測(cè)試伺服電機(jī) 5.1伺服測(cè)試儀 5.2伺服電機(jī)連接

6 連接到 Arduino 6.1 PWM 輸出 6.2電源注意事項(xiàng)

7 旋轉(zhuǎn)掃描的代碼

8 可調(diào)節(jié)角度的旋轉(zhuǎn)掃描的代碼

9 PCA9685 伺服驅(qū)動(dòng)板

10 多個(gè)伺服系統(tǒng)——控制 MeArm

11 結(jié)論

什么是伺服電機(jī)?

伺服電機(jī)是一種低速、高扭矩的電機(jī),有多種尺寸可供選擇。與直流和步進(jìn)電機(jī)不同,伺服電機(jī)通常不會(huì)旋轉(zhuǎn)完整的 360 度。相反,它被限制在 180、270 或 90 度的范圍內(nèi)。

控制信號(hào)被發(fā)送到伺服系統(tǒng)以將軸定位在所需的角度。這種具有單一信號(hào)的布置使得伺服系統(tǒng)可以簡(jiǎn)單地用于無(wú)線電和遙控設(shè)計(jì)以及單片機(jī)。

我們已經(jīng)構(gòu)建了一些使用電機(jī)使物體移動(dòng)的項(xiàng)目,并且在此過(guò)程中我們查看了一些可以通過(guò) Arduino 和 Raspberry Pi 項(xiàng)目控制的不同類型的電機(jī)。

圖1

伺服電機(jī)的種類

伺服電機(jī)本質(zhì)上是一種電機(jī),它有一個(gè)控制信號(hào)輸入端用于指定電機(jī)軸位置。

伺服系統(tǒng)用于工業(yè)和業(yè)余愛(ài)好應(yīng)用。工業(yè)伺服系統(tǒng)通常是帶有數(shù)字控制輸入的交流電機(jī),成本數(shù)百或數(shù)千美元。

業(yè)余愛(ài)好者用的伺服電機(jī)通常是直流電機(jī),可以用數(shù)字或模擬信號(hào)進(jìn)行控制。

數(shù)字伺服系統(tǒng)用于需要快速響應(yīng)的應(yīng)用中,例如飛機(jī)上的升降舵或直升機(jī)上的方向舵。我們也不會(huì)使用這些類型的電機(jī),盡管用于使用 Arduino 驅(qū)動(dòng)它們的電路圖和代碼與我們將用于模擬伺服系統(tǒng)的相同。

我們將使用普通的模擬伺服電機(jī),這是業(yè)余愛(ài)好者最常用的類型。它們價(jià)格低廉且易于獲得。安裝硬件也很容易找到,因?yàn)檫@些伺服器具有一組標(biāo)準(zhǔn)尺寸。

模擬伺服電機(jī)

模擬伺服電機(jī)價(jià)格低廉,有多種尺寸和額定值可供選擇。當(dāng)您需要可以準(zhǔn)確定位的小型高扭矩電機(jī)時(shí),這是完美的選擇。

模擬伺服電機(jī)的“模擬”部分是控制信號(hào)。模擬伺服電機(jī)響應(yīng)脈沖寬度調(diào)制( PWM) 信號(hào)來(lái)定位其電機(jī)軸。

PWM 是一種理想的控制方式。它可以由一個(gè)簡(jiǎn)單的定時(shí)器電路或單片機(jī)產(chǎn)生。它可以通過(guò)單根電線發(fā)送,也可以通過(guò)無(wú)線電或光束傳送信號(hào)。

Arduino 有許多支持 PWM 的輸出引腳,非常適合控制伺服電機(jī)。

伺服系統(tǒng)如何工作?

伺服電機(jī)是一種內(nèi)置“伺服機(jī)構(gòu)”的電機(jī)。

伺服機(jī)構(gòu)使用傳感器來(lái)監(jiān)控電機(jī)軸位置然后用控制器來(lái)控制電機(jī)。它接收一個(gè)信號(hào),指示軸應(yīng)運(yùn)動(dòng)到的位置。然后它將電機(jī)軸移動(dòng)到所需的位置。

在模擬伺服電機(jī)中,我們將使用的控制信號(hào)是一個(gè) PWM 信號(hào),其脈沖寬度決定了電機(jī)軸的定位角度。電機(jī)本身是一個(gè)簡(jiǎn)單的直流電機(jī),帶有減速齒輪組以減慢其速度并增加其扭矩。

為了正常工作,伺服電機(jī)需要一個(gè)可以準(zhǔn)確測(cè)量其軸位置的傳感器。在一些工業(yè)和高端玩具伺服電機(jī)上,這是使用光電盤完成的,但在大多數(shù)標(biāo)準(zhǔn)業(yè)余伺服電機(jī)中,傳感器是一個(gè)電位計(jì)。這也是有效的,因?yàn)檫@些伺服系統(tǒng)通常會(huì)移動(dòng) 180 到 270 度,完全在電位計(jì)的范圍內(nèi)。然而,電位計(jì)的精度,特別是在低成本伺服電機(jī)中的精度,會(huì)影響伺服機(jī)構(gòu)的整體精度。

連續(xù)旋轉(zhuǎn)伺服電機(jī)

標(biāo)準(zhǔn)模擬伺服電機(jī)的旋轉(zhuǎn)受到限制,通常為 180 或 270 度(目前最常見(jiàn)的是 180 度)。其內(nèi)部齒輪裝置以小巧且廉價(jià)的包裝提供高扭矩動(dòng)力組。

小尺寸和大扭矩的結(jié)合也使伺服電機(jī)在小型玩具和機(jī)器人等小型設(shè)備的設(shè)計(jì)中用作標(biāo)準(zhǔn)直流電機(jī)的替代品。有些人會(huì)通過(guò)移除電位計(jì)來(lái)修改標(biāo)準(zhǔn)模擬舵機(jī),讓舵機(jī)可以旋轉(zhuǎn)整整 360 度。

從制造商得到的消息,現(xiàn)在也提供“連續(xù)旋轉(zhuǎn)伺服電機(jī)”,其實(shí)是剝離了伺服機(jī)構(gòu)的伺服電機(jī)。

在連續(xù)旋轉(zhuǎn)伺服電機(jī)中,軸旋轉(zhuǎn)的速度和方向由與傳統(tǒng)模擬伺服電機(jī)相同的 PWM 信號(hào)控制。

具有簡(jiǎn)單的單線控制信號(hào)和與標(biāo)準(zhǔn)伺服電機(jī)相同的物理封裝使連續(xù)旋轉(zhuǎn)伺服電機(jī)能用到許多場(chǎng)合。

伺服電機(jī)控制信號(hào)

為了使用模擬伺服電機(jī),您需要了解如何使用 PWM 控制其運(yùn)行。常規(guī)旋轉(zhuǎn)和連續(xù)旋轉(zhuǎn)這兩個(gè)品種使用相同的計(jì)時(shí)信號(hào),但對(duì)它們的響應(yīng)略有不同。

讓我們來(lái)看看大多數(shù)模擬伺服電機(jī)中使用的PWM信號(hào)。

傳統(tǒng)伺服電機(jī)時(shí)序

在傳統(tǒng)的模擬伺服電機(jī)中,使用周期為 20 ms 的 PWM 信號(hào)來(lái)控制電機(jī)。20 ms 的信號(hào)具有 50 Hz 的頻率。

脈沖寬度在 1 到 2 ms 之間變化,以控制電機(jī)軸位置。

圖2

1.5ms 的脈沖寬度將使伺服軸停留在 90 度位置,即其行程的中心。1ms 的脈沖寬度將導(dǎo)致伺服軸停在 0 度位置。2ms 的脈沖寬度將使伺服軸停在 180 度位置。

在 1ms 和 2ms 之間改變脈沖寬度將使伺服軸在 180 度的范圍內(nèi)移動(dòng)。通過(guò)相應(yīng)地調(diào)整脈沖寬度,您可以將其放置在您想要的任何角度。

連續(xù)旋轉(zhuǎn)伺服電機(jī)時(shí)序

在連續(xù)旋轉(zhuǎn)伺服電機(jī)中,相同的 PWM 信號(hào)將導(dǎo)致電機(jī)的性能不同。

圖3

1.5ms 的脈沖寬度將導(dǎo)致伺服軸停止旋轉(zhuǎn)。1ms的脈沖寬度將導(dǎo)致伺服軸逆時(shí)針全速旋轉(zhuǎn)。2ms 的脈沖寬度將導(dǎo)致伺服軸順時(shí)針全速旋轉(zhuǎn)。

在 1ms 和 1.5ms 之間改變脈沖寬度將使電機(jī)逆時(shí)針旋轉(zhuǎn),較短的脈沖寬度使電機(jī)旋轉(zhuǎn)得更快。

在 1.5ms 和 2ms 之間改變脈沖寬度將導(dǎo)致電機(jī)順時(shí)針旋轉(zhuǎn),脈沖越長(zhǎng),速度越快。

商用連續(xù)旋轉(zhuǎn)伺服電機(jī)將有一個(gè)調(diào)節(jié)電位器,可用于在電機(jī)輸入 1.5ms 脈沖寬度時(shí)將速度歸零。

伺服電機(jī)規(guī)格

市面上有數(shù)百種模擬伺服電機(jī)可用,了解如何閱讀它們的規(guī)格對(duì)于為您的應(yīng)用選擇正確的電機(jī)至關(guān)重要。

以下是您在選擇伺服電機(jī)時(shí)會(huì)遇到的一些關(guān)鍵參數(shù)。

電機(jī)尺寸

伺服電機(jī)的物理尺寸自然是一個(gè)重要的考慮因素,您的應(yīng)用可能會(huì)要求電機(jī)符合特定的尺寸限制。

有多種標(biāo)準(zhǔn)伺服電機(jī)尺寸,這使得找到適合您的伺服電機(jī)的安裝支架和硬件變得更加容易。

伺服大小通常指定如下:

納米亞微微小型的標(biāo)準(zhǔn)大

也有特殊尺寸。微(Micro) 和 標(biāo)準(zhǔn)(Standard) 尺寸是 Arduino 實(shí)驗(yàn)者最常使用的尺寸。

齒輪材料

伺服系統(tǒng)有許多內(nèi)齒輪和直接在輸出軸上的齒輪裝置,這些用于降低電機(jī)速度并增加其扭矩。

齒輪可以使用塑料或金屬制造。

金屬齒輪提供更好的性能,通??梢灾С指叩呐ぞ夭⑶也灰酌撀?。金屬齒輪伺服系統(tǒng)的成本也更高。

塑料齒輪更容易脫落,并且沒(méi)有金屬齒輪的扭矩能力。然而,它們比金屬齒輪伺服電機(jī)更安靜且更便宜。

相同的伺服電機(jī)結(jié)構(gòu)可能會(huì)使用不同的齒輪材料。一種常見(jiàn)的實(shí)驗(yàn)電機(jī)是 SG90,帶有塑料齒輪的微型伺服電機(jī)。它的金屬齒輪對(duì)應(yīng)型號(hào)是MG90。由于它們采用相同的外殼并具有相同的電壓和驅(qū)動(dòng)器要求,因此它們可以互換,MG90 因其金屬齒輪而提供卓越的性能。

伺服電機(jī)的質(zhì)量還受軸承類型和軸承數(shù)量的影響。帶有多個(gè)軸承的電機(jī)轉(zhuǎn)動(dòng)更平穩(wěn)、更準(zhǔn)確。

速度

伺服電機(jī)的速度定義為將伺服軸移動(dòng) 60 度所需的時(shí)間。

圖4

比如規(guī)格0.25 秒/60°,這意味著行進(jìn) 60 度需要四分之一秒。

伺服速度更適用于傳統(tǒng)伺服電機(jī),連續(xù)旋轉(zhuǎn)電機(jī)與任何直流電機(jī)一樣額定為最大 RPM。

高速伺服系統(tǒng)用于航模和直升機(jī)應(yīng)用,以控制經(jīng)常需要快速移動(dòng)的升降舵和方向舵。其中許多使用數(shù)字控制和內(nèi)部光學(xué)位置傳感器代替電位計(jì),以實(shí)現(xiàn)更快速的移動(dòng)。

對(duì)于一些業(yè)余愛(ài)好應(yīng)用如控制攝像機(jī)或超聲波傳感器的位置,速度通常不是關(guān)鍵因素。

扭矩

扭矩是一個(gè)非常重要的參數(shù),它從字面上指定了電機(jī)的力道。

扭矩被定義為伺服系統(tǒng)可以施加到連桿上的力,換句話說(shuō),它可以承受多大的力。

它以千克厘米為單位。

要了解扭矩?cái)?shù)字與現(xiàn)實(shí)世界情況的關(guān)系,請(qǐng)考慮以下示例:

圖5

如伺服電機(jī)的額定值為 5 kg-cm。也就是說(shuō)伺服電機(jī)可在距軸中心 1 厘米處的杠桿上承受高達(dá) 5kg 的負(fù)載。

在兩倍距離處,負(fù)載將減半,因此在距軸 2 厘米處,杠桿可以支撐 2.5 千克。

一半的距離使可支撐的負(fù)載翻倍至 10kg。

更大的伺服電機(jī)往往具有更大的扭矩能力,更大扭矩的電機(jī)往往更貴。它們也更重,消耗更多電流。

工作電壓

大多數(shù)業(yè)余模擬舵機(jī)的額定電壓為 4.8 到 6 伏,并在更高的電壓下實(shí)現(xiàn)其最大性能。

還有更多的伺服系統(tǒng),最大額定電壓為 7.5 到 8.5 伏。由于 7.4 伏鋰聚合物電池可用于模型飛機(jī)、船只、車輛和四軸飛行器,這些電池變得越來(lái)越受歡迎。

伺服電機(jī),尤其是高扭矩型號(hào),會(huì)消耗相當(dāng)多的電流,在為您的項(xiàng)目選擇電源或電池時(shí)需要考慮到這一點(diǎn)。

連桿、和配件

大多數(shù)伺服電機(jī)都有一個(gè)齒輪軸,它的中心有螺紋方便堅(jiān)固。

為了使用伺服電機(jī),您需要在軸上裝上另一個(gè)零件—平臺(tái)、齒輪、輪子或任何您試圖與伺服電機(jī)軸一起移動(dòng)的東西。

伺服電機(jī)配有各種不同形狀的杠桿和圓盤,可以與軸配合,以方便將伺服電機(jī)連接到您的設(shè)計(jì)中。這些部件通常被稱“連桿”。它們連接到伺服電機(jī)軸上并用中心螺釘固定到位,它們可以由塑料或金屬制成。

除了連桿,您還應(yīng)該隨伺服電機(jī)一起收到各種安裝硬件和螺釘,包括軸的中心螺釘(不要丟失它,因?yàn)樗鼈兺蛩欧愋投悾?/p>

您還可以購(gòu)買設(shè)計(jì)用于接受微型和標(biāo)準(zhǔn)等流行伺服尺寸的安裝板。

伺服連桿、固定件和附件的可用性和互換性使您可以輕松地將伺服電機(jī)集成到您的設(shè)計(jì)中。

測(cè)試伺服電機(jī)

與任何組件一樣,了解如何測(cè)試伺服電機(jī)以確保正常運(yùn)行很有用。

在將伺服電機(jī)安裝到您的項(xiàng)目中之前,能夠?qū)⑺欧S旋轉(zhuǎn)到預(yù)設(shè)位置(例如 90 度)也很有用,以便一切都正確對(duì)齊。

您可以使用多種方法來(lái)測(cè)試伺服。一個(gè)簡(jiǎn)單的 Arduino 代碼和連接,就像您將在此處進(jìn)一步看到的那樣,將成為測(cè)試伺服并將其軸定位到預(yù)設(shè)位置的絕佳方法。

另一種方法是使用專用伺服測(cè)試儀。

伺服測(cè)試儀

正如您想象的那樣,伺服測(cè)試儀是一種用于測(cè)試伺服電機(jī)的設(shè)備!它們非常有用,而且可能非常便宜,具體取決于您想要的功能。

一個(gè)簡(jiǎn)單的伺服測(cè)試儀,如這里所示(并在隨附的視頻中使用)只需幾美元。

更先進(jìn)的伺服測(cè)試儀有多個(gè)電機(jī)的速度和定心控制,有些還有電流表。加上這些都不到20美元。

這些測(cè)試儀可以共用電機(jī)本身的電源。它們可以插入標(biāo)準(zhǔn)伺服電機(jī)連接器,然后它們將控制伺服電機(jī)。

伺服測(cè)試儀將允許您手動(dòng)移動(dòng)電機(jī)并將其置于 90 度位置的中心。這使您可以在連桿固定到電機(jī)之前檢查電機(jī)是否正確運(yùn)行并對(duì)齊其軸位置。

伺服電機(jī)接線

模擬伺服電機(jī)通常有一個(gè) 3 針連接器。

民用伺服電機(jī)上使用的顏色代碼因制造商而異。然而,大多數(shù)制造商使用相同的引腳排列,如下圖所示:

圖6

伺服電機(jī)的三個(gè)連接如下:

Ground接地- 電機(jī)和邏輯的公共接地。Power電源- 為伺服供電的正電壓。Control控制——PWM 控制信號(hào)的輸入。

最常見(jiàn)的連接器是標(biāo)準(zhǔn)的杜邦連接器,間距為 0.1 英寸。這使得使用標(biāo)準(zhǔn)杜邦接頭將伺服電機(jī)連接到您的項(xiàng)目變得容易。

您還可以將面包板電線直接插入伺服 3 針連接器,以便您可以使用伺服電機(jī)進(jìn)行原型設(shè)計(jì)。

連接到 Arduino

正如我們已經(jīng)描述的那樣,伺服電機(jī)需要 PWM 控制信號(hào)才能正確運(yùn)行。您可以通過(guò)多種方式生成此信號(hào)——簡(jiǎn)單的定時(shí)器電路、專用控制芯片或使用具有 PWM 輸出功能的單片機(jī)。

單片機(jī)在能夠更有效地控制伺服方面自然具有許多優(yōu)勢(shì)。Arduino 是一個(gè)很好的選擇。

Arduino IDE 已經(jīng)包含一個(gè)伺服庫(kù),因此您很快就會(huì)看到,將伺服添加到您的代碼中非常簡(jiǎn)單。

PWM脈寬調(diào)制輸出

所有 Arduino 板都有一些能夠進(jìn)行脈寬調(diào)制( PWM )的輸出引腳。在 Arduino Uno 上有 6 個(gè)支持 PWM 的引腳。

請(qǐng)記住,要生成 PWM 信號(hào),伺服庫(kù)文件需要使用一些內(nèi)部 Arduino 計(jì)時(shí)器,特別是計(jì)時(shí)器 1。這可能會(huì)干擾其他也需要相同計(jì)時(shí)器的庫(kù)。解決此問(wèn)題的一種方法是為伺服或其他所需功能尋找替代庫(kù),這是繞過(guò)這些限制的常用方法。

更高級(jí)的方法是使用外部 PWM 控制器板并釋放 Arduino 計(jì)時(shí)器的需求。這將在本文中進(jìn)一步討論。

電源注意事項(xiàng)

大多數(shù)伺服電機(jī)都可以在 5 伏電壓下運(yùn)行,因此很容易使用 Arduino 板上的 5 伏輸出為伺服供電。

但這不是一個(gè)很好的主意。

伺服系統(tǒng)會(huì)消耗大量電流,尤其是在負(fù)載時(shí)。這可能比 Arduino 板上的電壓調(diào)節(jié)器所能承受的電流更大,尤其是在更便宜的克隆板上。雖然大多數(shù) Arduino 板可以支持一個(gè)微型伺服電機(jī),但它仍然會(huì)給調(diào)壓器帶來(lái)很大的負(fù)擔(dān)。

伺服電機(jī)與所有其他電機(jī)一樣,會(huì)在電源電路上產(chǎn)生電噪聲。在為單片機(jī)和其他邏輯設(shè)備供電的線路上存在這種噪聲通常會(huì)導(dǎo)致系統(tǒng)錯(cuò)誤。

為您的伺服電機(jī)使用單獨(dú)的電源是一個(gè)更好的主意。5 伏 USB 3 電源可以很好地工作, 4 節(jié) AA 電池也可以。

如果您真的必須直接從 Arduino 為伺服電機(jī)供電,請(qǐng)將其限制為一個(gè)微型伺服電機(jī)。在靠近伺服電機(jī)的電源線上安裝一個(gè) 100uf 或更大的電容器可以幫助吸收這些電涌。

伺服掃描旋轉(zhuǎn)的代碼

對(duì)于我們的第一個(gè) Arduino 代碼,我們將使用Arduino IDE內(nèi)置示例。無(wú)需編寫代碼或安裝庫(kù)!

連接硬件以用于我們的第一個(gè)演示非常簡(jiǎn)單。您需要一個(gè) Arduino(任何類型)、一個(gè)伺服電機(jī)和一個(gè)伺服電機(jī)電源。

圖7

連接再簡(jiǎn)單不過(guò)了。伺服由自己的電源供電,接地連接也連接到 Arduino 接地。然后來(lái)自伺服的控制引線連接到 Arduino 上的引腳 9。

Arduino Uno 上的引腳 9 是能夠進(jìn)行 PWM 的六個(gè)引腳之一,在大多數(shù) Uno 板上,您會(huì)在 6 個(gè)啟用 PWM 的 I/O 引腳旁邊看到一個(gè)符號(hào)。

將您的 Arduino 連接到您的計(jì)算機(jī)并啟動(dòng) Arduino IDE。

單擊屏幕頂部的文件菜單。從那里選擇示例子菜單。

將顯示示例代碼列表。它分為幾個(gè)部分,向下滾動(dòng)列表直到到達(dá)“來(lái)自庫(kù)的示例”部分。

在“庫(kù)中的示例”部分,您將看到“伺服”。突出顯示以顯示兩個(gè)代碼,旋鈕和掃描。

加載代碼。

/* 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)是一個(gè)非?;镜拇a,它只是將伺服軸從頭掃描到尾。

該代碼使用了Arduino IDE 中包含的Arduino 伺服庫(kù)。顧名思義,它是一個(gè)用 PWM 控制伺服電機(jī)的庫(kù)。我們包含該庫(kù)并定義一個(gè)名為myservo的對(duì)象來(lái)表示我們的伺服電機(jī)。如果您有多個(gè)伺服電機(jī),您可以為每個(gè)電機(jī)定義一個(gè)對(duì)象。

然后,我們定義一個(gè)名為“ pos ”的變量,用于保存我們希望伺服電機(jī)軸移動(dòng)到的位置(角度)。

在設(shè)置中,我們將伺服對(duì)象連接到 Arduino 引腳 9 上的伺服電機(jī)控制線。

然后是loop循環(huán),它由兩個(gè) for 循環(huán)組成。第一個(gè)循環(huán)增加pos變量的值,并使用它使用myservo.write命令控制伺服電機(jī),將軸從 0 度發(fā)送到 180 度。

第二個(gè) for 循環(huán)是相同的,只是它將值從 180 遞減到 0,將軸朝相反的方向送回。

將代碼加載到 Arduino 中并觀察伺服電機(jī)軸,它應(yīng)該從一端移動(dòng)到另一端。

您剛剛使用 Arduino 進(jìn)行了伺服運(yùn)動(dòng)!

旋鈕代碼

讓我們繼續(xù)看 Arduino IDE 附帶的另一個(gè)演示代碼,即旋鈕代碼。在我們做之前,我們需要在我們的電路中添加一個(gè)組件。

圖8

正如接線圖所示,您需要一個(gè)電位計(jì),10k 以上的任何值都可以正常工作。將它的一端接地,另一端連接到 Arduino +5 伏。中間那個(gè)輸出連接到模擬輸入 A0。

電位器將用作定位伺服電機(jī)軸的控件,您可以使用它在其 180 度行程中撥動(dòng)任何位置。這不僅是一個(gè)很好的演示,它還是一個(gè)有用的功能,用于在將伺服電機(jī)安裝到您的項(xiàng)目之前設(shè)置它們的位置。

如果您在電路中替換連續(xù)旋轉(zhuǎn)伺服系統(tǒng),您可以使用電位計(jì)來(lái)控制電機(jī)旋轉(zhuǎn)的速度和方向。

修改實(shí)驗(yàn)以包含電位計(jì)后,打開(kāi) 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}

掃描代碼也很簡(jiǎn)單。與旋鈕代碼一樣,它使用它包含的 Arduino 伺服庫(kù),然后創(chuàng)建一個(gè)myservo對(duì)象來(lái)表示伺服電機(jī)。

然后我們定義幾個(gè)整數(shù)。第一個(gè),potpin,代表我們用于電位計(jì)游標(biāo)連接的模擬引腳。另一個(gè)val是讀取該模擬輸入時(shí)采用的值。

設(shè)置與旋鈕代碼相同,我們將伺服對(duì)象連接到引腳 9。

在循環(huán)中,我們首先從模擬引腳讀取值,0 到 1023 的值將分配給val。接下來(lái)我們使用 Arduino Map Function 改變val來(lái)表示 0 到 180 度之間的角度。

之后,我們使用寫入命令將伺服定位到val的值,即電位器選擇的角度。

在短暫延遲讓伺服電機(jī)趕上之后,我們重新開(kāi)始。

將代碼加載到您的 Arduino 并轉(zhuǎn)動(dòng)電位計(jì)。您應(yīng)該看到伺服電機(jī)的軸與可調(diào)電阻同步移動(dòng)。

PCA9685伺服驅(qū)動(dòng)板

正如我們剛剛看到的那樣,直接從 Arduino 控制伺服電機(jī)非常簡(jiǎn)單。但是它有它的局限性:

您受到 Arduino 上 PWM 引腳數(shù)量的限制。如果伺服是需要其他 PWM 設(shè)備的設(shè)計(jì)的一部分,則可能會(huì)出現(xiàn)問(wèn)題。Arduino 伺服庫(kù)可能會(huì)與其他 Arduino 庫(kù)沖突,因?yàn)樗鼈儑L試使用相同的計(jì)時(shí)器。這有時(shí)可以通過(guò)尋找替代庫(kù)來(lái)解決。您需要控制很多伺服電機(jī),即使是 Arduino Mega 也有其局限性。

一個(gè)更好的解決方案是使用單獨(dú)的伺服驅(qū)動(dòng)器板。這將省掉將 PWM 發(fā)送到伺服系統(tǒng)的任務(wù),解放您的 Arduino 以做更好的事情。

我們將使用的電路板基于 PCA9685 芯片。這些板非常受歡迎,由幾家公司制造。

PCA9685 板使用 I2C 與 Arduino 通信。這意味著與 Arduino只有兩個(gè)時(shí)鐘和數(shù)據(jù)連接。由于板子 I2C 地址可以使用一系列焊盤進(jìn)行配置,因此您可以在同一電路上使用多個(gè)驅(qū)動(dòng)板。

每塊板卡最多可控制 16 個(gè)伺服電機(jī)。您可以級(jí)聯(lián)多達(dá) 62 個(gè)板來(lái)控制多達(dá) 992 個(gè)伺服電機(jī)!

如果您真的需要控制 992 個(gè)伺服電機(jī),您可以使用 I2C 擴(kuò)展板將多個(gè) I2C 總線連接到您的 Arduino!

與電路板的連接非常簡(jiǎn)單。

圖9

電路板的每一側(cè)都有一組相同的連接,這使得將多個(gè)模塊連接起來(lái)很容易。它們?nèi)缦拢?/p>GND – 接地連接。OE——輸出使能。您可以使用此引腳啟用和禁用所有 16 個(gè)輸出。通常它保持未連接狀態(tài),這將導(dǎo)致啟用所有輸出。SCL – I2C 總線的時(shí)鐘線。SDA – I2C 總線的數(shù)據(jù)線。VCC – 邏輯電源,+5 伏。V+ – 伺服電機(jī)的電源。為此,電路板頂部還有另一個(gè)連接器,推薦用該連接器,因?yàn)樗哂蟹唇颖Wo(hù),而 V+ 則沒(méi)有。V+ 引腳真正用于級(jí)聯(lián)多個(gè) PCA9685 模塊,并通過(guò)單個(gè)電源為所有伺服系統(tǒng)供電。

頂部還有一個(gè)用于伺服電源的 2 針螺絲連接器。如上所述,它受到反極性保護(hù)。

板子底部有 16 組 3 針公頭連接器。每一個(gè)可連接一個(gè)伺服電機(jī)。

電路板的右上角是六個(gè)焊盤。這些用于設(shè)置電路板的 I2C 地址。如果您使用多個(gè)板,則需要跳線其中的一個(gè)或多個(gè)以將其內(nèi)部 I2C 地址更改為唯一。

沒(méi)有短接任何跳線的 PCA9685 模塊的基地址是 0x40。

如果將 A0 焊盤短路,則地址變?yōu)?0x41。

改為橋接 A1,它現(xiàn)在是 0x42 的地址。橋接 A0 和 A1,地址將為 0x43。

多舵機(jī)——控制 MeArm

為了演示如何使用 PCA9685 PWM 模塊來(lái)控制多個(gè)伺服電機(jī),我決定推出我之前構(gòu)建的 MeArm。它有四個(gè)伺服電機(jī)。

我按如下方式連接所有內(nèi)容:

圖10

你會(huì)注意到我還添加了四個(gè)電位器,和以前一樣,它們可以是 10k 或以上的任何值,將用于調(diào)節(jié)四個(gè)伺服電機(jī)中每一個(gè)的運(yùn)行。

PCA9685 模塊連接到 Arduino 上的 SCL 和 SDA 連接。如果您的 Arduino 沒(méi)有用于這些 I2C 連接的引腳,則將模擬引腳 A4 用于 SDA,將引腳 A5 用于 SCL。

請(qǐng)注意,即使您確實(shí)有單獨(dú)的 SCL 和 SDA 引腳,在使用 I2C 時(shí)也無(wú)法將 A4 和 A5 用作模擬輸入。

四個(gè)電位器一側(cè)接地,另一側(cè)接地 5 伏。它們的輸出連接到模擬輸入 A0 到 A3。

Arduino 電源還用于為 PCA9685 模塊上的 VCC 電源供電。四個(gè)舵機(jī)的獨(dú)立電源連接到模塊上的螺釘連接器。

我將伺服電機(jī)連接到輸出 0、4、8 和 12。您實(shí)際上可以使用任何四個(gè)連接,只需記下它們,以便您可以修改代碼以匹配您的選擇。

由于這是我連接到 Arduino 的唯一 PCA9685 模塊,因此我沒(méi)有短路任何地址焊盤。

現(xiàn)在讓我們看看我用來(lái)完成這一切的代碼:

 /*  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ū)動(dòng)程序庫(kù),您需要安裝該庫(kù)才能完成這項(xiàng)工作。它可以從 Arduino IDE 中的庫(kù)管理器安裝。

打開(kāi) Arduino IDE。從頂部的菜單中選擇Sketch。選擇包括庫(kù)。將出現(xiàn)一個(gè)子菜單。從子菜單中選擇管理庫(kù)...。庫(kù)管理器將打開(kāi)。在庫(kù)管理器中搜索“Adafruit PWM”該Adafruit的PWM伺服Library驅(qū)動(dòng)程序應(yīng)該是第一個(gè)結(jié)果。單擊“更多信息”鏈接以顯示“安裝”按鈕。使用此按鈕將庫(kù)安裝到您的 IDE 中。關(guān)閉庫(kù)管理器。該庫(kù)現(xiàn)已安裝,可以在您的 IDE 中使用。

我們通過(guò)包含 Wire 庫(kù)開(kāi)始代碼。它內(nèi)置于您的 Arduino IDE 中,用于控制 I2C 通信。

接下來(lái)我們包括我們剛剛安裝的 Adafruit PWM 伺服庫(kù)。

我們現(xiàn)在將定義一些常量。

前兩個(gè)常量定義了我們將發(fā)送到伺服系統(tǒng)的 PWM 信號(hào)的最小和最大脈沖寬度。你還記得這個(gè)脈沖寬度將決定伺服軸的位置。

我們定義的第三個(gè)常數(shù)是 PWM 頻率,模擬伺服電機(jī)的頻率為 50 Hz。如果您使用的是數(shù)字伺服電機(jī),您可能需要增加它,因?yàn)樗鼈兺ǔ?梢允褂酶哌_(dá) 200 Hz 的頻率。

接下來(lái),我們使用 Adafruit PWM 庫(kù)創(chuàng)建一個(gè)名為pwm的對(duì)象。如果您使用了默認(rèn) 0x40 以外的地址,則需要在此處定義它。

現(xiàn)在我們定義一些變量。第一個(gè)是電位器輸入引腳,A0 到 A3。之后是 PCA9685 板上的電機(jī)輸出,我在連接電機(jī)時(shí)使用了 0、4、8 和 12。如果您為電機(jī)使用不同的連接器,請(qǐng)更改這些值。

現(xiàn)在進(jìn)入setup設(shè)置。我們初始化我們之前創(chuàng)建的pwm對(duì)象,然后將 PWM 振蕩器的頻率設(shè)置為我們定義的頻率,在我們的例子中是 50 Hz。

現(xiàn)在我們創(chuàng)建一個(gè)函數(shù)來(lái)驅(qū)動(dòng)電機(jī)以響應(yīng)電位計(jì)的位置。然后我們可以為每個(gè)電機(jī)調(diào)用這個(gè)函數(shù)。

我們的函數(shù)叫做moveMotor。它有兩個(gè)輸入,controlIn代表電位計(jì)輸入,motorOut代表PCA9685上的電機(jī)連接。

該函數(shù)讀取電位計(jì)值并將其轉(zhuǎn)換為脈沖寬度。然后將此脈沖寬度與Adafruit PWM 伺服庫(kù)的setPWM方法一起使用,以將脈沖發(fā)送到由motorOut變量指定的電機(jī)。

在循環(huán)中,我們只調(diào)用moveMotor函數(shù)四次,每個(gè)電位器-伺服電機(jī)組合調(diào)用一次。

結(jié)果是 MeArm 中的四個(gè)伺服電機(jī)將響應(yīng)電位計(jì)。在演示中,我使用了滑動(dòng)電位計(jì),這使得精確定位 MeArm 變得更加容易。

結(jié)論

伺服電機(jī)是多功能的小設(shè)備,在業(yè)余愛(ài)好者項(xiàng)目中有無(wú)數(shù)用途,知道如何控制它們是一項(xiàng)必不可少的 Arduino 編碼和接線技能。

希望本文及其相關(guān)視頻有助于闡明伺服電機(jī)的使用,伺服電機(jī)可以直接連接到 Arduino,也可以使用 PCA9685 PWM 控制器通過(guò) I2C 連接。

因此,請(qǐng)為自己準(zhǔn)備一堆伺服電機(jī),今天就開(kāi)始動(dòng)起來(lái)吧!

以上就是關(guān)于遙控pos機(jī),用Arduino控制伺服電機(jī)的知識(shí),后面我們會(huì)繼續(xù)為大家整理關(guān)于遙控pos機(jī)的知識(shí),希望能夠幫助到大家!

轉(zhuǎn)發(fā)請(qǐng)帶上網(wǎng)址:http://m.afbey.com/newsone/72396.html

你可能會(huì)喜歡:

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 babsan@163.com 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。