ไมโครคอนโทรลเลอร์บางตัวใช้อัตราการรับส่งข้อมูลถึงแม้ว่ามันจะใช้ความถี่คริสตัลที่ไม่สามารถปรับขนาดได้กับอัตราการรับส่งข้อมูลแบบมาตรฐาน


16

ฉันเพิ่งตระหนักว่า8051ตระกูลใช้ 11.0592 MHz และทวีคูณของมันเพื่อสร้างอัตราการรับส่งข้อมูลแบบมาตรฐาน แต่มีSoCที่ใช้ 15 MHz พวกเขาจะทำเช่นนี้ได้อย่างไร


5
ส่วนใหญ่พวกเขาใช้ตัวหารที่ไม่ใช่ของ 2 พลังงานในการสร้างอัตราที่ยอมรับได้ใกล้เคียงกับอัตราการรับส่งข้อมูลมาตรฐาน
Brian Drummond

4
ยิ่งไปกว่านั้น UART อาจใช้สัญญาณมากเกินไป (เช่น 16 ตัวอย่างต่อบิต UART) ซึ่งแก้ปัญหาเรื่องเวลา (และเสียง): electronicdesign.com/embedded/…
Florian Castellane

1
สำหรับทุกคนที่สนใจ AVR USART ตารางข้อผิดพลาดช่วงเวลาที่มีอยู่สำหรับนาฬิกาทั่วไปในแผ่นข้อมูล (ในหนึ่งในหน้า 168 นี้เป็นต้นไป)
Sebi

คำตอบ:


22

UART ไม่สนใจตราบใดที่มันสมเหตุสมผล

1500000023040065

65230400=14976000

ดังนั้น UART ของคุณจะเร็วเกินไปด้วยค่า1.002204 มันกลายเป็นปัญหาที่1+115000149761.002204เมื่อเวลาเปลี่ยนไป 11 บิตมากกว่าครึ่ง1+12111.045


9
อาจจะน่าสังเกตว่าเครื่องส่งและเครื่องรับทั้งสองมีนาฬิกาดังนั้นถ้าทั้งคู่มีข้อผิดพลาดในทิศทางที่ผิด ..
Spehro Pefhany

7
ที่สำคัญกว่านั้นโปรโตคอลอนุกรมที่เกี่ยวข้อง (RS-232 ฯลฯ ) ใช้บิตเริ่มต้นและหยุดเพื่อซิงโครไนซ์นาฬิกาเพิ่มเติม แม้ว่าทั้งสองฝ่ายจะมีนาฬิกาที่สมบูรณ์แบบ 230400 เฮิร์ตซ์ แต่นาฬิกาทั้งสองก็น่าจะอยู่นอกเฟส บิตเริ่มต้นอนุญาตให้ฝ่ายรับซิงค์นาฬิกากับผู้ส่ง เนื่องจากสิ่งนี้สามารถเกิดขึ้นได้ในบิตแรกทุกไบต์นาฬิกาที่ไม่สมบูรณ์จึงหมายถึงการปรับเฟสที่บ่อยขึ้น
MSalters

1
ในทางปฏิบัติมีแนวโน้มที่จะถูกปิดมากกว่าโพสต์นี้บ่งชี้เพราะระบบตัวแบ่งไม่น่าจะมีความยืดหยุ่น 100%
ปีเตอร์กรีน

2
15MHZ/64230400aยูd=1.01725

2
@DaveTweed: แต่ชิปที่ซีเรียสเกี่ยวกับซีเรียลซีเรียลมีแนวโน้มที่จะอนุญาตให้มีตัวประกอบการสุ่มตัวอย่างสูงถึง 13 ในอุปกรณ์ต่อพ่วงอนุกรมของพวกเขาซึ่งได้รับข้อผิดพลาดต่ำที่ดีไซม่อนคำนวณเริ่มต้นด้วยนาฬิกาใด ๆ อีกวิธีหนึ่งบางส่วนใช้ตัวแบ่งเศษส่วนที่บิตเวลาเฉลี่ยออกไปเป็นค่าที่ถูกต้องแม้ว่าแต่ละบิตอาจมีข้อผิดพลาดเวลา> 2%
Ben Voigt

12

นี่คือคำอธิบายคุณสมบัติ 'พิมพ์ขนาดใหญ่' ของ ARM ARM ที่ค่อนข้างสูง

ป้อนคำอธิบายรูปภาพที่นี่

