จัดการโครงการเร่งรัดเชิงคำนวณด้วย ShieldBuddy

By Clive "Max" Maxfield

Contributed By DigiKey's North American Editors

นักทำอดิเรก ผู้ผลิต และนัก DIY หลายคนใช้Arduino บอร์ดพัฒนาไมโครคอมพิวเตอร์เพื่อตรวจสอบและควบคุมโครงการของพวกเขา ดังนั้น เช่นเดียวกัน วิศวกรมืออาชีพจำนวนมากขึ้นซึ่งอาจใช้บอร์ดเหล่านี้เป็นแพลตฟอร์มการประเมินและการสร้างต้นแบบเพื่อเร่งการพัฒนาและลดต้นทุนที่เกี่ยวข้องกับการประเมินวงจรรวม (ICs) เซ็นเซอร์และอุปกรณ์ต่อพ่วง ตามที่กล่าวไว้ในใช้ Arduino BOB เพื่อประเมินเซ็นเซอร์และอุปกรณ์ต่อพ่วงอย่างรวดเร็ว วิศวกรเหล่านี้อาจทำงานในทีมขนาดเล็กที่มีข้อจำกัดด้านเวลาสู่ตลาด (TTM) ที่เข้มงวดมากขึ้น ด้วยเหตุนี้ พวกเขาจึงต้องยอมรับโดเมนและงานด้านวิศวกรรมที่หลากหลาย ในขณะเดียวกันก็หาวิธีที่จะเร่งและลดต้นทุนของการประเมินส่วนประกอบ

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

บทความนี้จะอธิบายตัวเลือกแพลตฟอร์มการประมวลผล Arduino ต่างๆ และเหตุใดความสามารถของ FPU จึงมีความสำคัญสำหรับแอปพลิเคชันจำนวนมาก จากนั้นจะแนะนำ ShieldBuddy ซึ่งเป็นบอร์ดที่รักษารอยเท้าทางกายภาพที่คล้ายคลึงกันกับบอร์ด Arduino แต่มีแกนประมวลผล 32 บิตอิสระสามคอร์ซึ่งแต่ละตัวทำงานที่ 200 MHz และแต่ละตัวมี FPU ของตัวเอง บทความนี้จะอธิบายรูปแบบการเขียนโปรแกรมและแสดงให้เห็นว่าสภาพแวดล้อมการเขียนโปรแกรมที่ใช้ Eclipse และการสนับสนุนสภาพแวดล้อมการพัฒนาแบบรวม (IDE) ของ Arduino ช่วยให้ DIYers และนักออกแบบสามารถเริ่มต้นใช้งานได้อย่างรวดเร็ว

Arduino สำหรับผู้มาใหม่และมืออาชีพเหมือนกัน

ผู้มาใหม่สู่จักรวาล Arduino มักจะเริ่มต้นด้วยArduino Uno Rev3 (รูปที่ 1) ซึ่งยึดตาม 8-bitATmega328P ไมโครคอนโทรลเลอร์ทำงานที่ 16 เมกะเฮิรตซ์ (MHz) บอร์ดนี้มีหน่วยความจำแฟลช (โปรแกรม) เพียง 32 กิโลไบต์ (Kbytes) SRAM 2 Kbytes พินอินพุต/เอาต์พุตดิจิทัล (I/O) 14 พิน และพินอินพุตแบบอะนาล็อก 6 พิน พินดิจิทัล 6 ตัวสามารถให้เอาต์พุตการปรับความกว้างพัลส์ (PWM) และพินอะนาล็อกยังสามารถใช้เป็นพิน I/O ดิจิทัลได้ หากจำเป็น

รูปภาพของบอร์ดพัฒนา Arduino Uno Rev3 รูปที่ 1: บอร์ดพัฒนา Arduino Uno Rev3 ใช้ไมโครคอนโทรลเลอร์ ATmega328P 8 บิตที่ทำงานที่ 16 MHz (ที่มาของภาพ: Arduino.cc).

