Soru:
Soğuk havada MSP430 seri iletişim hatası
markrages
2010-12-23 11:37:28 UTC
view on stackexchange narkive permalink

MSP430 mikroişlemcisini kullanan ve birkaç yıldır satılan bir ürünüm var. MSP430'un görevlerinden biri, asenkron seri üzerinden düşük güçlü bir radyoyla iletişim kurmaktır.

Bu kışın başlamasıyla birlikte, soğuk havalarda kabul edilemez bir başarısızlık oranı (yüzde birkaç) oldu. Araştırma, radyo ile seri iletişimin başarısız olduğunu tespit etti. Seri bağlantı noktası için baud hızı üreteci, MSP430'un dijital kontrollü osilatöründen (DCO) ayrılan SMCLK tarafından beslenir.

Düşük sıcaklıklarda seri iletişim neden başarısız?

( Not: Sorunu zaten çözdüm ve yanıtı yakında yayınlayacağım. İpucu: Bu bir yazılım hatasıydı.)

üç yanıtlar:
uɐɪ
2010-12-23 14:47:12 UTC
view on stackexchange narkive permalink

Hangi MSP430'u kullanıyorsunuz? Farklı ailelerin farklı saat yapıları ve yetenekleri vardır.

DCO, frekansı sıcaklıkla değiştirecek ve USART baud hızının spesifikasyonun dışına çıkmasına neden olacaktır. MSP'nin bir sıcaklık sensörü vardır (çok doğru değil). DCO frekansını tekrar aralığa getirmek için DCO kontrol kayıtlarındaki değerleri değiştirebilirsiniz, ancak bu, görmeyi beklediğiniz sıcaklık aralığını kapsayan kalibre edilmiş arama tabloları gerektirir. Bazı MSP cihazlarında, üretimde flaş sektörlerden birine programlanmış DCO kalibrasyon tabloları vardır, ancak bunlar yalnızca kullanmak istediğiniz frekansı kapsıyorsa yararlıdır ve sıcaklık telafi değerlerine sahip olduklarını düşünmüyorum.

Kalibrasyon kaynağı olarak kullanabileceğiniz bir referans kristal osilatörünüz var mı? Her zaman 32kHz kristal tasarlardım ve bunu ACLK'da kullanırdım. 9600'e kadar olan baud hızları için bu doğrudan kullanılabilir. Daha yüksek baud hızları için DCO'yu ACLK sinyaline göre kalibre etmeniz gerekecektir. Yeni parçalarda bunu otomatik olarak yapacak bir donanım FLL'si vardır.

markrages
2010-12-23 23:29:14 UTC
view on stackexchange narkive permalink

İşte cevap:

Üründe 32 kHz kristal var ve ben DCO frekansını ayarlamak için bir rutin kodlamıştım. Frekans ayarı, biri DCO'dan ve diğeri 32kHz ACLK'dan olmak üzere iki zamanlayıcı kullandı. Yakalama / karşılaştırma sistemindeki bir kesinti tarafından çalıştırıldı, böylece çalışma sırasında kendisini periyodik olarak yeniden kalibre edebildi.

Ne yazık ki, ilk kalibrasyonu, kesintilerin döndüğü başlangıç ​​kodumun yanlış kısmına ekledim kapalı. Bu nedenle, seri bağlantı noktasının ilk kullanımından önce kalibrasyon gerçekleşmedi ve başlatma, seri bağlantı noktasında bir yanıt bekleyerek askıda kalıyordu.

DCO frekansı fabrikada kalibre edilmiş değerde başlar, bu yüzden oda sıcaklığında çalışmak.

Bu grafikler hikayeyi anlatıyor:

İlk olarak, DCO-sıcaklık eğrisi: alt text

Şimdi kalibrasyondan sonraki eğri aslında çalışma: alt text

İyi hikaye! Düzeltmek pahalı mı? : D
Eğimin ilk grafikten ikinci grafiğe değişmesi ilginçtir. Herhangi bir teori var mı? DCO'nun frekans olarak daha düşük ayarlanması, daha kötü bir sıcaklık katsayısı verir mi?
Y ekseninin iki grafik arasında değiştiğine dikkat edin. Ve genel olarak bunları çok fazla okumayın. Parça, ev tipi bir dondurucuda dondurulmuş ve sıcaklık, sadece tamsayı dereceleri okuyan ucuz bir MAS-345 (http://www.elexp.com/tst_s345.htm) üzerinde bir termokupl ile oda sıcaklığına ısınma sırasında ölçülmüştür. Sonra arsa oluşturmak için tam dereceli değişiklikler arasında doğrusal olarak ara hesap yaptım.
W5VO
2010-12-23 12:13:56 UTC
view on stackexchange narkive permalink

Düşük sıcaklıklar, DCO frekansının UART baud hızının çok yükselmesine neden olacak kadar yükselmesine neden oldu mu? Sıcaklığı ölçtünüz ve ardından osilatörü yazılımda telafi ettiniz mi?



Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 2.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...