หนึ่งไมโครคอนโทรลเลอร์ขนาดใหญ่หรือไมโครคอนโทรลเลอร์ขนาดเล็กจำนวนมาก?


24

ฉันคุ้นเคยกับการทำสิ่งพื้นฐานและตรงไปตรงมากับไมโครคอนโทรลเลอร์ สิ่งต่าง ๆ เช่นการขับขี่ LED, การวิ่งมอเตอร์, กิจวัตรพื้นฐาน, GUIs บนตัวอักษร LCD และอื่น ๆ แต่มักจะมีเพียงหนึ่งภารกิจสำคัญที่มีงานด้านน้อยที่สุด สิ่งนี้ได้ผลักไสฉันไปสู่ผลิตภัณฑ์ระดับล่างเนื่องจากเป็นสิ่งที่จำเป็นจริงๆในกรณีเหล่านี้

ฉันต้องการเริ่มต้นออกแบบสิ่งที่ซับซ้อนมากขึ้น แต่ด้านบนของไมโครคอนโทรลเลอร์ที่ต่อเนื่องไม่ใช่สิ่งที่ฉันได้สัมผัสมาอย่างดี ดังนั้นฉันจึงมีช่วงเวลาที่ท้าทายมากที่พยายามเลือกไมโครคอนโทรลเลอร์ที่ฉันจะทำงานหลายอย่างพร้อมกัน - ฉันไม่สามารถบอกได้ด้วยหมายเลข MIPS และ pinout ที่น่าพอใจถ้ามันมีแรงม้ามากพอที่จะทำสิ่งที่ฉันต้องการ ทำ.

ตัวอย่างเช่นฉันต้องการควบคุมมอเตอร์ BLDC จำนวน 2 ตัวด้วยการทำงานของ PI ควบคู่ไปกับการสื่อสารแบบอนุกรมและ USB บางส่วน GUI และงานอื่น ๆ ฉันถูกล่อลวงให้มีเพียงไมโครคอนโทรลเลอร์สำหรับแต่ละมอเตอร์และอีกอันสำหรับงานเบ็ดเตล็ดดังนั้นฉันสามารถรับประกันได้ว่าค่าใช้จ่ายจากสิ่งอื่น ๆ จะไม่ทำให้การทำงานของมอเตอร์มีความสำคัญ แต่ฉันไม่รู้ว่าจริง ๆ แล้วเป็นความคิดที่ดีหรือเป็นวิธีที่ไร้เดียงสาในการทำสิ่งต่าง ๆ

ฉันเดาคำถามของฉันเป็นสองเท่าจริง ๆ :

  1. วิธีการแบบ all-in-one เป็นความคิดที่ดีเมื่อต้องทำมัลติทาสกิ้งจำนวนมากหรือดีกว่าที่จะแบ่งส่วนและแยกและ

  2. ฉันจะรู้ได้อย่างไรว่าไมโครคอนโทรลเลอร์ที่ฉันกำลังดูมีพลังในการคำนวณเพียงพอที่จะทำสิ่งที่ฉันต้องการจากรายการงานของฉันได้อย่างไร

ฉันดูที่ dsPIC33s ระดับปานกลางจนถึง ARM SoCs ที่ใช้ RTOS วิธีที่เป็นระบบในการทำความเข้าใจสิ่งที่ฉันต้องการจะช่วยฉันได้มาก




4
มีคำตอบมากเกินไปแล้ว แต่บางครั้งก็มีไมโครที่ตั้งโปรแกรมได้จำนวนมากบนกระดานเดียวกันทั้งหมดที่พูดภาษาเดียวกันนั้นมีวิธีการทำงานที่มากกว่าการใช้ไมโครไมโครเพียงตัวเดียวบางทีอาจใช้อุปกรณ์ต่อพ่วงอัจฉริยะบางตัว
Erik Friesen

คำตอบ:


10

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

ปริมาณเล็กน้อย

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

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

ดังนั้นในกรณีนี้คำตอบสำหรับคำถามของคุณคือ:

วิธีการแบบ all-in-one เป็นความคิดที่ดีเมื่อต้องทำมัลติทาสกิ้งจำนวนมากหรือดีกว่าที่จะแบ่งส่วนและแยกและ

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

ฉันจะรู้ได้อย่างไรว่าไมโครคอนโทรลเลอร์ที่ฉันกำลังดูมีพลังในการคำนวณเพียงพอที่จะทำสิ่งที่ฉันต้องการจากรายการงานของฉันได้อย่างไร

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

การผลิตจำนวนมาก

