Analog Inputs - Yazılım

Not

Bu bölüm yazılımdaki analog girişleri kapsar. Analog girişlere yönelik bir donanım kılavuzu için bkz Analog Girişler - Donanım.

RoboRIO’nun FPGA’sı, bir sensörden bir analog voltajın değerini okumak için kullanılabilen 8’e kadar analog giriş kanalını destekler. Basit bir voltaj veren herhangi bir sensör için analog girişler kullanılabilir.

FPGA’dan gelen analog girişler varsayılan olarak voltajla orantılı olarak 0 ila 5 volt arasında 12 bitlik bir tam sayı döndürür.

The AnalogInput class

Not

Anlamlı birimlere ölçeklendirmeyi desteklediği için Analog Potentiometers wrapper sınıfını kullanmak, doğrudan AnalogInput kullanmaktan daha uygundur.

FPGA analog girişlerindeki voltajları okuma desteği şu şekilde sağlanır AnalogInput sınıfı (Java, C ++).

Bir AnalogInput’u Başlatma

Bir AnalogInput aşağıdaki gibi başlatılabilir:

// Initializes an AnalogInput on port 0
AnalogInput analog = new AnalogInput(0);

Yüksek Hızla Örnekleme ve Ortalama Alma

The Analog to Digital converter reads the signal and passes it to oversampling, averaging, and an accumulator.

FPGA’nın analog giriş modülleri, hem yüksek hızda örneklemeyi hem de ortalamayı destekler. Bu davranışlar oldukça benzerdir, ancak birkaç önemli yönden farklılık gösterir. Her ikisi de aynı anda kullanılabilir.

Yüksek hızda örnekleme-Oversampling

Yüksek hızda örnekleme etkinleştirildiğinde, FPGA birden çok ardışık örneği birlikte ekler ve birikmiş değeri döndürür. Kullanıcılar, yüksek hızda örneklemenin bitlerinin sayısını belirtebilir - için \(n\) yüksek hızda örnekleme, bir araya getirilen örneklerin sayısı \(2~{n}\):

// Sets the AnalogInput to 4-bit oversampling.  16 samples will be added together.
// Thus, the reported values will increase by about a factor of 16, and the update
// rate will decrease by a similar amount.
analog.setOversampleBits(4);

Averaging - Ortalama

Ortalama alma, yüksek hızda örnekleme gibi davranır, ancak toplanan değerlerin örnek sayısına bölünmesi, böylece döndürülen değerlerin ölçeklendirilmesi değişmez. Bu genellikle daha kullanışlıdır, ancak bazen yuvarlamanın neden olduğu ek yuvarlama hatası istenmeyen bir durumdur.

// Sets the AnalogInput to 4-bit averaging.  16 samples will be averaged together.
// The update rate will decrease by a factor of 16.
analog.setAverageBits(4);

Not

Yüksek hızda örnekleme ve ortalama aynı anda kullanıldığında, yüksek hızda örnekleme ilk uygulanır ve ardından yüksek hızda örneklenen değerlerin ortalaması alınır. Bu nedenle, aynı anda kullanılan 2 bit yüksek hızda örnekleme ve 2 bit ortalama alma, döndürülen değerlerin ölçeğini yaklaşık 2 kat artıracak ve güncelleme hızını yaklaşık 4 kat azaltacaktır.

AnalogInput den değerleri okuma

Değerler bir AnalogInput ‘tan dört farklı yöntemden biriyle okunabilir:

getValue

getValue yöntemi, herhangi bir kalibrasyon uygulamadan ve yüksek hızda örnekleme ve ortalama alma ayarlarını göz ardı etmeden, analog girişten ham anlık ölçülen değeri döndürür. Döndürülen değer bir integer dır.

analog.getValue();

getVoltage

getVoltage yöntemi, analog girişten anlık ölçülen gerilimi döndürür. Yüksek hızda örnekleme ve ortalama alma ayarları göz ardı edilir, ancak değer bir voltajı temsil edecek şekilde yeniden ölçeklendirilir. Döndürülen değer double dır.

analog.getVoltage();

getAverageValue

getAverageValue yöntemi, analog girdiden ortalama değeri döndürür. Değer yeniden ölçeklendirilmez, ancak yüksek hızda örnekleme ve ortalama alma uygulanır. Döndürülen değer bir tamsayıdır-integer.

analog.getAverageValue();

getAverageVoltage

getAverageVoltage yöntemi, analog girişten ortalama voltajı döndürür. Yeniden ölçekleme, yüksek hızda örnekleme ve ortalama uygulanıyor. Döndürülen değer double dır.

analog.getAverageVoltage();

Accumulator - Akümülatör

Not

Akümülatör yöntemleri şu anda volt birimlerinde bir değer döndürmeyi desteklemiyor - döndürülen değer her zaman bir integer olacaktır (özellikle, long).

0 ve 1 nolu Analog giriş kanalları ek olarak, sinyali süresiz olarak entegre eden (toplayan) bir toplayıcıyı-accumulator destekler, böylece döndürülen değer, tüm geçmiş ölçülen değerlerin toplamı olur. Yüksek hızda örnekleme ve ortalama, biriktirmeden önce uygulanır.

// Sets the initial value of the accumulator to 0
// This is the "starting point" from which the value will change over time
analog.setAccumulatorInitialValue(0);

// Sets the "center" of the accumulator to 0.  This value is subtracted from
// all measured values prior to accumulation.
analog.setAccumulatorCenter(0);

// Returns the number of accumulated samples since the accumulator was last started/reset
analog.getAccumulatorCount();

// Returns the value of the accumulator.  Return type is long.
analog.getAccumulatorValue();

// Resets the accumulator to the initial value
analog.resetAccumulator();

Senkronize sayım ve değer elde etme

Bazen, sayım ve değerin eşleşen ölçümlerini elde etmek gerekir. Bu, getAccumulatorOutput yöntemi kullanılarak yapılabilir:

// Instantiate an AccumulatorResult object to hold the matched measurements
AccumulatorResult result = new AccumulatorResult();

// Fill the AccumulatorResult with the matched measurements
analog.getAccumulatorOutput(result);

// Read the values from the AccumulatorResult
long count = result.count;
long value = result.value;

Kodda analog girişlerin kullanılması

AnalogInput sınıfı, verilerini analog voltaj olarak döndüren çok çeşitli sensörler (potansiyometreler, ivmeölçerler, jiroskoplar, ultrasonikler ve daha fazlası dahil) için kod yazmak için kullanılabilir. Bununla birlikte, mümkünse, sizin için daha düşük seviyeli kodu işleyen (analog voltajları okumak ve bunları anlamlı birimlere dönüştürmek) mevcut diğer WPILib sınıflarından birini kullanmak neredeyse her zaman daha uygundur. Kullanıcılar yalnızca “son çare” olarak doğrudan AnalogInput kullanmalıdır.

Buna göre, analog sensörlerin kodda nasıl etkili bir şekilde kullanılacağına dair örnekler için, kullanıcılar bu bölümün daha spesifik sınıflarla ilgili diğer sayfalarına başvurmalıdır.