ทำไมสัญญาณบางอย่างของฉัน 'สั่น' (มีความกระวนกระวายใจ)


9

ฉันมีบัส SPI 2 MHz แต่สิ่งหนึ่งที่ฉันสังเกตเห็นคือสัญญาณบางอย่างของฉันมักจะ 'สั่น' ใช่ทริกเกอร์ของฉันติดตั้งอย่างถูกต้องดังนั้นฉันไม่คิดว่าปัญหาจะอยู่ที่นั่น

คุณสามารถเห็นสิ่งที่ฉันหมายถึงที่นี่: (นี่คือด้วยโหมดการติดตาอยู่บน) นี่คือนาฬิกาของบัส SPI ของฉัน

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

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

SPI ทำงานได้ดี ฉันถ่ายโอนเมกะไบต์หลายร้อยบนหลายกระดานและยังไม่พบปัญหา แต่ฉันก็ยังสนใจที่จะรู้ว่าอาจมีปัญหาอะไรที่นี่ นอกจากนี้ฉันควรจะซ่อมมันได้ไหม

การวัดถูกถ่ายที่แหล่งกำเนิดด้วยคลิปกราวด์ขนาดเล็กมาก

นี่เป็นวงจรที่เรียบง่ายของวงจรของฉัน แน่นอนว่าบอร์ดมีอุปกรณ์ SPI มากกว่านี้ แต่สำหรับวัตถุประสงค์ของคำถามนี้มีความถูกต้องเพราะบอร์ดยังไม่ได้ทำการบัดกรีใด ๆ ยกเว้น uC และการ์ด SD

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

Master (AVR Mega 128) กำลังทำงานอยู่มันเป็น RC oscillator ภายใน - ฉันไม่รู้ว่ามันจะเกี่ยวข้องหรือไม่ แต่เนื่องจากสัญญาณมีการเปลี่ยนแปลงในเวลาที่เป็นไปได้ที่ jitter ของ RC oscillator จะสิ้นสุดใน SPI บัสด้วย แค่คิดว่าฉันจะพูดถึงมัน มันเกิดขึ้นกับฉันด้วยว่าในระหว่างการวัดเหล่านี้ฉันวิ่งคอนโทรลเลอร์ในวงวนไม่สิ้นสุด นี่คือรหัส:

while(1)
{
    setFirstBitOnDriver(driver); // this sends a 8-bit command on the SPI bus.
    GLCD_SetCursorAddress(40); // Change cursor position on the display.
    GLCD_WriteText("LED: "); 
    for(wire=0;wire<72;wire++)
    {
        itoa(wire+1,str,10);
        GLCD_WriteText(str);
        GLCD_SetCursorAddress(44);
        _delay_ms(10);
        shiftVectorOnDriver(driver); // another command on SPI. 8-bit wide.
    }
}

ตัวสั่นสะเทือน / สั่นอาจเกิดขึ้นเมื่อการวิ่งภายใน 72 ครั้งแล้วออก เนื่องจากต้องใช้เวลาเพิ่มเติมในการดำเนินการสามบรรทัดแรกอาจเป็นไปได้ว่ารูปคลื่น 73 ทุกครั้งมาถึงในเวลาที่แตกต่างกันเล็กน้อยเนื่องจากเวลาในการประมวลผลเพิ่มเติม ถ้าฉันต้องเดิมพันฉันเดาว่านี่เป็นสาเหตุของปัญหาของฉัน (ถ้าทำได้ฉันจะยืนยันได้ทันที แต่บอร์ดของฉันที่ทำงานและสัปดาห์ถัดไปจะปิด!) แต่ฉันก็ยังชอบความคิดเห็น / คำตอบของ SE ในเรื่องนี้

แต่การพิจารณาว่ายูซีซีทำงานที่ 8 Mhz ฉันไม่กระวนกระวายใจเนื่องจากซอฟต์แวร์น่าจะเป็นเพราะในหน่วยนาโนวินาที แต่เป็นไมโครวินาที แต่ในรูปที่ 2 จะเห็นเส้นแบน สิ่งนี้จะเกิดขึ้นในชั่วครู่ที่สองซึ่งรูปคลื่นทั้งหมดเปลี่ยนไปตามกาลเวลาและมองไม่เห็นบนหน้าจอ ฉันเดาว่านี่เป็นเพราะลูปและความกระวนกระวายใจในภาพแรกนั้นเกิดจาก RC oscillator


2
ทริกเกอร์ของคุณคืออะไร?
เครื่องหมาย

@markrages ทริกเกอร์ตั้งไว้ที่ 1.48V บน CH1 - ขอบที่เพิ่มขึ้น
Saad

2
สิ่งหนึ่งที่เดาได้คือ uC (ข้อสันนิษฐานของฉัน) ที่สร้างสัญญาณนาฬิกา SPI กำลังใช้ PLL ที่ทำงานโดยการย่อหรือขยายวงจรนาฬิกาบางส่วนเพื่อให้ตัวเองล็อคอยู่กับการอ้างอิง เมื่อวงจรนาฬิกาสั้นหรือยาวเหล่านั้นมาพร้อมกันมันจะสร้างความกระวนกระวายใจในการติดตามขอบเขตของคุณเพราะขอบที่คุณมองมาก่อนหน้า / ต่อมาสัมพันธ์กับขอบที่คุณถูกเรียกออกมา
โฟตอน

