Arduino’nun Güç Tüketimi Azaltma

Taşınabilir elektronik cihazlar söz konusu olduğunda, en önemli özelliklerden biri de pil ömrünü en üst düzeye çıkarmaktır. RedBoard, Arduino Uno ve Pro Mini gibi popüler boarlarda kullanılan ATmega328P aslında oldukça güç tüketir. Pek öyle görülmesede RedBoard ve Arduino Uno, asgari 15mA civarında akım çeker. Bu yazıda da göreceğiniz gibi, yalnızca birkaç hüner ile güç tüketimini büyük oranda indirebiliriz. Bu yazıda, birkaç donanım ve yazılım hüneriyle besleme akımını 10uA’dan daha düşük seviyeye indirebilir miyiz göreceğiz.

Ek Donanımları Çıkartın

Her entegre devrenin (IC) çalışması için güç ihtiyacı vardır. Gerekli IC sayısını azaltarak, biraz güç tasarrufu yapabilirsiniz. Arduino Uno ve RedBoard’ın USB sinyallerini Arduino’nun Evrensel Asenkron Alıcı Verici (UART) tarafından kullanılabilen sinyallere dönüştüren bir USB köprüsü vardır. Sadece Arduino Uno veya RedBoard’uzu bir 5V Pro Mini ile değiştirerek, biraz fiziksel alandan tasarruf etmekle kalmaz, aynı zamanda 15mA’dan  4mA’a kadar besleme akımını da düşürebilirsiniz.

Linear Regulatörden (Doğrusal Düzenleyici) Kurtulun

Doğrusal regülatörler harikadırlar. Ucuzdurlar ve yüksek bir voltajı daha düşük bir voltaja sadece 3 pin  kullanarak (Vin, toprak ve Vout pinleri) ayarlayabilirler. Doğrusal bir düzenleyicinin dezavantajı şudur, giriş ve çıkış voltajı arasında büyük bir fark olduğunda veya çok fazla akım çekiyorsanız oldukça sıcak olabilirler. Boşalan enerjiyi basit bir denklemle ısı biçiminde hesaplayabilirsiniz:

P(harcanan) = (Vin – Vout) * I

Doğrusal regülatörlerde giriş akımı çıkış akımına eşittir. Doğrusal regülatörler en iyi ihtimalle sadece% 70 civarında verimlidir. Ne kadar çok akım çekerseniz verimlilik o kadar düşük olur.

Fazla ayrıntıya girmeden, switchmod güç kaynakları çok daha verimlidir, çünkü giriş akımı çıkış akımı ile aynı olması gerekmiyor. Hafif bir yükte switchmod regülatörlerini, % 90’ın üzerinde verimli olarak bulabilirsiniz. Bir anahtarlama regülatörü ile, yalnızca giriş voltajını (bir buck converter kullanarak) azaltmakla kalmaz, aynı zamanda gerilimi de arttırır (bir boost converter kullanarak). 

Gerilimi Düşürme

Akımı azaltmanın en kolay yollarından biri Arduino’ya verdiğiniz voltajı düşürmektir. Gerilimi 5V’dan 3.3V’a düşürerek, akım ~ 4mA’dan  ~ 1mA’ya düşer!

Yalnız uyarmak gerekr ki, voltajı düşürmenin bir handikapı vardır. Saat hızını düşürmeden yalnızca sistem voltajını azaltmak,  mikro denetleyiciyi garip davranışlara sokabilir. RedBoard, Uno ve 5V Pro Mini’de 16MHz kristal kullanılıyor. 328P için veri sayfasına baktığımızda 3.3V’de önerilen maksimum frekansın 13MHz civarında olduğunu görebiliyoruz. Saat hızı ve sistem gerilimi arasındaki ilişki, 3.3V Pro Mini’nin 16MHz yerine 8MHz saat kullanmasının nedenidir.

Aşağıda, voltajın düşürülmesiyle, Arduino’nun güç tüketimini nasıl önemli ölçüde azalttığını gösteren bir grafik oluşturulmuştur. Test için, 1MHz’de çalışan 328P’ye boş bir taslak yüklenmiştir.

ATmega328P_IV_egrisi

Saat Hızının Azaltılması

Arduino’nun kısa bir süre içerisinde çok sayıda talimat yürütmesine ihtiyaç duymayan projelerde veya  zamanlamanın bir sorun teşkil etmediği projelerde , mikro denetleyicinin saat hızının düşürülmesi, besleme akımını birkaç miliamper düşürebilir. Örneğin, Arduino’yu 5 V’da çalıştırmak ve saat hızını 16 MHz’den 8 MHz’e düşürmek, 12 mA’dan ~ 8.5mA’a düşen akım düşürebilir.

Saat hızının mikrodenetleyici ile olan ilişkisini daha iyi anlamak için aşağıdaki grafiğe bakalım.

ATmega328P_Clock_Speed-large

Gördüğünüz gibi, saat hızını azaltmak pil ömrünü üç katına çıkarabilir. Elbette ki bilmeniz gereken, saniyede bir çok talimat yürütemeyeceğiniz ve bazı uygulamalar için bu çözümün bir seçenek olmadığıdır.

Yazılımla Güç Tasarrufu Sağlamak