รอยเท้าของส่วนหัวของ Arduino Uno Rev3 ที่มีหมุด I/O ดิจิทัล 14 ตัว หมุดอินพุตแบบอะนาล็อก 6 ตัว และหมุดกำลัง กราวด์ และหมุดอ้างอิงต่างๆ เป็นพื้นฐานสำหรับระบบนิเวศขนาดใหญ่ของบอร์ดลูกที่เรียกว่าโล่

ผู้ใช้ Uno Rev3 หลายคนได้พัฒนาไปสู่Arduino Mega 2560 Rev3 บอร์ด (รูปที่ 2) ซึ่งอิงจาก 8-bitATmega2560 ไมโครคอนโทรลเลอร์ทำงานที่ 16 MHz บอร์ดนี้มีหน่วยความจำแฟลช 256 Kbytes และ SRAM 8 Kbytes รอยเท้าของส่วนหัวหมายความว่าสามารถรองรับโล่เดียวกันกับ Uno อย่างไรก็ตาม ส่วนหัวเพิ่มเติมช่วยให้พอดีกับพิน I/O ดิจิทัล 54 พินและพินอินพุตแบบอะนาล็อก 16 พิน ในกรณีนี้ พินดิจิทัล 15 พินสามารถให้เอาต์พุต PWM และ—อีกครั้ง—พินอะนาล็อกยังสามารถใช้เป็นพิน I/O ดิจิทัลได้ หากจำเป็น

ภาพของบอร์ดพัฒนา Arduino Mega 2560 Rev3 รูปที่ 2: บอร์ดพัฒนา Arduino Mega 2560 Rev3 ใช้ไมโครคอนโทรลเลอร์ 8 บิต ATmega2560 ที่ทำงานที่ 16 MHz รอยเท้าของส่วนหัวหมายความว่าสามารถรองรับโล่เช่นเดียวกับ Arduino Uno แต่ก็มีส่วนหัวเพิ่มเติมซึ่งมีพิน I/O ดิจิตอลทั้งหมด 54 พินและพินอินพุตแบบอะนาล็อก 16 พิน (ที่มาของภาพ: Arduino)

นอกเหนือจากข้อ จำกัด ที่กำหนดโดยเส้นทางข้อมูล 8 บิตและนาฬิกา 16 MHz แล้วทั้ง Arduino Uno และไมโครคอนโทรลเลอร์ Arduino Mega ไม่มี FPU ซึ่งหมายความว่าการคำนวณใด ๆ ที่เกี่ยวข้องกับค่าทศนิยมทำให้โปรเซสเซอร์เหล่านี้ช้าลงอย่างมาก

สำหรับผู้ใช้ที่ต้องการพลังการประมวลผลที่มากขึ้น ขั้นตอนต่อไปคือArduino Due (รูปที่ 3) ซึ่งมีรอยเท้าทางกายภาพคล้ายกับ Arduino Mega แต่ใช้ 32-bitเทคโนโลยี Atmel/ไมโครชิปSAM3X8Eอาร์ม® โปรเซสเซอร์ Cortex®-M3 ทำงานที่ 84 MHz บอร์ดนี้มีหน่วยความจำแฟลช 512 Kbytes, SRAM 96 Kbytes, พิน I/O ดิจิตอล 54 พิน, อินพุตอนาล็อก 12 พิน และพินเอาต์พุตแอนะล็อก 2 พิน ซึ่งขับเคลื่อนด้วยตัวแปลงดิจิตัลเป็นแอนะล็อก (DAC) ในกรณีนี้ มีเพียง 12 พินดิจิตอลเท่านั้นที่สามารถให้เอาต์พุต PWM และ—อีกครั้ง—พินอะนาล็อกยังสามารถใช้เป็นพิน I/O ดิจิตอลได้หากต้องการ น่าเสียดาย เช่นเดียวกับ Arduino Uno และ Mega โปรเซสเซอร์ของ Arduino Due ไม่มี FPU