1
หรือ SPI ถูกสร้างขึ้นในลูปหลักของคุณ แต่บางครั้งก็มีอินเทอร์รัปต์ที่ทำให้การรันลูปหลักช้าลงดังนั้นคุณจะเห็นความแตกต่างในช่วงเวลาของลูป
โฟตอน

2
คำว่า "กระวนกระวายใจ" แต่คุณอาจพูดว่า "ตัวสั่น" ;-)
stevenvh

คำตอบ:


6

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

แต่สิ่งที่สามารถทำให้เกิดความกระวนกระวายใจในระบบของคุณ?

  • ตามที่คุณคาดการณ์ไว้หากนาฬิกาหลักของ uC นั้นกระวนกระวายใจว่ากระวนกระวายใจส่วนใหญ่จะถ่ายโอนโดยตรงไปยังเอาต์พุตนาฬิกาจากอุปกรณ์ต่อพ่วง SPI

    การบายพาสไม่เพียงพอ (คุณควรมีการบายพาสจำนวนมากบนบอร์ดของคุณนอกเหนือจากตัวเก็บประจุ 100 nF สองตัวที่คุณวาด) อาจนำไปสู่การกระวนกระวายใจในวงจรนาฬิกา uC

    เสียงของแหล่งจ่ายไฟที่แนะนำโดยวงจรอื่น ๆ ในบอร์ดของคุณอาจมีผลกระทบนี้ (แต่จะลดลงเมื่อผ่านไปมากกว่า)

  • กระวนกระวายใจอาจมีอยู่ในประสิทธิภาพของอุปกรณ์ต่อพ่วง SPI ของ uC มันจะต้องสร้างนาฬิกา SPI โดยอ้างอิงกับนาฬิกาของระบบ หากใช้ตัวแบ่งแบบง่าย (4-to-1 ในกรณีของนาฬิการะบบ 8 MHz และนาฬิกา 2 MHz SPI) คุณจะไม่คาดหวังว่าจะเห็น jitter ที่เพิ่มเข้ามามากนัก แต่ถ้ามันใช้รูปแบบที่ซับซ้อนมากขึ้นเช่น PLL วงจรนั้นอาจเปลี่ยนแปลงความกว้างพัลส์นาฬิกา SPI เพื่อซิงค์กับนาฬิกาของระบบและคุณจะเห็นว่าเป็นความกระวนกระวายใจ วงจร PLL อาจมีความไวต่อเสียงของแหล่งจ่ายไฟโดยเฉพาะ

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


ฉันมีหมวกบายพาส 100nF ในทุกคู่ vcc / gnd ในทุกชิป คุณยังจะแนะนำเพิ่มเติมหรือไม่ ถ้าเป็นเช่นนั้นแคป 100nF หรือ 1uF เพิ่มเติม
ซาด

หากกระวนกระวายใจนี้เป็น "ปัญหา" ประสิทธิภาพการทำงานที่เลวร้ายที่สุดบนกระดานของคุณไม่จำเป็นต้องเปลี่ยนแปลงอะไร ขึ้นอยู่กับว่ามีวงจรอื่น ๆ อีกกี่ตัวในระบบของคุณและสิ่งที่พวกมันกำลังทำอยู่มีตัวเพิ่มบายพาส 1, 10 และ / หรือ 100 uF ที่กระจายอยู่รอบ ๆ บอร์ดเป็นแนวทางการออกแบบทั่วไป สิ่งเหล่านี้ไม่ได้แปลเป็นชิพที่เฉพาะเจาะจงพวกมันจะให้ "จำนวนมาก" สำหรับบอร์ดทั้งหมด
โฟตอน

ใช่ฉันมียั่วยุ 47,000 สองอันบนกระดานเพื่อจุดประสงค์นี้ ดังนั้นฉันควรจะโอเคในส่วนบายพาส
ซาด

2
SPI ซิงโครนัสอย่างเต็มที่ ไม่มีปริมาณของกระวนกระวายใจจะทำให้ SPI ล้มเหลว
เครื่องหมาย

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

6

ดูเหมือนสัญญาณกระวนกระวายใจให้ฉัน ช่วงเวลาของนาฬิกามีการเปลี่ยนแปลงอย่างเล็กน้อยพอที่การคงอยู่ของขอบเขตทำให้ขอบดู 'เปื้อน'

ฉันไม่รู้ว่าขอบเขต Rigol ของคุณมีความสามารถในการคำนวณสถิติเมื่อมีการวัดหรือไม่ ถ้าเป็นเช่นนั้นคุณสามารถปรับจุดทริกเกอร์เพื่อให้ขอบไกปรากฏบนขอบด้านซ้ายของหน้าจอปรับฐานเวลาเพื่อแสดงช่วงเวลาที่สมบูรณ์และวัดความแปรผันของความถี่ในช่วงเวลาหนึ่งเพื่อรับความรู้สึกของการเปลี่ยนแปลง (กระวนกระวายใจอาจดูแย่กว่าเมื่อขอบไกอยู่นอกจอ)