หากคุณวางแผนที่จะสร้างอุปกรณ์เหล่านี้จำนวนมากการวิเคราะห์อย่างระมัดระวังจะทำให้ประหยัดต้นทุนได้มาก โดยทั่วไปการพูดไมโครคอนโทรลเลอร์ขนาดใหญ่จะมีราคาน้อยกว่าไมโครคอนโทรลเลอร์สองตัวที่สามารถแทนที่ไมโครคอนโทรลเลอร์เดี่ยวได้แม้ว่าจะมีข้อยกเว้นแน่นอนขึ้นอยู่กับงานเฉพาะที่ต้องการ ในปริมาณเหล่านี้ต้นทุนของฮาร์ดแวร์จะมีขนาดใหญ่กว่าค่าใช้จ่ายในการพัฒนาดังนั้นคุณควรคาดว่าจะใช้เวลาวิเคราะห์ความต้องการของคุณและทำการพัฒนามากกว่าที่คุณต้องการหากคุณทำเพียงไม่กี่อย่าง

แนวทางแบบ all-in-one เป็นความคิดที่ดีเมื่อต้องทำมัลติทาสกิ้งจำนวนมากหรือดีกว่าที่จะแบ่งกลุ่มและแยกกันหรือไม่?

วิธีการแบบ all-in-one โดยทั่วไปจะมีราคาถูกกว่าตลอดอายุการใช้งานของโครงการทั้งหมดกว่าตัวประมวลผลหลายตัว มันจะต้องใช้เวลาในการพัฒนาและการดีบักมากขึ้นเพื่อให้แน่ใจว่างานต่าง ๆ จะไม่ขัดแย้งกัน แต่การออกแบบซอฟต์แวร์ที่เข้มงวดจะ จำกัด ว่าเกือบเท่าที่มีฮาร์ดแวร์แยกต่างหาก

ฉันจะรู้ได้อย่างไรว่าไมโครคอนโทรลเลอร์ที่ฉันกำลังดูมีพลังในการคำนวณเพียงพอที่จะทำสิ่งที่ฉันต้องการจากรายการงานของฉันได้อย่างไร

คุณจะต้องเข้าใจงานที่คุณต้องการดำเนินการและจำนวนทรัพยากรที่พวกเขาทำ สมมติว่าต่อไปนี้เป็นจริง:

รูทีน BLDC PI ของคุณจะใช้เวลาประมวลผล X รอบ 100 ครั้งต่อวินาทีและแต่ละอันต้องการ RAM ประมาณ 50 ไบต์สำหรับการทำงาน, EEPROM 16 ไบต์สำหรับการปรับจูนและแฟลช 1k สำหรับรหัส พวกเขาแต่ละคนต้องการอุปกรณ์ต่อพ่วง PWM 3 16 บิตในไมโครคอนโทรลเลอร์ คุณอาจต้องระบุความกระวนกระวายใจซึ่งจะมีข้อกำหนดเรื่องเวลาในการตอบโต้การขัดจังหวะโดยเฉพาะ

USB และชุดคำสั่งแบบอนุกรมของคุณจะใช้เวลาของรอบตัวประมวลผล Y ตามความจำเป็น, RAM 2k, EEPROM 64 ไบต์และแฟลช 8k มันจะต้องใช้อุปกรณ์ต่อพ่วง USB และอนุกรม

GUI ของคุณจะใช้พลังประมวลผล Z รอบ 30 ครั้งต่อวินาทีและจะต้องใช้ RAM 2k, EEPROM 128 ไบต์และแฟลช 10k มันจะใช้ 19 I / O สำหรับการสื่อสารกับ LCD, ปุ่ม, ลูกบิด, ฯลฯ

เมื่อคุณเริ่มต้นครั้งแรกอาจเป็นเรื่องยากที่จะเข้าใจว่า X, Y, Z คืออะไรจริงและสิ่งนี้จะเปลี่ยนแปลงเล็กน้อยขึ้นอยู่กับสถาปัตยกรรมของโปรเซสเซอร์ อย่างไรก็ตามคุณควรจะสามารถเข้าใจได้ภายในประมาณการของ ballpark จำนวน ram, eeprom และ flash ที่การออกแบบของคุณต้องการและอุปกรณ์ต่อพ่วงที่คุณต้องการ คุณสามารถเลือกตระกูลโปรเซสเซอร์ที่ตรงกับหน่วยความจำและอุปกรณ์ต่อพ่วงและมีตัวเลือกประสิทธิภาพที่หลากหลายภายในตระกูลนั้น ณ จุดนี้เพื่อการพัฒนาคุณสามารถใช้โปรเซสเซอร์ที่ทรงพลังที่สุดในตระกูล เมื่อคุณออกแบบการใช้งานของคุณคุณสามารถย้ายครอบครัวในแง่ของพลังงานไปยังตัวเลือกต้นทุนที่ต่ำกว่าโดยไม่ต้องเปลี่ยนสภาพแวดล้อมการออกแบบหรือการพัฒนาของคุณ