รูปภาพของบอร์ดพัฒนา Arduino Due รูปที่ 3: บอร์ดพัฒนา Arduino Due ใช้โปรเซสเซอร์ Atmel SAM3X8E Arm Cortex-M3 แบบ 32 บิตที่ทำงานที่ 84 MHz รอยเท้าของส่วนหัวเหมือนกับที่หรือ Arduino Mega (ที่มาของภาพ: Arduino.cc)

ผู้ใช้จำนวนมาก—ทั้งมือสมัครเล่นและมืออาชีพ—เพลิดเพลินไปกับจำนวนพินที่สูงของบอร์ดพัฒนา Arduino Mega และ Arduino Due แต่แม้กระทั่งโปรเซสเซอร์ 32 บิตของ Arduino Due ที่ทำงานที่ 84 MHz อาจไม่เพียงพอสำหรับงานที่ต้องคำนวณอย่างหนัก ในทำนองเดียวกัน หน่วยความจำแฟลชขนาด 512 Kbytes ของ Due และ SRAM 96 Kbytes อาจไม่เพียงพอสำหรับโปรแกรมที่สำคัญกว่าซึ่งทำงานกับข้อมูลจำนวนมาก

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

FPU คืออะไรและเหตุใดจึงจำเป็น

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

นี่เป็นปัญหาสำหรับวิศวกรและนักวิทยาศาสตร์ เนื่องจากพวกเขามักจะต้องใช้ค่าขนาดใหญ่และค่าน้อยมากในการคำนวณเดียวกัน ตัวอย่างเช่น นักฟิสิกส์อาจมีการคำนวณที่ใช้ค่าตัวเลขของความเร็วแสง (300,000,000) และค่าคงตัวโน้มถ่วงของนิวตัน (0.00000000006674) ในทำนองเดียวกัน วิศวกรต้องการค่าที่มีช่วงไดนามิกขนาดใหญ่สำหรับงานต่างๆ เช่น การประมวลผลสัญญาณดิจิทัล (DSP) และสำหรับการใช้งานในแอปพลิเคชันปัญญาประดิษฐ์ (AI) และการเรียนรู้ของเครื่อง (ML)

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

หากโปรเซสเซอร์จำเป็นต้องทำการคำนวณจุดลอยตัวโดยใช้ฮาร์ดแวร์จุดคงที่มาตรฐาน ผลลัพธ์จะส่งผลต่อประสิทธิภาพของโปรเซสเซอร์อย่างมาก การแก้ปัญหาคือการติดตั้งโปรเซสเซอร์ด้วย FPU พิเศษ การทำเช่นนี้ทำให้สามารถดำเนินการตามจุดลอยตัวที่ซับซ้อนได้โดยใช้รอบสัญญาณนาฬิกาน้อยมาก

นี่คือจุดที่ ShieldBuddy เข้ามาเล่น

ShieldBuddy นำ FPU และประสิทธิภาพสูงมาสู่ระบบนิเวศของ Arduino

ผู้เล่นที่ค่อนข้างใหม่ในพื้นที่ที่เข้ากันได้กับ Arduinoอินฟิเนียน เทคโนโลยีส์KITAURIXTC275ARDSBTOBO1 หรือ ShieldBuddy (รูปที่ 4) เป็นบอร์ดประเมินผลแบบฝังสำหรับ Infineon'sTC275T64F200WDCKXUMA1 TC275 AURIX TC2xx TriCore ไมโครคอนโทรลเลอร์ 32 บิต

อิมเมจของ ShieldBuddy TC275 ติดตั้งโปรเซสเซอร์มัลติคอร์ Infineon TC275 32 บิต รูปที่ 4: ShieldBuddy TC275 ติดตั้งโปรเซสเซอร์มัลติคอร์ Infineon TC275 32 บิตบนบอร์ดที่มีรอยเท้าเดียวกับ Arduino Mega และ Arduino Due ทำให้เข้ากันได้กับแอพพลิเคชั่นชิลด์ที่มีอยู่มากมาย(ที่มาของภาพ: Hitex.com)

