概述
使用Arduino Servo庫(kù)驅(qū)動(dòng)伺服電機(jī)非常簡(jiǎn)單,但是每個(gè)驅(qū)動(dòng)器消耗一個(gè)寶貴的引腳-更不用說(shuō)一些Arduino處理能力了。 Adafruit 16通道12位PWM/伺服驅(qū)動(dòng)器僅需2個(gè)引腳即可在I2C上驅(qū)動(dòng)多達(dá)16個(gè)伺服器。板載PWM控制器將同時(shí)驅(qū)動(dòng)所有16個(gè)通道,而無(wú)需額外的Arduino處理開(kāi)銷。此外,您最多可以鏈接多達(dá)62個(gè),其中的多達(dá)62個(gè)可以使用相同的2個(gè)引腳進(jìn)行控制。
Adafruit PWM/Servo驅(qū)動(dòng)程序是需要大量伺服的任何項(xiàng)目的完美解決方案。
插腳
在兩側(cè)有兩組控制輸入引腳。 銷釘?shù)膬蓚?cè)相同!使用任意一側(cè),也可以通過(guò)將兩個(gè)并排連接起來(lái)輕松地進(jìn)行鏈接
電源引腳
GND -這是電源和信號(hào)接地引腳,必須連接
VCC -這是邏輯電源引腳,請(qǐng)將其連接到要使用的邏輯電平對(duì)于PCA9685輸出,最大應(yīng)為3-5V!它也用于SCL/SDA上的10K上拉,因此,除非您有自己的上拉,否則它也要與微控制器的邏輯電平相匹配!
V + -這是一個(gè)可選的電源引腳,它將為伺服器提供分布式電源。如果您不使用伺服系統(tǒng),則可以斷開(kāi)連接。芯片完全不使用它。您也可以從板頂部的2針端子排注入電源。如果使用伺服器,則應(yīng)提供5-6VDC。如果必須的話,可以升高到12VDC,但是如果搞砸了,將VCC連接到V +,則可能會(huì)損壞電路板!
控制引腳
SCL -I2C時(shí)鐘引腳,連接到您的微控制器I2C時(shí)鐘線。可以使用3V或5V邏輯,并且對(duì) VCC
SDA -I2C數(shù)據(jù)引腳具有弱上拉,連接到您的微控制器I2C數(shù)據(jù)線。可以使用3V或5V邏輯,并且對(duì) VCC
OE 具有弱上拉-輸出使能。可用于快速禁用所有輸出。當(dāng)此引腳為低時(shí),所有引腳均啟用 。當(dāng)引腳為高時(shí),輸出禁用。默認(rèn)情況下拉低,因此它是可選的引腳!
輸出端口
有16個(gè)輸出端口。每個(gè)端口都有3個(gè)引腳:V +,GND和PWM輸出。每個(gè)PWM都完全獨(dú)立地運(yùn)行,但它們必須具有相同的PWM頻率。也就是說(shuō),對(duì)于LED,您可能需要1.0 KHz,但伺服器需要60 Hz-因此,您不能將一半用于1.0 KHz的LED和一半用于60 Hz的LED。
它們已設(shè)置為用于伺服器,但您可以使用它們用于LED!每個(gè)引腳的最大電流為25mA。
所有PWM引腳均串聯(lián)有220歐姆電阻,并且輸出邏輯與 VCC 相同,因此在使用LED時(shí)要記住這一點(diǎn)。
程序集
《表類=“ build-table”》
安裝伺服接頭連接器,將4個(gè)3x4針插頭連接器安裝在板邊緣上標(biāo)記的位置。
焊接所有圖釘它們很多!
添加控制標(biāo)頭其中包含一個(gè)男性標(biāo)頭。您想在何處安裝標(biāo)頭以及從哪方面看都取決于使用情況:
對(duì)于 面包板 使用,將接頭連接器安裝在電路板的底部。
要與 跳線 配合使用,將接頭連接器安裝在
要與我們的 6-pin電纜 配合使用,將插頭安裝在頂部
如果要鏈接多個(gè)驅(qū)動(dòng)器板,則需要在兩端都安裝接頭。
安裝電源端子如果要鏈接多個(gè)驅(qū)動(dòng)器板,則只需要在電源端子上第一個(gè)。
連接
Arduino PWM/伺服驅(qū)動(dòng)器使用I2C,因此只需4條線即可連接到Arduino:
“經(jīng)典” Arduino接線:
+ 5v-》 VCC(這僅是用于突圍的電源,不是伺服電源!)
GND-》 GND
模擬4-》 SDA
模擬5-》 SCL
大型Mega接線:
+ 5v-》 VCC(這僅是用于BREAKOUT的電源,而不是伺服電源!)
GND-》 GND
數(shù)字20-》 SDA
Digital 21-》 SCL
R3和更高版本的Arduino接線(Uno,Mega和Leonardo):
(這些開(kāi)發(fā)板上的專用SDA和SCL引腳
+ 5v-》 VCC(這是僅用于BREAKOUT的電源,不是伺服電源!)
GND-》 GND
SDA-》 SDA
SCL-》 SCL
VCC引腳只是芯片本身的電源。如果要連接使用V +引腳的伺服或LED,則也必須連接V +引腳。即使VCC為3.3V(芯片為5V安全),V +引腳也可以高達(dá)6V。我們建議通過(guò)藍(lán)色接線端子連接電源,因?yàn)樗艿綐O性保護(hù)。
Servos的電源
大多數(shù)伺服器設(shè)計(jì)為在5v或6v左右的電壓下運(yùn)行。請(qǐng)記住,許多同時(shí)運(yùn)動(dòng)的伺服器(尤其是大功率的伺服器)將需要大量電流。甚至微型伺服器在移動(dòng)時(shí)也會(huì)消耗幾百毫安。某些高轉(zhuǎn)矩伺服器在負(fù)載下每個(gè)都會(huì)消耗超過(guò)1A的電流。
好的電源選擇是:
5v 2A開(kāi)關(guān)電源
5v 10A開(kāi)關(guān)電源
4xAA電池座-6v,帶有堿性電池。帶有NiMH可充電電池的4.8v。
來(lái)自業(yè)余商店的4.8或6v可充電RC電池組。
使用Arduino 5v引腳為伺服器供電不是一個(gè)好主意。多余電流消耗會(huì)產(chǎn)生電氣噪聲和“掉電”現(xiàn)象,從而導(dǎo)致您的Arduino行為異常,復(fù)位和/或過(guò)熱。
在通孔電容器插槽中添加電容器我們?cè)?a target="_blank">PCB上有一個(gè)用于焊接電解電容器的點(diǎn)。根據(jù)您的使用情況,您可能需要電容器,也可能不需要電容器。如果您使用大量的電源驅(qū)動(dòng)伺服器,而伺服器在移動(dòng)時(shí)會(huì)下降很多,那么 n * 100uF 其中 n 是伺服器的數(shù)量是一個(gè)不錯(cuò)的選擇開(kāi)始-例如 470uF 或更高(用于5個(gè)伺服器)。由于它非常依賴于伺服電流消耗,每個(gè)電動(dòng)機(jī)上的轉(zhuǎn)矩以及所用的電源,因此沒(méi)有“一個(gè)神奇的電容器值”,我們可以建議這就是為什么我們?cè)谔准胁话娙萜鞯脑颉?/p>
連接伺服器大多數(shù)伺服器帶有標(biāo)準(zhǔn)的3針凹型連接器,可直接插入伺服驅(qū)動(dòng)器的插頭中。請(qǐng)確保插頭與底部排的接地線(通常為黑色或棕色)和信號(hào)線(通常為黃色或白色)在頂部對(duì)齊。
添加更多伺服系統(tǒng)一個(gè)板上最多可以連接16個(gè)伺服器。如果您需要控制16個(gè)以上的伺服器,則可以按下一頁(yè)所述鏈接其他板。
連鎖驅(qū)動(dòng)程序
可以鏈接多個(gè)驅(qū)動(dòng)程序(最多62個(gè))以控制更多伺服器。在板的兩端都有插頭,接線非常簡(jiǎn)單,就像將一根6針并行電纜從一塊板連接到另一塊板一樣。
尋址木板必須為鏈中的每個(gè)木板分配一個(gè)唯一的地址。這是通過(guò)板右上邊緣的地址跳線完成的。每塊板的I2C基址為0x40。使用地址跳線編程的二進(jìn)制地址已添加到基本I2C地址中。
要編程地址偏移量,請(qǐng)使用一滴焊料橋接地址中每個(gè)二進(jìn)制“ 1”的對(duì)應(yīng)地址跳線。
委員會(huì)0:地址= 0x40偏移量=二進(jìn)制00000(無(wú)需跳線)
板1:地址= 0x41偏移量=二進(jìn)制00001(如上圖所示為橋A0)
板2:地址= 0x42偏移量=二進(jìn)制00010(橋A1)
Board 3:地址= 0x43偏移=二進(jìn)制00011(橋A0和A1)
Board 4:地址= 0x44偏移=二進(jìn)制00100(橋A2)
等。
在您的草圖中,您需要為每個(gè)板聲明一個(gè)單獨(dú)的pobject。在每個(gè)對(duì)象上調(diào)用begin,并通過(guò)其附加的對(duì)象控制每個(gè)舵機(jī)。例如:
下載:文件
復(fù)制代碼
#include
#include
Adafruit_PWMServoDriver pwm1 = Adafruit_PWMServoDriver(0x40);
Adafruit_PWMServoDriver pwm2 = Adafruit_PWMServoDriver(0x41);
void setup() {
Serial.begin(9600);
Serial.println(“16 channel PWM test!”);
pwm1.begin();
pwm1.setPWMFreq(1600); // This is the maximum PWM frequency
pwm2.begin();
pwm2.setPWMFreq(1600); // This is the maximum PWM frequency
}
#include
#include
Adafruit_PWMServoDriver pwm1 = Adafruit_PWMServoDriver(0x40);
Adafruit_PWMServoDriver pwm2 = Adafruit_PWMServoDriver(0x41);
void setup() {
Serial.begin(9600);
Serial.println(“16 channel PWM test!”);
pwm1.begin();
pwm1.setPWMFreq(1600); // This is the maximum PWM frequency
pwm2.begin();
pwm2.setPWMFreq(1600); // This is the maximum PWM frequency
}
使用Adafruit庫(kù)
由于PWM伺服驅(qū)動(dòng)器是通過(guò)I2C控制的,因此它非常易于在任何微控制器或微計(jì)算機(jī)上使用。在本演示中,我們將展示如何將其與Arduino IDE一起使用,但是C ++代碼可以輕松移植
安裝Adafruit PCA9685庫(kù)
要開(kāi)始讀取傳感器數(shù)據(jù),您將需要安裝Adafruit_PWMServo庫(kù)(我們的github存儲(chǔ)庫(kù)中的代碼)。可以從Arduino庫(kù)管理器中獲得它,因此我們建議使用它。
從IDE中打開(kāi)庫(kù)管理器。..
,然后輸入 adafruit pwm 來(lái)查找?guī)臁|c(diǎn)擊安裝
我們還提供了有關(guān)Arduino庫(kù)安裝的出色教程,網(wǎng)址為:
http://learn.adafruit.com/adafruit-all-about-arduino-libraries-install-use
使用示例代碼進(jìn)行測(cè)試:
首先確保關(guān)閉了Arduino IDE的所有副本。
接下來(lái)打開(kāi)Arduino IDE,然后選擇文件-》示例-》 Adafruit_PWMServoDriver-》 Servo 。這將在IDE窗口中打開(kāi)示例文件。
如果使用Breakout:
按上一頁(yè)所示連接驅(qū)動(dòng)器板和伺服器。不要忘記為 Vin (3-5V邏輯電平)和 V + (5V伺服電源)提供電源。 檢查綠色LED點(diǎn)亮!
如果使用屏蔽:
將屏蔽插入Arduino。別忘了,您還必須為V +接線盒提供5V。 紅色和綠色的LED都必須點(diǎn)亮。
如果使用FeatherWing,請(qǐng)執(zhí)行以下操作:
將FeatherWing插入羽毛中。別忘了,您還必須向V +接線端子提供5V。檢查綠色LED點(diǎn)亮!
連接伺服器
單個(gè)伺服器應(yīng)插入 PWM#0 端口(第一個(gè)端口)。您應(yīng)該會(huì)在大約180度的范圍內(nèi)看到伺服器來(lái)回掃描。
校準(zhǔn)Servos
Servo Pulsetiming在不同品牌和型號(hào)之間有所不同。由于它是模擬控制電路,因此同一品牌和型號(hào)的樣本之間通常會(huì)有一些差異。為了進(jìn)行精確的位置控制,您需要在代碼中校準(zhǔn)最小和最大脈沖寬度,以匹配伺服器的已知位置。
查找最小值:
使用示例代碼,編輯SERVOMIN,直到掃描的低點(diǎn)到達(dá)最小行程范圍。最好逐步解決此問(wèn)題,并在達(dá)到行程的物理限制之前停止。
找到最大值:
再次使用示例代碼,編輯SERVOMAX直到掃描的最高點(diǎn)達(dá)到最大旅行范圍。同樣,最好逐漸解決此問(wèn)題,并在達(dá)到行程的物理限制之前停止。
調(diào)整SERVOMIN和SERVOMAX時(shí)要小心。達(dá)到行進(jìn)的物理極限會(huì)剝奪齒輪并永久損壞您的伺服器。
從度數(shù)轉(zhuǎn)換為脈沖長(zhǎng)度 Arduino的“ map()”功能是在旋轉(zhuǎn)度與校準(zhǔn)的SERVOMIN和SERVOMAXpulse長(zhǎng)度之間進(jìn)行轉(zhuǎn)換的簡(jiǎn)便方法。假設(shè)一個(gè)典型的伺服器可以旋轉(zhuǎn)180度;將SERVOMIN校準(zhǔn)到0度位置并將SERVOMAX校準(zhǔn)到180度位置后,您可以使用以下代碼行將0到180度之間的任意角度轉(zhuǎn)換為相應(yīng)的脈沖長(zhǎng)度:
下載:文件
復(fù)制代碼
pulselength = map(degrees, 0, 180, SERVOMIN, SERVOMAX); pulselength = map(degrees, 0, 180, SERVOMIN, SERVOMAX);
庫(kù)參考
setPWMFreq(freq)
說(shuō)明
此功能可用于調(diào)整PWM頻率,該頻率確定IC每秒產(chǎn)生多少個(gè)完整“脈沖”。換句話說(shuō),頻率決定了每個(gè)脈沖從開(kāi)始到結(jié)束的持續(xù)時(shí)間有多長(zhǎng),同時(shí)考慮了脈沖的高低段。
頻率在PWM中很重要,因?yàn)閷㈩l率設(shè)置得太高,很小的占空比可能會(huì)引起問(wèn)題,因?yàn)樾盘?hào)的“上升時(shí)間”(從0V變?yōu)閂CC所需的時(shí)間)可能比信號(hào)有效的時(shí)間更長(zhǎng),并且PWM輸出將變得平滑并可能甚至沒(méi)有達(dá)到VCC,可能會(huì)導(dǎo)致許多問(wèn)題。
參數(shù)
頻率:一個(gè)數(shù)字,表示以Hz為單位的頻率,介于40和1600
示例
以下代碼將PWM頻率設(shè)置為1000Hz:
下載:文件
復(fù)制代碼
pwm.setPWMFreq(1000) pwm.setPWMFreq(1000)
setPWM(通道,打開(kāi),關(guān)閉) 說(shuō)明
此功能on設(shè)置特定通道上PWM脈沖的高電平段的開(kāi)始(開(kāi))和結(jié)束(關(guān))。您可以在信號(hào)開(kāi)啟和關(guān)閉之間的0..4095之間指定“刻度”值。通道指示應(yīng)使用新值更新16個(gè)PWM輸出中的哪個(gè)。
參數(shù)
通道:應(yīng)使用以下值更新的通道新值(0..15)
on :當(dāng)信號(hào)應(yīng)從低電平過(guò)渡到高電平時(shí)的滴答聲(介于0..4095之間)
關(guān)閉:信號(hào)從高電平轉(zhuǎn)換為低電平時(shí)的滴答聲(介于0..4095之間)
示例
下面的示例將使通道15開(kāi)始變低,在脈沖中變高25%左右(在4096中打勾1024),在脈沖中變低至75%變低(壁虱3072),并在脈沖的最后25%保持低電平:/p》
下載:文件
復(fù)制代碼
pwm.setPWM(15, 1024, 3072) pwm.setPWM(15, 1024, 3072)
使用GPIO
還有一些用于完全打開(kāi)或完全關(guān)閉插針的特殊設(shè)置
您可以將插針設(shè)置為完全打開(kāi)或關(guān)閉n與
pwm.setPWM(pin, 4096, 0);
一起使用
pwm.setPWM(pin, 0, 4096);
可以將引腳設(shè)置為完全斷開(kāi)》
Python和CircuitPython
將PCA9685傳感器與Python或CircuitPython以及Adafruit CircuitPython PCA9685模塊一起使用很容易。此模塊可讓您輕松編寫(xiě)可通過(guò)此突破口控制伺服器和PWM的Python代碼。
借助CircuitPython的Adafruit_Blinka,您可以將此傳感器與任何CircuitPython微控制器板或具有GPIO和Python的計(jì)算機(jī)一起使用-for-Python兼容性庫(kù)。
CircuitPython微控制器接線
首先,將PCA9685與Arduino的前幾頁(yè)完全一樣地連接到板上。以下是使用I2C將Feather M0連接到傳感器的示例:
板3V 至傳感器VCC
板GND 到傳感器GND
板SCL 到傳感器SCL
板SDA 到傳感器SDA
Python計(jì)算機(jī)接線
由于有數(shù)十種Linux計(jì)算機(jī)/主板,您可以使用我們將顯示Raspberry Pi的接線。對(duì)于其他平臺(tái),請(qǐng)?jiān)L問(wèn)Linux上的CircuitPython指南,以了解您的平臺(tái)是否受支持。
以下是與I2C相連的Raspberry Pi:
Pi 3V3 至傳感器VCC
Pi GND 到傳感器GND
Pi SCL 到傳感器SCL
Pi SDA 到傳感器SDA
請(qǐng)勿嘗試使用RasPi或Linux主板的5V電源為伺服器供電,您很容易導(dǎo)致電源斷電并弄亂您的Pi!使用單獨(dú)的5v 2A或4A適配器
5V 2A(2000mA)開(kāi)關(guān)電源-UL認(rèn)證的
產(chǎn)品ID:276
這是FCC/CE認(rèn)證和UL認(rèn)證的電源。需要大量5V電源嗎?該開(kāi)關(guān)電源可提供高達(dá)2000mA的干凈穩(wěn)壓5V輸出。 110或240輸入,因此可以在。..
$ 7.95
進(jìn)貨
添加到購(gòu)物車
5V 4A(4000mA)開(kāi)關(guān)電源-UL認(rèn)證
產(chǎn)品ID:1466
需要大量5V電源嗎?該開(kāi)關(guān)電源可提供高達(dá)4A(4000mA)的干凈穩(wěn)定的5V輸出。 110或240輸入,因此可在任何國(guó)家/地區(qū)使用。插頭為“ US 。..
$ 14.95
進(jìn)貨
添加到購(gòu)物車
CircuitPython安裝PCA9685和ServoKit庫(kù)
您需要在CircuitPython板上安裝Adafruit CircuitPython PCA9685庫(kù)。
首先請(qǐng)確保您正在為板運(yùn)行最新版本的Adafruit CircuitPython。
p》
接下來(lái),您需要安裝必要的庫(kù)以使用硬件-仔細(xì)按照以下步驟從Adafruit的CircuitPython庫(kù)捆綁包中查找和安裝這些庫(kù)。我們的CircuitPython入門(mén)指南上有一個(gè)很棒的頁(yè)面,介紹如何安裝庫(kù)捆綁包
對(duì)于諸如Trinket M0或Gemma M0之類的非表達(dá)板,您需要從捆綁包中手動(dòng)安裝必要的庫(kù):
adafruit_pca9685。 mpy
adafruit_bus_device
adafruit_register
adafruit_motor
adafruit_servokit
在繼續(xù)之前,請(qǐng)確保您董事會(huì)的lib文件夾或根文件系統(tǒng)具有 adafruit_pca9685.mpy,adafruit_register,adafruit_servokit,adafruit_motor 和 adafruit_bus_device 文件和文件夾 已復(fù)制。
下一步連接到開(kāi)發(fā)板的串行REPL,這樣您就可以在CircuitPython上出現(xiàn)》》》 提示。
PCA9685和ServoKit庫(kù)的Python安裝
您需要安裝Adafruit_Blinka庫(kù),該庫(kù)在Python中提供了CircuitPython支持。這可能還需要在您的平臺(tái)上啟用I2C并驗(yàn)證您正在運(yùn)行Python3。由于每個(gè)平臺(tái)都略有不同,并且Linux經(jīng)常更改,請(qǐng)?jiān)L問(wèn)Linux上的CircuitPython指南以準(zhǔn)備好您的計(jì)算機(jī)!
完成后,從您的命令行運(yùn)行以下命令:
sudo pip3 install adafruit-circuitpython-pca9685
sudo pip3 install adafruit-circuitpython-servokit
如果您的默認(rèn)Python是版本3,則可能需要運(yùn)行‘pip’。只要確保您不嘗試在Python 2.x上使用CircuitPython,就不支持它!
CircuitPython和Python用法
以下部分將展示如何從開(kāi)發(fā)板的Python提示符/REPL中控制PCA9685。您將通過(guò)輸入以下代碼來(lái)學(xué)習(xí)如何交互式控制伺服器和調(diào)暗LED。
調(diào)光LED
運(yùn)行以下代碼以導(dǎo)入必要的模塊并初始化與傳感器的I2C連接:
下載:文件
復(fù)制代碼
import board
import busio
import adafruit_pca9685
i2c = busio.I2C(board.SCL, board.SDA)
pca = adafruit_pca9685.PCA9685(i2c) import board
import busio
import adafruit_pca9685
i2c = busio.I2C(board.SCL, board.SDA)
pca = adafruit_pca9685.PCA9685(i2c)
每個(gè)頻道PCA9685可用于控制LED的亮度。 PCA9685生成高速PWM信號(hào),該信號(hào)可以非常快速地打開(kāi)和關(guān)閉LED。如果LED的開(kāi)啟時(shí)間比關(guān)閉的時(shí)間長(zhǎng),則您的眼睛會(huì)顯得更亮。
首先按照以下步驟將LED連線到板上。請(qǐng)注意,您不需要使用電阻來(lái)限制流經(jīng)LED的電流,因?yàn)镻CA9685會(huì)將電流限制在10mA左右:
LED陰極/短支腳到 PCA9685通道GND/接地。
LED陽(yáng)極/更長(zhǎng)的腳到 PCA9685通道PWM 。
PCA9685類可控制PWM頻率和每個(gè)通道的占空比。請(qǐng)查閱PCA9685類文檔的形式詳細(xì)信息。
對(duì)于調(diào)光LED,通常不需要使用快速的PWM信號(hào)頻率,并且可以通過(guò)設(shè)置頻率來(lái)將板的PWM頻率設(shè)置為60hz。屬性:
下載:文件
復(fù)制代碼
pca.frequency = 60 pca.frequency = 60
PCA9685支持16個(gè)獨(dú)立的通道,這些通道共享一個(gè)頻率,但可以具有獨(dú)立的占空比。這樣,您可以分別使16個(gè)LED變暗!
PCA9685對(duì)象具有 channels 屬性,該屬性為每個(gè)可以控制占空比的通道提供一個(gè)對(duì)象。要獲取單個(gè)頻道,請(qǐng)使用[]索引到頻道。
下載:文件
復(fù)制代碼
led_channel = pca.channels[0] led_channel = pca.channels[0]
現(xiàn)在通過(guò)控制LED的占空比來(lái)控制LED亮度。通道連接到LED。占空比值應(yīng)為16位值,即0到0xffff,它表示信號(hào)打開(kāi)與關(guān)閉的時(shí)間百分比。值0xffff是100%亮度,0是0%亮度,中間值是從0%到100%亮度。
例如,以0xffff的占空比完全打開(kāi)LED:
下載:文件
復(fù)制代碼
led_channel.duty_cycle = 0xffff led_channel.duty_cycle = 0xffff
運(yùn)行上面的命令后,您應(yīng)該會(huì)看到LED以全亮度點(diǎn)亮!
現(xiàn)在,以的占空比關(guān)閉LED。 0:
下載:文件
復(fù)制代碼
led_channel.duty_cycle = 0 led_channel.duty_cycle = 0
嘗試介于1000之間的值:
下載:文件
復(fù)制代碼
led_channel.duty_cycle = 1000 led_channel.duty_cycle = 1000
您應(yīng)該看到LED昏暗。嘗試嘗試其他占空比值以查看LED如何改變亮度!
例如,通過(guò)在循環(huán)中設(shè)置 duty_cycle ,使LED發(fā)光和熄滅:
下載:文件
復(fù)制代碼
# Increase brightness:
for i in range(0xffff):
led_channel.duty_cycle = i
# Decrease brightness:
for i in range(0xffff, 0, -1):
led_channel.duty_cycle = i # Increase brightness:
for i in range(0xffff):
led_channel.duty_cycle = i
# Decrease brightness:
for i in range(0xffff, 0, -1):
led_channel.duty_cycle = i
這些for循環(huán)需要一段時(shí)間,因?yàn)?6位是很多數(shù)字。 CTRL-C 可停止循環(huán)運(yùn)行并返回到REPL。
完整示例代碼
下載:Project Zip 或pca9685_simpletest.py | 在Github上查看
復(fù)制代碼
# This simple test outputs a 50% duty cycle PWM single on the 0th channel. Connect an LED and
# resistor in series to the pin to visualize duty cycle changes and its impact on brightness.
from board import SCL, SDA
import busio
# Import the PCA9685 module.
from adafruit_pca9685 import PCA9685
# Create the I2C bus interface.
i2c_bus = busio.I2C(SCL, SDA)
# Create a simple PCA9685 class instance.
pca = PCA9685(i2c_bus)
# Set the PWM frequency to 60hz.
pca.frequency = 60
# Set the PWM duty cycle for channel zero to 50%. duty_cycle is 16 bits to match other PWM objects
# but the PCA9685 will only actually give 12 bits of resolution.
pca.channels[0].duty_cycle = 0x7fff
# This simple test outputs a 50% duty cycle PWM single on the 0th channel. Connect an LED and
# resistor in series to the pin to visualize duty cycle changes and its impact on brightness.
from board import SCL, SDA
import busio
# Import the PCA9685 module.
from adafruit_pca9685 import PCA9685
# Create the I2C bus interface.
i2c_bus = busio.I2C(SCL, SDA)
# Create a simple PCA9685 class instance.
pca = PCA9685(i2c_bus)
# Set the PWM frequency to 60hz.
pca.frequency = 60
# Set the PWM duty cycle for channel zero to 50%. duty_cycle is 16 bits to match other PWM objects
# but the PCA9685 will only actually give 12 bits of resolution.
pca.channels[0].duty_cycle = 0x7fff
Contro 收費(fèi)Servos
我們?yōu)榉Q為Adafruit CircuitPython ServoKit的各種PWM/Servo套件編寫(xiě)了一個(gè)方便的CircuitPython庫(kù),該庫(kù)可為您處理所有復(fù)雜的設(shè)置。您需要做的就是從庫(kù)中導(dǎo)入適當(dāng)?shù)念悾缓罂梢允褂迷擃惖乃泄δ堋N覀儗⑾蚰故救绾螌?dǎo)入ServoKit類,并使用它來(lái)通過(guò)Adafruit 16通道分支控制伺服電動(dòng)機(jī)。
如果您對(duì)伺服器不熟悉,請(qǐng)確保首先閱讀此伺服器簡(jiǎn)介頁(yè)面和此深入的伺服器指南頁(yè)面。
首先將伺服器連接到PCA9685上的通道0。下面是連接到通道0的伺服器的示例:
伺服橙線到通道0上的突破PWM
伺服紅色導(dǎo)線到通道0上的分支V +
伺服棕色導(dǎo)線到通道0上的分支Gnd
檢查您的伺服數(shù)據(jù)表以驗(yàn)證其連接方式!
請(qǐng)確保您也已打開(kāi)或插入PCA9685板的外部5V電源!
首先,您需要導(dǎo)入并初始化ServoKit類。您必須指定板上可用的通道數(shù)。該分組討論有16個(gè)通道,因此在創(chuàng)建類對(duì)象時(shí),您將指定16。
下載:文件
復(fù)制代碼
from adafruit_servokit import ServoKit
kit = ServoKit(channels=16) from adafruit_servokit import ServoKit
kit = ServoKit(channels=16)
現(xiàn)在您可以同時(shí)控制標(biāo)準(zhǔn)和連續(xù)旋轉(zhuǎn)伺服器。
標(biāo)準(zhǔn)伺服系統(tǒng)
要控制標(biāo)準(zhǔn)伺服系統(tǒng),您需要指定與伺服系統(tǒng)連接的通道。然后可以通過(guò)將angle設(shè)置為度數(shù)來(lái)控制運(yùn)動(dòng)。
例如,將連接到通道0的伺服器移至180度:
下載:文件
復(fù)制代碼
pca.frequency = 50 pca.frequency = 50
現(xiàn)在,將PCA9685設(shè)置為用于伺服,就可以制作一個(gè)Servo對(duì)象,以便我們可以根據(jù)角度而不是 duty_cycle 。
默認(rèn)情況下,Servo類將使用適用于大多數(shù)伺服器的致動(dòng)范圍,最小脈沖寬度和最大脈沖寬度值。但是,請(qǐng)查閱Servo類文檔以獲取有關(guān)附加參數(shù)的更多詳細(xì)信息,以自定義為您的伺服器生成的信號(hào)。
下載:文件
復(fù)制代碼
import adafruit_motor.servo
servo = adafruit_motor.servo.Servo(servo_channel) import adafruit_motor.servo
servo = adafruit_motor.servo.Servo(servo_channel)
使用Servo,您可以將位置指定為角度。角度將始終在0和創(chuàng)建伺服時(shí)給定的驅(qū)動(dòng)范圍之間。默認(rèn)值為180度,但您的伺服器掃角可能較小-通過(guò)在上面的Servo類初始化程序中指定 actuation_angle 參數(shù)來(lái)更改總角度。
現(xiàn)在將角度設(shè)置為180,是范圍的一個(gè)極端:
下載:文件
復(fù)制代碼
kit.servo[0].angle = 180
kit.servo[0].angle = 180
要將伺服器恢復(fù)到0度:
下載:文件
復(fù)制代碼
kit.servo[0].angle = 0 kit.servo[0].angle = 0
對(duì)于標(biāo)準(zhǔn)伺服,將位置指定為角度。角度將始終在0和致動(dòng)范圍之間。默認(rèn)值為180度,但您的伺服器的掃描范圍可能較小。您可以通過(guò)設(shè)置actuation_range來(lái)更改總角度。
例如,將驅(qū)動(dòng)范圍設(shè)置為160度:
下載:文件
復(fù)制代碼
servokit.servo[0].actuation_range = 160 servokit.servo[0].actuation_range = 160
通常單個(gè)伺服器識(shí)別的范圍與其他伺服器有所不同。如果伺服器未掃描整個(gè)預(yù)期范圍,請(qǐng)嘗試使用set_pulse_width_range(min_pulse, max_pulse)調(diào)整最小和最大脈沖寬度。
要將脈沖寬度范圍設(shè)置為最小值1000和最大值2000:
下載:文件
復(fù)制代碼
kit.servo[0].set_pulse_width_range(1000, 2000) kit.servo[0].set_pulse_width_range(1000, 2000)
使用PCA9685分支,Python和ServoKit來(lái)控制標(biāo)準(zhǔn)伺服器就是全部!
連續(xù)旋轉(zhuǎn)伺服器
要控制連續(xù)旋轉(zhuǎn)伺服,您可以必須指定伺服打開(kāi)的通道。然后,您可以使用throttle來(lái)控制運(yùn)動(dòng)。
例如,要啟動(dòng)連接到通道1的連續(xù)旋轉(zhuǎn)伺服以使油門(mén)完全前進(jìn):
下載:文件
復(fù)制代碼
kit.continuous_servo[1].throttle = 1 kit.continuous_servo[1].throttle = 1
要啟動(dòng)連接到通道1的連續(xù)旋轉(zhuǎn)伺服以完全反向節(jié)流,請(qǐng)執(zhí)行以下操作:
下載:文件
復(fù)制代碼
kit.continuous_servo[1].throttle = -1 kit.continuous_servo[1].throttle = -1
要設(shè)置半節(jié)流閥,請(qǐng)使用十進(jìn)制:
下載:文件
復(fù)制代碼
kit.continuous_servo[1].throttle = 0.5 kit.continuous_servo[1].throttle = 0.5
然后,要停止連續(xù)旋轉(zhuǎn)伺服運(yùn)動(dòng),請(qǐng)將throttle設(shè)置為0:
下載:文件
復(fù)制代碼
kit.continuous_servo[1].throttle = 0 kit.continuous_servo[1].throttle = 0
使用PCA9685 16通道Breakout,Python和ServoKit來(lái)控制連續(xù)旋轉(zhuǎn)伺服器就是全部了!
完整示例代碼
下載:Project Zip 或 servokit_simpletest.py | i》在Github上查看
復(fù)制代碼
“”“Simple test for a standard servo on channel 0 and a continuous rotation servo on channel 1.”“”
import time
from adafruit_servokit import ServoKit
# Set channels to the number of servo channels on your kit.
# 8 for FeatherWing, 16 for Shield/HAT/Bonnet.
kit = ServoKit(channels=8)
kit.servo[0].angle = 180
kit.continuous_servo[1].throttle = 1
time.sleep(1)
kit.continuous_servo[1].throttle = -1
time.sleep(1)
kit.servo[0].angle = 0
kit.continuous_servo[1].throttle = 0
“”“Simple test for a standard servo on channel 0 and a continuous rotation servo on channel 1.”“”
import time
from adafruit_servokit import ServoKit
# Set channels to the number of servo channels on your kit.
# 8 for FeatherWing, 16 for Shield/HAT/Bonnet.
kit = ServoKit(channels=8)
kit.servo[0].angle = 180
kit.continuous_servo[1].throttle = 1
time.sleep(1)
kit.continuous_servo[1].throttle = -1
time.sleep(1)
kit.servo[0].angle = 0
kit.continuous_servo[1].throttle = 0
下載
文件
PCA9685數(shù)據(jù)表
Arduino驅(qū)動(dòng)程序庫(kù)
GitHub上的EagleCAD PCB文件
Adafruit Fritzing庫(kù)中的Fritzing對(duì)象
示意圖和構(gòu)造打印
孔的直徑為2.5mm
常見(jiàn)問(wèn)題解答
該板可以用于LED還是僅用于伺服器?
它可用于LED以及任何其他可使用PWM的設(shè)備!
當(dāng)將此屏蔽罩與Adafruit LED矩陣結(jié)合使用時(shí),我遇到了奇怪的問(wèn)題/7Seg背包
PCA9865芯片的“全部通話”地址為0x70 。這是已配置地址的補(bǔ)充。將背包的地址設(shè)置為0x71或默認(rèn)0x70以外的其他值,以消除問(wèn)題。
在使用LED的情況下,我為何無(wú)法打開(kāi)LED
如果要完全關(guān)閉LED,請(qǐng)使用 setPWM(針,4096,0); not setPWM(pin,4095,0);
責(zé)任編輯:wv
-
伺服電機(jī)
+關(guān)注
關(guān)注
87文章
2105瀏覽量
59215 -
Arduino
+關(guān)注
關(guān)注
189文章
6493瀏覽量
190191
發(fā)布評(píng)論請(qǐng)先 登錄
單片機(jī)和伺服有什么區(qū)別
TMC9660智能伺服電機(jī)驅(qū)動(dòng)控制芯片中文手冊(cè)
伺服驅(qū)動(dòng)器故障及維修處理 怎樣維護(hù)保養(yǎng)伺服電機(jī)驅(qū)動(dòng)器
伺服驅(qū)動(dòng)器與傳統(tǒng)電機(jī)的區(qū)別
伺服驅(qū)動(dòng)器與步進(jìn)電機(jī)的比較
如何調(diào)試伺服驅(qū)動(dòng)器
其利天下技術(shù)·伺服電機(jī)編碼器的作用及工作原理·低壓伺服電機(jī)驅(qū)動(dòng)方案開(kāi)發(fā)

評(píng)論