มี PLL และตัวแบ่งจำนวนหนึ่งพร้อมพรีสเกลเลอร์และ postscalers ที่สามารถสร้างความถี่ได้เกือบทุกประเภทที่คุณอาจต้องใช้ในอัตราส่วนจำนวนเต็ม PLL คูณความถี่ของตนโดยจำนวนเต็มบางส่วนและแบ่งสามารถหารด้วยจำนวนบางคน ( ไม่จำเป็นต้องเป็นอำนาจของ 2 ในแต่ละกรณี)

ความถี่ที่ค่อนข้างสูงภายใน (ประมาณครึ่ง GHz ในกรณีนี้) ไม่ใช่ปัญหา (อย่างที่พวกเขาทำหากปิดชิพ) - ใช้พลังงานค่อนข้างน้อย

วันของการหารด้วยพลังของ 2 จบลงเมื่อไม่นานมานี้และตอนนี้ PLL ถูกนำไปใช้โดยทั่วไปเราไม่จำเป็นต้องกังวลเกี่ยวกับความถี่คริสตัลแน่นอนเกือบเท่า ในทางกลับกันเราอาจต้องการความถี่สัญญาณนาฬิกาที่แตกต่างกันสำหรับนาฬิกาบัสภายใน, USB, Ethernet, UART และอุปกรณ์ต่อพ่วงอื่น ๆ

หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับวิธีการทำงานเหล่านี้คุณสามารถศึกษาชิปการสังเคราะห์สัญญาณนาฬิกาบางตัวที่ค่อนข้างง่าย (แต่ยังซับซ้อนพอที่ผู้ผลิตบางรายจัดหาซอฟต์แวร์เพื่อคำนวณค่าคงที่การตั้งค่า)


2
(มัน = เป็นเจ้าของมันคือ = "มันคือ" หรือ "มันมี" ดูตัวอย่างวิธีใช้และมัน )
ปีเตอร์มอร์เทนเซ่น

4
@PeterMortensen ขอบคุณแก้ไขแล้ว ด้วยเหตุผลบางประการการพิมพ์แบบนั้น (และการวางคำพ้องเสียงที่ไม่ถูกต้อง) ทำได้ง่ายกว่าเมื่ออยู่ในโหมดการคิดเชิงสนทนามากกว่าจะเป็นโหมดการเขียนรายงาน
Spehro Pefhany

10

สามารถทำได้โดยใช้ โมดูเลเตอร์

ดูตัวอย่างคู่มือผู้ใช้ MSP430x1xxคู่มือผู้ใช้บนหน้า 260 มันบอกว่า:

ตัวสร้างอัตราการรับส่งข้อมูลของ USART สามารถสร้างอัตราการรับส่งข้อมูลแบบมาตรฐานจากความถี่แหล่งที่ไม่ได้มาตรฐาน เครื่องกำเนิดอัตราการรับส่งข้อมูลจะใช้หนึ่ง prescaler / ตัวแบ่งและตัวดัดแปลงดังแสดงในรูปที่ 13−7 ชุดนี้รองรับตัวหารเศษส่วนสำหรับการสร้างอัตราการส่งข้อมูล

อัตราการรับส่งข้อมูล

(สังเกตพื้นที่สีเทา)

ปัจจัยการหาร N มักเป็นค่าที่ไม่ใช่จำนวนเต็มซึ่งส่วนจำนวนเต็มสามารถรับรู้ได้โดย prescaler / divider ขั้นตอนที่สองของตัวสร้างอัตราการส่งข้อมูลคือตัวมอดูเลเตอร์ใช้เพื่อให้ตรงกับส่วนที่เป็นเศษส่วนมากที่สุด

[ ... ]

BITCLK สามารถปรับจากบิตเป็นบิตด้วยโมดูเลเตอร์เพื่อตอบสนองความต้องการเวลาเมื่อต้องการตัวหารที่ไม่ใช่จำนวนเต็ม เวลาของแต่ละบิตจะถูกขยายโดยหนึ่งรอบนาฬิกา BRCLK ถ้าตั้งค่าบิตตัวดัดแปลง ทุกครั้งที่รับหรือส่งบิตบิตถัดไปในเรจิสเตอร์ควบคุมการปรับจะกำหนดเวลาสำหรับบิตนั้น บิตการมอดูเลตชุดเพิ่มปัจจัยการหารหนึ่งในขณะที่บิตการมอดูเลตเคลียร์จะรักษาปัจจัยการหารที่กำหนดโดย UxBR