การรักษารอยเท้าทางกายภาพที่คล้ายคลึงกันกับ Arduino Mega และ Arduino Due ShieldBuddy เข้ากันได้กับแอพพลิเคชั่นชิลด์หลายตัว แต่สามารถแยกแยะได้โดยใช้ TC275 ที่มีคอร์ 32 บิตอิสระสามคอร์ซึ่งแต่ละตัวทำงานที่ 200 MHz และแต่ละตัว มี FPU เป็นของตัวเอง นอกจากนี้ ShieldBuddy มีหน่วยความจำแฟลช 4 เมกะไบต์ (Mbytes) (8x ของ Arduino Due และ 16x ของ Arduino Mega) และ RAM 500 Kbytes (5x ของ Arduino Due และ 62x ของ Arduino Mega)

วิธีหนึ่งในการดูสิ่งนี้คือแกนหลักของ Arduino Mega จัดการคำสั่ง 8 บิตประมาณสิบหกคำสั่งต่อไมโครวินาที (µs) โดยการเปรียบเทียบ คอร์ของ TC275 แต่ละคอร์มีรอบเวลา 5 นาโนวินาที (ns) ซึ่งหมายความว่าโดยทั่วไปแต่ละคอร์สามารถดำเนินการคำสั่ง/µs แบบ 32 บิตได้ประมาณ 150 ถึง 200 บิต เนื่องจากคอร์โปรเซสเซอร์ของ ShieldBuddy แต่ละคอร์มี FPU ของตัวเอง บอร์ดจึงสามารถคำนวณจุดลอยตัวได้ โดยที่ประสิทธิภาพจะลดลงเล็กน้อย หากมี

การพัฒนาด้วย ShieldBuddy

เมื่อทำงานกับ ShieldBuddy นักพัฒนาซอฟต์แวร์มืออาชีพอาจต้องการใช้ Eclipse IDE ในขณะที่มือสมัครเล่นและผู้ผลิตอาจต้องการใช้ Arduino IDE ที่คุ้นเคย รองรับทั้งสองตัวเลือก

ผู้ใช้ Arduino จะคุ้นเคยกับข้อเท็จจริงที่ว่าการสเก็ตช์ (โปรแกรม) แต่ละรายการต้องมีฟังก์ชันมาตรฐานสองอย่าง: setup() ซึ่งเรียกใช้ครั้งเดียว และลูป () ซึ่งเรียกใช้ซ้ำแล้วซ้ำอีก ผู้ใช้ยังสามารถสร้างฟังก์ชันของตนเองได้

คอร์สามคอร์ของ ShieldBuddy เรียกว่า Core 0, Core 1 และ Core 2 ในกรณีของ Arduino IDE สเก็ตช์ที่มีอยู่ส่วนใหญ่สามารถคอมไพล์เพื่อใช้บน ShieldBuddy โดยไม่ต้องดัดแปลง โดยค่าเริ่มต้น ฟังก์ชัน setup() และ loop() พร้อมกับฟังก์ชันที่ผู้ใช้สร้างขึ้นที่เรียกใช้ จะถูกคอมไพล์ให้ทำงานบน Core 0

เมื่อสร้างโปรแกรมใหม่ ผู้ใช้สามารถบรรลุผลเช่นเดียวกันโดยตั้งชื่อฟังก์ชันเหล่านี้ setup0() และ loop0() ผู้ใช้ยังสามารถสร้างฟังก์ชัน setup1() และ loop1() ซึ่งจะถูกคอมไพล์ให้ทำงานบน Core 1 โดยอัตโนมัติพร้อมกับฟังก์ชันที่ผู้ใช้สร้างขึ้น ในทำนองเดียวกัน ฟังก์ชัน setup2() และ loop2() ร่วมกับฟังก์ชันใดๆ ที่พวกเขาเรียก จะถูกคอมไพล์ให้ทำงานบน Core 2 โดยอัตโนมัติ

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

