Bazı mikrodenetleyiciler standart baud hızlarına ölçeklenemeyen kristal frekansı kullansa da baud hızlarını nasıl uygular?


16

8051 ailesinin standart baud hızları oluşturmak için 11.0592 MHz ve katlarını kullandığını fark ettim . Ancak 15 MHz kullanan SoC'ler var . Peki bunu nasıl yapıyorlar?


5
Çoğunlukla standart baud hızlarına yakın kabul edilebilir oranlar üretmek için 2'nin gücü olmayan bölücüler kullanırlar.
Brian Drummond

4
dahası, UART'lar zamanlama (ve gürültü) sorunlarını çözen sinyali (örneğin, UART biti başına 16 örnek) aşırı örnekleyebilir: electronicdesign.com/embedded/…
Florian Castellane

1
İlgilenen herkes için, AVR USART zamanlama hata tabloları veri sayfasındaki genel saatler için mevcuttur (bu sayfada sayfa 168'den itibaren) .
Sebi

Yanıtlar:


22

UART, makul olarak kesin olduğu sürece umursamaz.

1500000023040065

65230400=14976000

Yani faktörü ile çok hızlı olacak . 11 bitlik zaman kayması yarım bitten fazla olduğunda bir sorun haline gelir .15000149761.0022041+12111,045


9
Verici ve alıcının her ikisinde de saat bulunduğunu belirtmek gerekir, bu yüzden her ikisi de yanlış yönde
hatalıysa

7
Daha da önemlisi, ilgili seri protokoller (RS-232 vb.) Saatleri daha fazla senkronize etmek için başlatma ve durdurma bitlerini kullanır. Her iki taraf da 230400 Hz'lik mükemmel saatlere sahip olsa bile, iki saatin faz dışı olması muhtemeldir. Başlangıç ​​biti alıcı tarafın saatini gönderenle senkronize etmesini sağlar. Bu, her bitte ilk bitte olabileceğinden, kusurlu saatler sadece daha sık faz ayarlamaları anlamına gelir.
MSalters

1
Uygulamada, bölücü sisteminin% 100 esnek olması muhtemel olmadığından, bu yazının gösterdiklerinden daha fazla kapalı olması muhtemeldir.
Peter Green

2
@PeterGreen: Bu doğru; Çoğu gerçek UART, baud hızının 16 katı olan bir giriş saati gerektirir ve programlanabilir bölücü daha hızlı saat üretmelidir. Bu örnekte, toplam bölücü 64 (= 16 x 4) ve hata veya +% 1.7, ki bu hala kabul edilebilir bir değerdir. 15M'Hz/64230400bbirud=1,01725
Dave Tweed

2
@DaveTweed: Ancak eşzamansız seri hakkında ciddi olan yongalar, seri çevre birimlerinde 13 süper örnekleme faktörüne izin verme eğilimindedir, bu da Simon'un 3 MHz'in katlarından herhangi bir saatle başlayarak hesapladığı güzel düşük hatayı alır. Alternatif olarak, bazı parçalar, ayrı bitlerin>% 2 zamanlama hatasına sahip olabilmesine rağmen, bit zamanının doğru değere ortalandığı kesirli bir ayırıcı kullanır.
Ben Voigt

12

İşte nispeten büyük uç ARM MCU'nun 'büyük baskı' özellikleri açıklaması.

resim açıklamasını buraya girin

Bir tamsayı oranı olarak ihtiyaç duyabileceğiniz hemen hemen her frekansı oluşturabilen ön ölçek ve son ölçeklere sahip bir dizi PLL ve bölücü vardır. PLL çarpar bir tam sayı ile, giriş frekansı ve bir bölücü bir sayıya (bölün olabilir değil , her durumda 2 zorunlu güçler).

Dahili nispeten yüksek frekanslar (bu durumda yaklaşık yarım GHz) bir sorun değildir (çipte olmadığı gibi) - nispeten az güç tüketilir.

Sadece 2 kişilik güçlerle bölünme günleri bir süre önce sona erdi ve şimdi PLL'ler yaygın olarak uygulandığından, tam kristal frekansı hakkında neredeyse endişelenmemiz gerekmiyor. Diğer yandan, birden fazla dahili veri yolu saati, USB, Ethernet, UART vb. Çevre birimleri için birçok farklı saat frekansına ihtiyacımız olabilir.

Bunların nasıl çalıştığı hakkında daha fazla bilgi edinmek istiyorsanız, nispeten basit olan bazı saat sentezi yongalarını inceleyebilirsiniz (bazı üreticilerin kurulum sabitlerini hesaplamak için yazılım tedarik etmesine rağmen yeterince karmaşık olsa da).


2
(onun = iyelik, "=" ya da "vardır". Örneğin bkz. Onun ve Onun Nasıl Kullanılır .)
Peter Mortensen

4
@PeterMortensen Teşekkürler, düzeltildi. Bazı nedenlerden dolayı, böyle bir yazım hatası yapmak (ve yanlış eş anlamlılar yerleştirmek) bir konuşma yazma modunda rapor yazma modundan ziyade yapmak daha kolaydır.
Spehro Pefhany

10

Bu, bir modülatör kullanılarak elde edilebilir .

Örneğin, MSP430x1xx kullanım kılavuzuna bakın . 260. sayfada diyor ki:

USART baud hızı üreteci, standart olmayan kaynak frekanslarından standart baud hızları üretebilir. Baud hızı üreteci, Şekil 13−7'de gösterildiği gibi bir ön ölçekleyici / bölücü ve bir modülatör kullanır. Bu kombinasyon baud hızı üretimi için kesirli bölenleri destekler.

Baud hızı zamanlaması

(gri alana dikkat edin)

Bölme faktörü N genellikle tamsayı kısmı ön ölçekleyici / bölücü tarafından gerçekleştirilebilecek bir tamsayı olmayan değerdir. Baud hızı üretecinin ikinci aşaması olan modülatör, kesirli kısmı olabildiğince yakın karşılamak için kullanılır.

[...]

BITCLK, tamsayı olmayan bir bölen gerektiğinde zamanlama gereksinimlerini karşılamak için modülatörle uçtan uca ayarlanabilir. Modülatör bit mi ayarlanmışsa, her bitin zamanlaması bir BRCLK saat çevrimi ile genişletilir. Bir bit her alındığında veya iletildiğinde, modülasyon kontrol yazmacındaki bir sonraki bit, o bit için zamanlamayı belirler. Ayarlanmış bir modülasyon biti, bölme faktörünü bir arttırır, temizlenmiş bir modülasyon biti UxBR tarafından verilen bölme faktörünü korur

[...]


5

T

Çalışma şekli, dahili bir örnek saatiniz olmasıdır. Her 100ns'de örnekleme yapabileceğinizi söyleyin. Her bitin ortasının nerede olduğunu biliyorsun. Böylece, ortadaki en yakın örnekleme noktasını seçersiniz. Bu size en fazla 50ns hata verecektir.

Ne olur başlangıç ​​biti alırsınız. Daha sonra bitin ortasının nerede olduğunu, yani referans noktanızın nerede olduğunu belirlersiniz. Daha sonra bir sonraki biti örneklemek için ne kadar beklemeniz gerektiğini bilirsiniz. Böylece, bir sayaç yüklersiniz ve örnek sıfırlandığında. Şimdi, hızlı dahili saatinizin en fazla 1 saat döngüsüne kapalı olacaksınız, ancak çoğu durumda nano saniye. Ayrıca, ne kadar uğraştığını da biliyorsun. Bir sonraki bit için sayacınızı farklı bir değerle yüklersiniz, böylece ortaya mümkün olduğunca yakınsınız ve bu şekilde devam edersiniz.

Gerçek sistemlerde, başka şeyler de olur. Örneğin, bir örnek almazsınız, bir çift alabilir ve üzerlerinde bazı işlemler yapabilirsiniz. Ama genel fikri almalısın.


3

Modern SoC'lar, arayüzler için gerekli olabilecek herhangi bir saati (neredeyse) üretmek için PLL olarak adlandırılır. Basitleştirilmiş terimlerle, PLL devresi yüksek frekanslı bir VCO (Voltaj kontrollü osilatör) kullanır, daha sonra hem VCO hem de giriş saati üzerinde farklı frekans bölücüler kullanır ve frekans oranına göre bir voltaj geri beslemesi oluşturur. Bu geri bildirim VCO'yu kontrol eder, böylece tüm döngü istenen frekansa kilitlenir.


2

Önceden tek bir başlangıç ​​biti ve ardından tek bir durdurma biti tarafından 8 bit bayt varsayıldığında ve alıcı tarafından mükemmel örnekleme varsayıldığında, 9.5 bitlik sürelerden sonra saatin yarım bitlik süreden daha kısa bir süre kapalı olması gerektiği anlamına gelir.

Bu, verici ve alıcı arasındaki maksimum tolere edilebilir saat farkının yaklaşık% 5 olduğu anlamına gelir. Ancak bağlantının her iki ucunda da hata olabilir ve alıcıların senkronizasyonu mükemmel olmayabilir. Bu nedenle pratikte genellikle gerçek baud hızının nominal baud hızının% 1'i içinde tutulmasını tavsiye ederim.

En çok aşina olduğum mikrodenetleyiciler PIC18 cihazları. Bunların eski modelleri baud hızını ölçeklendirmek için esnek 8 bitlik bir sayaç kullanır, daha yenileri ise 16 bitlik esnek bir sayaca sahiptir. Baud hızını dört kat değiştiren isteğe bağlı "yüksek" ve "düşük" hız modları da vardır.

20 MHz giriş saati ile bu üretim şemasının 8 bit versiyonu 1800 ila 19200 arasındaki tüm oranlar için nominal baud hızının% 0.25'ini almak için yeterlidir. 16 bit sürümü daha düşük hızlara inmenizi sağlar.

http://www.nicksoft.info/el/calc/?ac=spbrg&submit=1&mcu=+Generic+16bit+BRG&Fosc=20&FoscMul=1000000&FoscAutoSelector=0&MaxBaudRateError=1 (USC'de çalışan sync = 1 sütununda yoksay, onlar 1 senkron mod)

ULL serisi için PLL'ler, kesirli bölücüler vb. Gerekli değildir.


0

Seri veri alış verişi için, bir kontrolör "ideal" zamanın belirli bir penceresindeki verileri çıkarmalı veya örneklemelidir. Bir saati programlanabilir bir faktöre ve sonra yine ek bir sabit kodlu faktöre bölen bir denetleyiciye sahip olmak en basit olsa da, bitlerin eşit aralıklarla okunmasına veya yazılmasına gerek yoktur. Bir bağlantının uzak ucu, baud hızıyla eşleşen tam olarak eşit aralıklarla bitler çıkarırsa, bir alıcı, doğru zamanlarda bir şeyler örneklemesi şartıyla, baud hızının iki katından daha büyük herhangi bir örnekleme hızıyla geçebilir. Örneğin, verilerin 19.200'de verildiğini ve bir tanesinin tam olarak 48.000Hz'de (2.5x) örneklendiğini varsayalım.

Kişi düşen bir kenar gördüğünde, durdurma bitinin 0 ile 1 örnekleme zamanı arasında başladığını bilecektir. Başlangıç ​​bitinin gözlemlendiği ilk örnek zaman 0 olarak etiketlenirse, bit 0, 1.5 ile 2.5 arasında bir yerde başlayacaktır; bit 1, 4.0 ile 5.0 arasında bir yerde başlar, bit 2, 6.5 ile 7.5 arasında bir yerde başlar ve bit 3, 9.0 ve 10.0 arasında bir yerde başlar. Böylece 3. zamanda alınan bir örneğin 0 bitini [1.5 ile 2.5 arasında başlayan ve 4.0 ile 5.0 arasında biten] yakalaması garanti edilecektir. Benzer şekilde, 6. sırada alınan bir örnek bit 1'i yakalar ve 8., 11, 13, 16, 18 ve 20. zamanda alınan bir örnek 2-7. Bitleri yakalar.

Daha hızlı bir örnekleme hızı kullanmak, alıcının kaynaktaki kusurlara karşı daha toleranslı olmasını sağlar, ancak örnekleme hızı sadece 2,5 kat daha fazla olsa bile, marjlar korkunç değildir [bir bit süresinin yaklaşık 1 / 5'i].

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.