[ ... ]


5

ผู้คนมากมายคิดว่า UART นั้นกำลังทำงานอยู่บนนาฬิกาตายตัวนั่นคือคุณนำตัวอย่างมาทุกอัน Tวินาที สิ่งนี้ไม่เป็นความจริง อย่างน้อยไม่ได้อยู่ในโมดูล UART ทั้งหมดที่ฉันออกแบบมา

วิธีการทำงานคือคุณมีนาฬิกาตัวอย่างภายใน สมมติว่าคุณสามารถสุ่มตัวอย่างทุก ๆ 100ns คุณรู้ว่าจุดกึ่งกลางของแต่ละบิตคืออะไร ดังนั้นคุณเลือกจุดสุ่มตัวอย่างที่ใกล้เคียงกลางมากที่สุด สิ่งนี้จะทำให้คุณมีข้อผิดพลาดมากถึง 50ns

สิ่งที่เกิดขึ้นคือคุณได้รับบิตเริ่มต้น จากนั้นคุณจะกำหนดจุดกึ่งกลางของบิตนั่นคือจุดอ้างอิงของคุณ จากนั้นคุณจะรู้ว่าต้องรอนานแค่ไหนเพื่อลองชิมบิตต่อไป ดังนั้นคุณโหลดตัวนับขึ้นมาและเมื่อมันรีเซ็ตคุณตัวอย่าง ทีนี้คุณจะออกรอบโดยไม่เกิน 1 รอบนาฬิกาของนาฬิกาภายในอย่างรวดเร็ว แต่ส่วนใหญ่จะเป็นนาโนวินาที นอกจากนี้คุณรู้ว่าคุณปิด สำหรับบิตถัดไปคุณโหลดตัวนับของคุณด้วยค่าที่แตกต่างกันดังนั้นคุณจึงอยู่ใกล้กับกลางมากที่สุด

ในระบบจริงมีสิ่งต่าง ๆ มากมายที่เกิดขึ้นเช่นกัน ตัวอย่างเช่นคุณไม่ได้รับหนึ่งตัวอย่างคุณสามารถใช้เวลาสองสามและทำการประมวลผลบางอย่างกับพวกเขา ฯลฯ ผลที่ได้คือ ADC 1 บิตพร้อมความหมายทั้งหมดเช่นเสียงควอนติเซชั่น แต่คุณควรได้รับความคิดทั่วไป


3

Modern SoC ใช้ PLL ที่เรียกว่าสร้าง (เกือบ) นาฬิกาใด ๆ ที่อาจจำเป็นสำหรับอินเตอร์เฟส ในแง่ง่ายวงจร PLLใช้ VCO ความถี่สูง (oscillator ควบคุมแรงดันไฟฟ้า) จากนั้นใช้ตัวแบ่งความถี่ที่แตกต่างกันทั้ง VCO และนาฬิกาอินพุตและสร้างการป้อนกลับแรงดันไฟฟ้าตามอัตราส่วนความถี่ ข้อเสนอแนะนี้จะควบคุม VCO เช่นว่าวงทั้งหมดจะถูกล็อคกับความถี่ที่ต้องการ


2

สมมติว่า 8 บิตไบต์นำหน้าด้วยบิตเริ่มต้นเดียวแล้วตามด้วยบิตหยุดเดียวและสมมติว่าการสุ่มตัวอย่างที่สมบูรณ์แบบโดยผู้รับซึ่งหมายความว่าหลังจากระยะเวลา 9.5 บิตนาฬิกาจะต้องปิดโดยน้อยกว่าครึ่งบิตบิต

นั่นหมายถึงความแตกต่างของนาฬิกาที่สามารถรับได้สูงสุดระหว่างตัวส่งและตัวรับคือ 5% อย่างไรก็ตามอาจมีข้อผิดพลาดที่ปลายทั้งสองด้านของลิงค์และการประสานการรับอาจไม่สมบูรณ์ ในทางปฏิบัติดังนั้นโดยทั่วไปฉันขอแนะนำว่าอัตราการรับส่งข้อมูลจริงจะถูกเก็บไว้ภายใน 1% ของอัตราการส่งข้อมูลที่ระบุ