สรุป

แนวคิดโอเพ่นซอร์สของ Arduino ได้รับการพิสูจน์แล้วว่าประสบความสำเร็จอย่างมาก และระบบนิเวศของฮาร์ดแวร์และซอฟต์แวร์ที่ตามมาได้เติบโตขึ้นเพื่อรวมเกราะป้องกันหลายร้อยตัวและไลบรารีและแอพพลิเคชั่นนับพัน

แม้ว่าบอร์ดพัฒนา Arduino รุ่นแรกๆ เช่น 8 บิต, 16 MHz Arduino Uno และ Arduino Mega ค่อนข้างจำกัด แต่การใช้งานล่าสุดเช่น Arduino Due รุ่น 32 บิต, 84 MHz นั้นมีประสิทธิภาพมากกว่าอย่างเห็นได้ชัด ผู้ใช้จำนวนมากต้องการพื้นที่โปรแกรม (แฟลช) พื้นที่ข้อมูล (SRAM) มากขึ้น และพลังการประมวลผลที่มากกว่า Arduino ทั่วไป

ด้วยหน่วยความจำแฟลช 4 เมกะไบต์ SRAM ขนาด 500 กิโลไบต์ และคอร์โปรเซสเซอร์ 32 บิตอิสระสามคอร์ที่ทำงานที่ 200 เมกะเฮิรตซ์ ซึ่งแต่ละตัวมี FPU ของตัวเอง ShieldBuddy นำแนวคิด Arduino ไปสู่ระดับใหม่ทั้งหมด ทำให้เป็นที่สนใจของเหล่า DIYers สุดขั้ว และวิศวกรมืออาชีพ

การอ่านที่แนะนำ:

  1. การสอนอุปกรณ์อิเล็กทรอนิกส์สำหรับผู้เริ่มต้นอย่างแท้จริง
  2. ใช้ FPGA อย่างรวดเร็วและง่ายดายด้วย Arduino MKR Vidor 4000
  3. เข้าร่วม Maker World ด้วย Arduino Starter Kit ที่ใช้งานง่าย
DigiKey logo

Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of DigiKey or official policies of DigiKey.

About this author

Image of Max Maxfield

Clive "Max" Maxfield

Clive "Max" Maxfield สำเร็จการศึกษาระดับปริญญาตรีสาขาวิศวกรรมควบคุมในปี 1980 จากมหาวิทยาลัย Sheffield Hallam ประเทศอังกฤษและเริ่มอาชีพของเขาในฐานะผู้ออกแบบหน่วยประมวลผลกลาง (CPUs) สำหรับคอมพิวเตอร์เมนเฟรม ในช่วงหลายปีที่ผ่านมา Max ได้ออกแบบทุกอย่างตั้งแต่ชิปซิลิกอนไปจนถึงแผงวงจรและตั้งแต่เครื่องขยายคลื่นสมองไปจนถึง Steampunk Prognostication Engines (ไม่ต้องถาม) นอกจากนี้เขายังอยู่ในระดับแนวหน้าของ Electronic Design Automation (EDA) มากว่า 30 ปี

Max เป็นผู้เขียนและ/หรือผู้ร่วมเขียนหนังสือหลายเล่มรวมถึง Designus Maximus Unleashed (ถูกแบนใน Alabama) Bebop to the Boolean Boogie (An Unconventional Guide to Electronics), EDA: Where Electronics Begins, FPGAs: การเข้าถึงได้ทันที และคอมพิวเตอร์คำนวณคณิตศาสตร์อย่างไร ตรวจสอบบล็อกของเขา “Max’s Cool Beans”

About this publisher

DigiKey's North American Editors