伺服電機的工作原理是脈沖寬度調制(PWM),其旋轉角度由施加到其控制引腳的脈沖持續時間控制。在本教程中,我們將使用 PWM 技術通過 ATtiny13 微控制器控制伺服電機。因此,在繼續之前,我們將首先了解PWM、伺服電機以及如何使用 Arduino Board 對 ATtiny13 進行編程。
脈寬調制 (PWM)
脈沖寬度調制(PWM) 被定義為一種使用數字源生成模擬信號的方法。PWM 信號由兩個主要部分組成——占空比和頻率。這些組件定義了它的行為。占空比描述了信號處于高電平狀態的時間量。它表示為完成一個周期所需的總時間的百分比。
占空比=開啟時間/(開啟時間+關閉時間)
頻率定義了 PWM 完成一個周期的速度以及信號在高低狀態之間切換的速度。100Hz 的頻率意味著每秒 100 個周期。通過以一定的占空比快速切換數字信號的開和關,輸出將看起來像一個恒定電壓的模擬信號。PWM 的強大優勢之一是功率損耗非常小。
PWM 信號用于各種控制應用。PWM 信號的主要目的是控制提供給各種電氣設備的電力,尤其是提供給交流/直流電機等慣性負載的電力。它還可用于控制泵、閥門、液壓系統和其他機械部件。PWM 信號的頻率取決于被供電設備的應用和響應時間。
使用 PWM 信號控制伺服電機
伺服電機由三根線組成,其中兩根用于電源(正極和負極),一根控制線用于從微控制器發送的信號。伺服電機基本上由一個由電位器和一些齒輪控制的直流電機組成。直流電機的高速力通過齒輪轉換為扭矩。在直流電機中,力較小且速度較高,而在伺服電機中,力較大且速度較慢。電位器連接到伺服電機的輸出軸以計算角度并將直流電機停止在所需的角度。要了解有關伺服的更多信息,請參閱有關伺服電機的詳細文章。
伺服電機由脈沖寬度調制 (PWM) 控制或通過控制線發送可變寬度的電脈沖。會有重復率、最小脈沖和最大脈沖。伺服電機可以從中性位置向任一方向轉動 90度,總共移動 180度。電機的中性位置是伺服在順時針和逆時針方向具有相同的潛在旋轉量的位置。發送到電機的 PWM 信號決定了軸的位置。轉子將根據通過控制線發送的脈沖持續時間轉到所需位置。伺服電機每 20 毫秒 (ms) 需要一個脈沖,脈沖的長度決定了電機轉動的距離。
伺服電機可以從 0 度旋轉到 180 度。當一個 1.5ms 的脈沖被提供給控制線時,電機將轉到 90 o位置。當給定一個小于 1.5ms 的脈沖時,電機將沿逆時針方向向 0 o位置移動。如果給出一個超過 1.5ms 的脈沖,那么電機將順時針方向轉向 180 o位置。
所有伺服電機都直接使用 +5V 電源工作,但我們必須注意電機消耗的電流量。如果我們使用兩個以上的伺服電機,則應設計適當的伺服屏蔽。
使用 Arduino 編程 ATtiny13
Attiny13 可以使用 Arduino Uno 或任何其他 Arduino 板進行編程。如下圖所示將 Attiny13 連接到 Arduino Uno。
Arduino 5V – ATtiny13 引腳 8
Arduino GND – ATtiny13 引腳 4
Arduino 引腳 13 – ATtiny13 引腳 7
Arduino 引腳 12 – ATtiny13 引腳 6
Arduino 引腳 11 – ATtiny13 引腳 5
Arduino 引腳 10 – ATtiny13 引腳 1
Arduino 被設置為程序員來編程 ATtiny13。這是通過將 ArduinoISP 草圖上傳到 Arduino 來完成的。此 Arduino 草圖可在 Arduino IDE 的示例中找到。打開 Arduino IDE 并轉到文件 》 示例 》 ArduinoISP。
現在將彈出 ArduinoISP 的程序。將程序上傳到 Arduino Uno。
Arduino Uno 現在已準備好對 Attiny13 進行編程。但是我們必須通過安裝其核心文件來設置 Attiny。為此,請轉到Arduino IDE中的文件》》首選項
然后會彈出一個新窗口。并在“ Additional Board Manager URL‘s ”中添加以下鏈接,然后單擊“OK”。
“ https://raw.githubusercontent.com/sleemanj/optiboot/master/dists/package_gogo_diy_attiny_index.json ”
現在在您的 Arduino IDE 中轉到Tools》》Board》》Boards Manager
然后會彈出另一個窗口,在搜索框中輸入“Attiny”然后你會得到“DIY ATtiny”然后點擊“安裝”按鈕(我已經安裝了它,這就是為什么安裝按鈕是灰色的)
要開始對 ATtiny 13 進行編程,我們必須將 Bootloader 燒錄到它。為此,請轉到工具 》 板 》 ATtiny13。
現在轉到工具 》 處理器版本并檢查是否選擇了正確的 ATtiny 版本。根據您的芯片選擇 ATtiny13 或 ATtiny13a。
然后單擊工具菜單底部的刻錄引導加載程序按鈕。
燒錄引導加載程序后,現在可以對 ATtiny 進行編程了。現在你可以上傳你的程序了。
所需組件
ATtiny13 微控制器
伺服電機
電位器
+5V 電池
Arduino IDE
連接線
電路圖和工作
下面給出了使用帶有 ATtiny13 的電位器控制伺服電機的電路圖。
下面是連接
將伺服電機控制引腳連接到 ATtiny13 的引腳 5
將伺服電機的接地連接到 ATtiny13 的引腳 4
將伺服電機的 VCC 連接到 ATtiny13 的引腳 8
將電位器的中間引腳連接到 ATtiny13 的引腳 7
將電位器的第一個和第三個引腳連接到 VCC 和 GND。
將 +5V 電池正極連接到 ATtiny13 的引腳 8
將 +5V 電池的負極連接到 ATtiny13 的引腳 4
電位器連接到 ATtiny13 的引腳 7 (PB2),伺服電機的控制線連接到引腳 5 (PB0)。
此處讀取電位計值并將其轉換為 0 到 180 之間的值。然后將該角度值轉換為微秒,并以計算出的微秒延遲將脈沖提供給伺服電機的控制引腳。
#define F_CPU 9600000
int 伺服 = PB0; //連接舵機到PB0
長角;
整數脈寬調制;
#include
void adc_setup (void)
{
// 將 ADC 輸入設置為 PB2/ADC1
ADMUX |= (1 << MUX0);
ADMUX |= (1 << ADLAR);
// 將預分頻器設置為時鐘/128 并啟用 ADC
// 在 9.6 MHz 時為 75 kHz。
ADCSRA |= (1 << ADPS1) | (1 << ADPS0) | (1 << 阿登);
}
int adc_read (void)
{
// 開始轉換
ADCSRA |= (1 << ADSC);
// 等待它完成
while (ADCSRA & (1 << ADSC));
返回 ADCH;
pinMode(伺服,輸出);// 將伺服設置為輸出引腳
}
void loop ()
{
long a;
adc_setup();
a = adc_read(); // 讀取電位器值
angle = (a * 3) / 2; // 將讀數轉換為 0 到 180 之間的角度
。servoPulse(servo, angle); // 調用servoPulse 函數。
}
void serverPulse (int 伺服,int 角度)
{
pwm = (angle * 11) + 500; // 將角度轉換為微秒
digitalWrite(servo, HIGH);
延遲微秒(pwm);
數字寫入(伺服,低);
延遲(50);// 伺服刷新周期
}
?
評論