- Katılım
- 27 Şubat 2019
- Mesajlar
- 11,240
Güç kaynağımda yaptığımız istişareler sonucu MCP4922 DAC için bulduğumuz katsayı 133 idi.
Bu rakamla neyi çarparsak çarpalım bize çıkışta istediğimiz çıkışı neredeyse tam olarak veriyor.
Neredeyse diyorum çünkü bu rakamı sabit 133 olarak kullanınca 30V da 30.04V, değer aşağılara doğru düştükçe hata payı daha da artarak geliyor.
1V için 133 katsayısını kullandığımızda çıkış 1.20v oluyor.
Bende düşündüm elimde 4096 adım atabilen bir DAC varken neden bu hatalara boyun eğeyim?
Kat sayısını değiştirir istediğim sonuca tam olarak ulaşırım. Bunun için if - else yapısı kullanmaya karar verip 3.else kodundan sonra vaz geçtim.
Çünkü neredeyse 2 voltta bir kalibrasyon katsayısını değiştirmem gerekiyordu.
Bunun daha pratik bir yolu olmalıydı. Aklımda for döngülerini, fonksiyonları döndürmeye başladım.
Sonra Timur abinin geçen gün konuşurken "otomatik kalibrasyon yapılabilir" dediğini hatırladım.
O zaman ben şöyle bir yol izlerim.
1- Keypadden girdiğin voltajı karşılaştırma için kullan. Misal 30V
2- Piconun ADC si ile Ana çıkışı oku ve 30v ile karşılaştır.
3- Çıkıştan okunan değer 30V'a eşit değilse DAC'a gönderilen değeri mesela 5 artır.
Bir bakıma PID kontrolü gibi yani. Değeri çıkışta sabit tutacağım.
Bunun için ilk önce başıma bela olan çıkışı okuma işini hassas bir şekilde çözmem gerek.
Yaptığım işlemleri buradan paylaşacağım.
Bu rakamla neyi çarparsak çarpalım bize çıkışta istediğimiz çıkışı neredeyse tam olarak veriyor.
Neredeyse diyorum çünkü bu rakamı sabit 133 olarak kullanınca 30V da 30.04V, değer aşağılara doğru düştükçe hata payı daha da artarak geliyor.
1V için 133 katsayısını kullandığımızda çıkış 1.20v oluyor.
Bende düşündüm elimde 4096 adım atabilen bir DAC varken neden bu hatalara boyun eğeyim?
Kat sayısını değiştirir istediğim sonuca tam olarak ulaşırım. Bunun için if - else yapısı kullanmaya karar verip 3.else kodundan sonra vaz geçtim.
Çünkü neredeyse 2 voltta bir kalibrasyon katsayısını değiştirmem gerekiyordu.
C++:
if (voltaj <= 30.00 && voltaj >= 27.00) {
voltaj = voltaj * 133.85;
setDac(voltaj, 1); //Volt
voltaj = voltaj / 133.85;
}
else if (voltaj < 27.00 && voltaj >= 25.00) {
voltaj = voltaj * 133.75;
setDac(voltaj, 1); //Volt
voltaj = voltaj / 133.75;
}
else if (voltaj < 25.00 && voltaj >= 22.00) {
voltaj = voltaj * 133.70;
setDac(voltaj, 1); //Volt
voltaj = voltaj / 133.70;
}
Bunun daha pratik bir yolu olmalıydı. Aklımda for döngülerini, fonksiyonları döndürmeye başladım.
Sonra Timur abinin geçen gün konuşurken "otomatik kalibrasyon yapılabilir" dediğini hatırladım.
O zaman ben şöyle bir yol izlerim.
1- Keypadden girdiğin voltajı karşılaştırma için kullan. Misal 30V
2- Piconun ADC si ile Ana çıkışı oku ve 30v ile karşılaştır.
3- Çıkıştan okunan değer 30V'a eşit değilse DAC'a gönderilen değeri mesela 5 artır.
Bir bakıma PID kontrolü gibi yani. Değeri çıkışta sabit tutacağım.
Bunun için ilk önce başıma bela olan çıkışı okuma işini hassas bir şekilde çözmem gerek.
Yaptığım işlemleri buradan paylaşacağım.