หากคุณต้องการ จำกัด แหล่งที่มาของการกระวนกระวายใจฉันจะเริ่มด้วย RC oscillator ดูว่าคุณมีตัวเลือกที่จะใช้วิธีการนาฬิกาที่แตกต่างกัน (เช่นคริสตัล), ใช้มันและ remitter ที่ใจ


จะลองใช้กับ oscillator ภายนอกทันทีที่งานเปิด!
ซาด

6

ภาพขอบเขตสามารถทำให้เข้าใจผิดและคุณต้องดูพารามิเตอร์ทั้งหมดเพื่อตีความข้อมูลอย่างถูกต้อง ภาพแรกแสดงความกระวนกระวายใจ 10 ns และนั่นคงไม่ดีนักถ้าไกปืนอยู่ที่หน้าจอด้านซ้าย แต่ด้านล่างขวามันบอกว่าทริกเกอร์ + 1.78 sos ดังนั้น 10 ns เป็นจริงเพียง 0.5% ของช่วงเวลา ระดับของการกระวนกระวายใจนั้นอาจเกิดจาก RC oscillator คาดว่ากระวนกระวายใจจะลดลงอย่างน้อยหนึ่งลำดับความสำคัญด้วยคริสตัลออสซิลเลเตอร์

คุณบอกว่าคุณยังไม่พบปัญหาใด ๆ ในการถ่ายโอนข้อมูล SPI นั่นเป็นเพราะความสัมพันธ์ของ 0.5% หากคุณจะ MOSI 1 befores ก่อน CLK ชีพจร 0.5% กระวนกระวายใจจะทำให้กระวนกระวายใจ 5 ns นี้จะไม่ละเมิดการตั้งค่าและถือครั้ง

หากคุณต้องการความมั่นใจเพียงแค่ตั้งค่าฐานเวลาเพื่อให้คุณเห็นเวลาบิตที่สมบูรณ์ทั้งช่อง MOSI และ CLK คุณจะสังเกตเห็นว่ากระวนกระวายใจจะมองเห็นได้ยากและขอบที่ต่อเนื่องยังคงแยกจากกัน


สตีเว่นคุณช่วยอธิบายได้ไหมว่าทำไมสถานะของไกจึงสำคัญ คุณได้รับตัวเลข 0.5% อย่างไร
ซาด

2
@Saad - จุดทริกเกอร์คือเวลา = 0 สิ่งที่ปรากฏบนหน้าจอเกิดขึ้น 1.78 เรา = 1780 ns ภายหลัง และ 10 ns jitter (มากกว่าหรือน้อยกว่า) ก็คือความแปรปรวนของ 1780 ns ดังนั้น 10 ns / 1780 ns = 0.56% มันดูไม่ดีนักเพราะมันซูมเข้าที่ขอบที่ตกลงมา แต่ขอบอ้างอิง (ไก) จะอยู่ทางซ้ายหลายสิบเมตร ดังนั้นถ้าคุณซูมออกเพื่อให้ได้ชีพจรเต็มที่ในมุมมองที่กระวนกระวายใจจะดูเล็กลงมาก หากจุดกระตุ้นอยู่ทางด้านซ้ายของหน้าจอให้พูดที่ -100 ns จากนั้นตัวสั่นขนาด 10 ns จะเป็น 10%
stevenvh

1

กระวนกระวายใจเป็นรูปแบบของเสียง หากคุณพิจารณาเวลาระหว่างการมาถึงระหว่างขอบของพัลส์เป็นสัญญาณชนิดหนึ่งหากขอบเหล่านั้นไม่กระวนกระวายใจใด ๆ ก็หมายความว่าระบบของคุณแสดงสัญญาณที่ปราศจากเสียงรบกวน!

คลื่นสี่เหลี่ยมมักถูกสร้างขึ้นโดยการทำเกลียวบนคลื่นที่ต่อเนื่องมากกว่าโดยมีวงจรชนิดชมิดท์ทริกเกอร์บางตัวที่มีพฤติกรรมฮิสเทรีซิส คริสตัลหรือออสซิลเลเตอร์ RC ไม่ได้ "สร้าง" คลื่นสี่เหลี่ยมออกมา

ดังนั้นหากคลื่นอินพุตนั้นมีเสียงรบกวนจากแรงดันไฟฟ้าเสียงดังกล่าวจะแปลว่ามีการเปลี่ยนแปลงเล็กน้อยในการกระตุ้นขณะที่แรงดันไฟฟ้าถึงบางครั้งก็ถึงเกณฑ์ทั้งในไม่ช้าและในภายหลัง

และเสียงรบกวนชนิดหนึ่ง (เสียงแรงดันไฟฟ้า) จะเปลี่ยนเป็นเสียงประเภทอื่น (เสียงรบกวนเวลา)

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