ไมโครคอนโทรลเลอร์ที่ฉันคุ้นเคยมากที่สุดคืออุปกรณ์ PIC18 รุ่นเก่าเหล่านี้ใช้ตัวนับ 8 บิตที่ยืดหยุ่นเพื่อปรับขนาด baudrate ในขณะที่รุ่นใหม่นั้นมีตัวนับ 16 บิตที่ยืดหยุ่น นอกจากนี้ยังมีโหมดความเร็วสูง "สูง" และ "ต่ำ" ซึ่งเปลี่ยนค่า baudrate ด้วยปัจจัยสี่

ด้วยนาฬิกาอินพุท 20 MHz รุ่น 8 บิตของรุ่นนี้พอเพียงที่จะได้รับภายใน 0.25% ของอัตรารับส่งข้อมูลที่กำหนดสำหรับทุกอัตราจาก 1800 ถึง 19200 เวอร์ชั่น 16 บิตช่วยให้คุณสามารถลดความเร็วลงได้

http://www.nicksoft.info/el/calc/?ac=spbrg&submitted=1&mcu=+Generic+16bit+BRG&Fosc=20&FoscMul=1000000&FoscAutoSelector=0&MaxBaudRateError=1 (ละเว้นการซิงโครไนซ์ = 1 colums พวกเขาทำงานอยู่ในสหรัฐฯ โหมดซิงโครนัส)

PLLs ตัวแบ่งเศษส่วน ฯลฯ ไม่จำเป็นสำหรับซีเรียล UART


0

ในการแลกเปลี่ยนข้อมูลอนุกรมผู้ควบคุมจะต้องส่งออกหรือสุ่มตัวอย่างข้อมูลภายในช่วงเวลาที่กำหนด "หน้าต่าง" ในขณะที่มันเป็นเรื่องง่ายที่สุดที่จะมีตัวควบคุมที่แบ่งนาฬิกาด้วยปัจจัยที่สามารถตั้งโปรแกรมได้และจากนั้นอีกครั้งโดยปัจจัยที่มีการกำหนดรหัสแบบยากเพิ่มเติมไม่มีความต้องการที่บิตจะอ่านหรือเขียนในช่วงเวลาเท่ากัน หากปลายสุดของการเชื่อมต่อออกบิตในช่วงเวลาที่ตรงกับอัตราการรับส่งข้อมูลอย่างแม่นยำผู้รับจะได้รับด้วยอัตราการสุ่มใด ๆ ที่มากกว่าสองเท่าของอัตราการรับส่งข้อมูลที่ให้ตัวอย่างในเวลาที่เหมาะสม ตัวอย่างเช่นสมมติว่าข้อมูลส่งออกที่ 19,200 และมีการสุ่มตัวอย่างที่แม่นยำ 48,000Hz (2.5x)

เมื่อใครเห็นขอบที่ตกลงมาใครจะรู้ว่าบิตหยุดได้เริ่มต้นระหว่าง 0 และ 1 การสุ่มตัวอย่างครั้งที่แล้ว หากหนึ่งป้ายชื่อตัวอย่างแรกที่สังเกตว่าบิตเริ่มต้นเป็นเวลา 0 บิต 0 จะเริ่มต้นที่ไหนสักแห่งระหว่างเวลา 1.5 และ 2.5; บิต 1 จะเริ่มต้นที่ไหนสักแห่งระหว่างเวลา 4.0 และ 5.0 บิต 2 จะเริ่มต้นที่ไหนสักแห่งระหว่างเวลา 6.5 และ 7.5 และบิต 3 จะเริ่มที่ไหนสักแห่งระหว่างเวลา 9.0 และ 10.0 ตัวอย่างที่ถ่ายในเวลา 3 จะได้รับการรับประกันว่าจะจับบิต 0 [ซึ่งเริ่มต้นระหว่างเวลา 1.5 ถึง 2.5 และสิ้นสุดระหว่างเวลา 4.0 และ 5.0] ตัวอย่างที่ถ่ายในเวลา 6 จะจับบิต 1 และตัวอย่างที่ถ่ายในเวลา 8, 11, 13, 16, 18, และ 20 จะจับบิต 2-7

การใช้อัตราตัวอย่างที่เร็วกว่าจะทำให้ผู้รับไม่ยอมให้มีข้อบกพร่องในแหล่งที่มามากขึ้น แต่ถึงแม้จะมีอัตราตัวอย่างเพียง 2.5 เท่าอัตราบิตนั้นอัตรากำไรขั้นต้นก็ไม่แย่นัก [ประมาณ 1/5 ของเวลาบิต]

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.