Şimdiye kadar Arduino’nun gücünü nasıl azaltacağımız hakkında konuştuk, fakat neden onun bu gücü kullandığından bahsetmedik. ATmega328P’nin içinde, işi işlemciden boşaltmak için birlikte çalışan bir dizi devre bulunur ve bunların her biri biraz güç tüketir. Örneğin Arduino’nun analogWrite () işlevi, işlemcinin saat çevrimlerini sayarak bir PWM sinyali oluşturmasına izin vermez. Bunun yerine Arduino, saat döngülerini saymak ve işlemciye bir kesme isteği göndermek için dahili zamanlayıcılardan birini kullanır. Burada, işlemci yapacaklarını durdurur ve pinin durumunu değiştirerek kesmeyi işler. İşin bir kısmını boşaltarak, mikrodenetleyici aynı anda birden fazla şey yapabilir. ATmega328P’de yerleşik diğer devrelerden bazıları şunları içerir:

3 adet zamanlayıcı
Watchdog zamanlayıcı
Brown-out algılama (mikrodenetleyicilerin çalışma anında besleme voltajındaki değişimleri kontrol etmesi)
Analogdan dijital çevrim

Bu bağımsız bileşenlerin her birinin çalışması için güce ihtiyacı vardır ve elle devre dışı bırakmadığınız sürece güç çekmeye devam edeceklerdir. Brown-out (Kör seleksiyon) algılaması, eşiğin altına düşmediğinden emin olmak için sistem voltajını aktif olarak izler. Eğer voltaj eşik değerinin altına düşerse, voltaj bu eşik değerin üzerine çıkıncaya kadar kontrol cihazı gücü kapatır ve boardımız güç beslemesiz kalır. Analogdan sayısal dönüştürücüye (ADC), adından da anlaşılacağı gibi, analog voltajı (0V’dan VCC’ye kadar herhangi bir değer olabilir) alır ve mikrodenetleyicinin kullanabileceği dijital bir değere dönüştürür (10-bit dönüştürücü için 0-1023 aralığında). Projenizin ADC’yi kullanması gerekmiyorsa, devre dışı bırakmak güç çekişini önemli ölçüde azaltacaktır.

Peki yine de ADC’ye ihtiyacınız varsa? Neyse ki yazılımlarla bu devrelerin bazılarını devre dışı bırakabileceğiniz registerler var. Yazılımı kullanarak ihtiyaç duyduğunuz devreleri etkinleştirebilirsiniz ve işiniz bittiğinde tekrar devre dışı bırakabilirsiniz. Tüm registerler, ATmega328p’nin datasheet sayfasında iyi bir şekilde gösterilmiştir, ancak doğrudan kayıtlara yazma sizi rahatsız ediyor ise, aşağıdaki bağlantıdan indirebileceğiniz bir kütüphane ile bunları yapabilirsiniz.

kütüphane ismi =  LowPower.h

https://github.com/rocketscream/Low-Power/archive/master.zip

Bu kitaplık, birkaç milisaniyeden sonsuza kadar uyku moduna ne kadar süre gireceğinizi ayarlamanıza izin verir. Aynı zamanda, mikroişlemcinin hangi bölümlerinin devre dışı bırakılacağını belirlemenize, dolayısıyla düşük güç gereksinimleriniz için oldukça güçlü ve çok yönlü bir kütüphane yapmanıza izin verir.

Aşağıdaki örnekte, 16 Mhz’de 5V’de çalışan Arduino’ya aşağıdaki programı yükleyelim. Uyku modunda ne kadar az akıma ihtiyaç duyulduğunu görmek ve kullandığım akımı en aza indirgemek için, arduino bootlader yüklü sade bir ATmega328P’yi bir bread board üzerinde entegre olarak kullanıyoruz.

#include “LowPower.h”

void setup()
{
pinMode(13,OUTPUT);
}

void loop()
{
digitalWrite(13,HIGH);
delay(2000);
digitalWrite(13,LOW);
LowPower.powerDown(SLEEP_2S, ADC_OFF, BOD_OFF);
}

Bu programda Arduino, iki saniyeliğine bir LED’i yakıp söndürüyor ve daha sonra iki saniye süreyle kapanıyor ve bu süre boyunca ADC ve Bown-out algılama (BOD) devre dışı bırakılıyor. Güç kapalıyken, Arduino’nun akımı 14mA’dan  sadece 6uA’ya düşüyor! Önceki bölümlerden elde edilen diğer güç tasarruf hilelerinden bazılarını kullanırsak, aşağıdaki tabloda gibi uyku(sleep) akımının ne kadar düşük olabileceğini görebiliriz.

ATmega328P_Low_Power-new

Saat hızının neden uyku akımını etkilemediğini merak ediyorsanız, güç kesikken saat de devre dışı bırakılmıştır. Açıkçası Arduino’yu düşük güç modunda tutmak istemeyeceksiniz. Ancak, sürekli okumaya ihtiyaç duymadığınız projelerde Arduino’yu% 50 oranında kapatmanız ve yukarıda bahsedilen teknikleri kullanmanız pilin yedi kat daha uzun süre dayanmasına izin verebilir!

 

Kütüphane fonksiyonları için kütüphane dosyasını incelemelisiniz.

 

Umarım faydalı olur.

Arduino’nun Güç Tüketimi Azaltma” için 2 yorum

Yorum bırakın