หลังจากที่คุณออกแบบเหล่านี้เสร็จแล้วคุณจะสามารถประมาณ X, Y และ Z ได้ดีขึ้น คุณจะรู้ว่ากิจวัตร BLDC PI แม้ว่าจะทำงานบ่อยครั้งนั้นค่อนข้างเล็กและต้องใช้รอบน้อยมาก USB และรูทีนแบบอนุกรมต้องใช้รอบจำนวนมาก แต่เกิดขึ้นไม่บ่อยนัก อินเทอร์เฟซผู้ใช้ต้องการรอบสองสามครั้งบ่อยครั้งเพื่อค้นหาการเปลี่ยนแปลง แต่จะต้องใช้รอบจำนวนมากไม่บ่อยนักในการอัปเดตจอแสดงผล


11

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

ฉันจะรันทุกอย่างอื่นในไมโครคอนโทรลเลอร์หลักเช่น PIC24 (PIC32 น่าจะเกินกำลังมากขึ้นอยู่กับงานที่คุณระบุไว้) นอกจากนี้ PIC24E ที่เร็วที่สุดยังสามารถทำงานได้เร็วเท่ากับ PIC32

เมื่อเลือกไมโครคอนโทรลเลอร์ฉันจะประมาณปริมาณแฟลชและแรมที่ฉันต้องการก่อนแล้วดูที่ความยาวของคำและความเร็วโปรเซสเซอร์ สำหรับในภายหลังบ่อยครั้งที่ความต้องการที่ยากที่สุดเพื่อตอบสนองคือการขัดจังหวะที่เร็วที่สุดที่คุณคาดหวัง หากคุณกำลังส่งสัญญาณเสียง 16 KHz และมีการขัดจังหวะทุก 62.5 µs คุณควรมีไมโครคอนโทรลเลอร์ที่มีเวลาในการเรียนการสอนลดลงในระดับนาโนวินาทีเป็นสิบมิฉะนั้นคุณจะไม่สามารถให้บริการและรับสิ่งอื่นได้ ทำงานเสร็จแล้ว


7

มีวิธีกึ่งทางการที่คุณสามารถใช้เพื่อช่วยคุณสร้างคำตอบ ผมขอแนะนำให้อ่านบทที่ 2 ของสีขาว "การออกแบบระบบฝังตัว" ซึ่งส่วนใหญ่ที่มีอยู่ในGoogle หนังสือ

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

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

จากสีขาวสร้างระบบสมองกลบทที่ 2

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


5

ฉันทำงานบนระบบที่ครอบคลุมสิ่งที่คุณกำลังอธิบาย - มอเตอร์, IO, จอแสดงผล, 3x UARTs + SPI + I2C ที่ทำงานบน Coldfire 52259 (ช่วงกลาง 32- บิต ~ 80MHz ไมโคร) และไม่ยากเกินไปแม้ว่าจะได้รับ สถาปัตยกรรมซอฟต์แวร์ที่ถูกต้องมีความสำคัญ - เรามีหลายสิ่งที่ทำงานบนฮาร์ดแวร์และการขัดจังหวะ (สิ่งที่ฮาร์ดแวร์สามารถจัดการได้ด้วยตัวเองเราทำงานในฮาร์ดแวร์และบริการที่มีการขัดจังหวะ) ออกจากห่วงหลัก () เพื่อทำความสะอาดทั้งหมด

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

ในตอนท้ายสูงวันนี้ดูเหมือนว่าจะมีอัตรากำไรเล็ก ๆ น้อย ๆ ระหว่าง MCU ที่ซับซ้อนและมีประสิทธิภาพพอที่จะจริงๆประโยชน์จาก RTOS และบางสิ่งบางอย่าง (SoC) ที่เพิ่งวิ่งฝังตัวลินุกซ์

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


3

ทุกคนตอบคนอื่นดีกว่า แต่ฉันมีนิดหน่อยที่จะเพิ่มซึ่งอาจเป็นประโยชน์ อาจเป็นเครื่องหมายออกไปเล็กน้อยและฉันชอบที่จะเพิ่มเป็นความคิดเห็น แต่มีกฎ 50 ข้อ: (

คำตอบสั้น ๆ มันขึ้นอยู่ดูข้างต้น แต่ทำไมไม่คิดเกี่ยวกับประโยชน์ของโปรเซสเซอร์ด้วย

1((1p)+ps)

แน่นอนราคาความสะดวกในการใช้งาน ฯลฯ มีความสำคัญและสำคัญกว่าที่จะต้องพิจารณาด้วย


1

คำตอบนั้นขึ้นอยู่กับรายละเอียดการใช้งาน งานบางอย่างง่ายกว่าในการนำไปใช้ในวิธีที่สะอาดและมีประสิทธิภาพบนไมโครคอนโทรลเลอร์ที่แยกต่างหาก การใช้พลังงานอาจพิจารณาด้วย - โดยทั่วไปการพูดถึงการจัดการไมโครหนึ่งงานหลายงานจะต้องใช้พลังงานน้อยกว่าไมโครการจัดการงานเดียว


1

"แรงม้า" เป็นรองว่าคุณสามารถปฏิบัติตามข้อ จำกัด เรียลไทม์ของคุณหรือไม่

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

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

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

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