แสดงบทความที่มีป้ายกำกับ KiCad แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ KiCad แสดงบทความทั้งหมด

วันพุธที่ 30 ธันวาคม พ.ศ. 2558

วิทยุ FM จาก AR1010 (PCB)

จากบันทึกก่อนหน้านี้เรื่องวงจรวิทยุ FM จาก AR1010 กับ Barebone Arduino ก็ทิ้งท้ายไว้ว่าจะไม่ทำโปรเจ็คอื่นถ้าโปรเจ็คนี้ไม่เสร็จ

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

ช่วงนี้ปีใหม่ เป็นช่วงเดียวที่มีเวลาส่วนตัวจริง ๆ ก็เลยขุดงานขึ้นมาทำให้เสร็จซะ สิ่งที่ทำในขั้นตอนนี้คือการออกแบบแผ่นวงจรพิมพ์ (PCB) ครับ งานธรรมดาพื้น ๆ สำหรับหลาย ๆ คน แต่เป็นงานที่ยังสนุกและท้าทายเสมอสำหรับผม เครื่องมือที่ใช้ก็คือ KiCad เจ้าเก่า

สิ่งที่ได้เรียนรู้ในรอบนี้ก็คือ

  • ก่อนออกแบบก็ไปอ่านคู่มือการออกแบบ PCB โดยสรุปมาก่อน ได้ความรู้มาพอสมควร เช่นเรื่องการแยกกิ่งของไฟเลี้ยงและกราวด์ของวงจรส่วนแอนาลอกออกจากส่วนดิจิตัล การใช้กราวด์เพลน ปัญหาเรื่องสัญญาณรบกวนต่าง ๆ
  • การใช้ via และ upper copper แทนการใส่ Link (เส้นลวด แต่ผมไม่รู้ว่าในวงการเขาเรียกว่าอะไร) แต่ก่อนทำไม่เป็น ตอนนี้ทำเสร็จแล้วยังมานึกว่า ไปใช้วิธีเพิ่ม R 0 โอห์มแล้วอัพเดต Netlist จะดีกว่าไหม...ไม่รู้เหมือนกัน เอาไว้ลองรอบหน้า
  • การอัพเดต Netlist ซึ่งมีประโยชน์มากเวลาเราต่อวงจรกับขั้วสายไฟซึ่งอันที่จริงเรามีอิสระที่จะกำหนดให้ขั้วไหนไปต่อกับ Net ไหนก็ได้ วิธีการก็ง่าย ๆ คือไปเขียนลายวงจร (Schematic) ใหม่ สร้าง Netlist ใหม่ แล้วก็ Reload Netlist ใหม่ก็เสร็จ ที่ต้องระวังก็คือตอนเลือก Option ก็เลือกให้สอดคล้องกับสิ่งที่เราทำ เช่นมีอุปกรณ์ใหม่ไหม ลบอุปกรณ์เก่าไปหรือเปล่า จะลบ Track และ/หรือ Pad ที่ไม่ใช้แล้วไหม ฯลฯ การอัพเดตนี่ก็ช่วยให้เดินลายทองแดง (Routing) ง่ายขึ้นไม่น้อย
  • การเปลี่ยนความกว้างของ Track คือเดิมผมก็คิดว่าจะกัดแผ่นวงจรเอง ถ้ากัดเอง Track ก็ต้องกว้างหน่อย ผมก็เลยตั้งค่าไว้ที่ 0.8 mm (ดูเหมือนเล็กแต่ใหญ่มาก เดินลายทองแดงยาก) แต่ดูศักยภาพและเวลาแล้วคงไม่เวิร์ก ก็เลยพิจารณาการสั่งทำ PCB ต้นแบบ ซึ่งบริษัทที่รับทำรองรับ Track เล็กสุดได้ถึง 10 mil (1 mil คือ 1/1000 นิ้ว) การเปลี่ยนนี้ผมก็อาจจะมักง่ายไปหน่อย คือผมไปเปลี่ยนที่ Global DRC เลย ไม่ต้องมี Track Width หลายค่า ใช้ค่าเดียวนี่แหละ
  • การทำ Ground Plane โดยใช้เครื่องมือ Zone แต่ก่อนเคยทำมาแล้ว แล้วก็ร้างไปจนลืม ต้องมาหาวิธีทำใหม่อีกรอบ
ผลงานในขั้นตอนนี้ก็เอามาดูกันหน่อย
เนื่องจากตั้งใจจะทำแผ่นวงจรหน้าเดียว ตอนทำวงจรส่วนดิจิตัลโดยเฉพาะส่วนของ 7-Segment LED เลยรู้สึกว่ายากเป็นพิเศษ

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

ขั้นต่อไปก็คือสั่งทำ PCB และเอามาต่อวงจรลงแผ่นวงจรพิมพ์ให้มันเสร็จเสียที

วันเสาร์ที่ 14 กุมภาพันธ์ พ.ศ. 2558

วิทยุ FM จาก AR1010 (โปรโตบอร์ด)

ผมได้โมดูลเครื่องรับวิทยุ FM AR1010 มานานแล้ว (ไม่น้อยกว่า 3 - 5 ปี) จำไม่ได้ด้วยซ้ำว่าซื้อจากไหน แต่ก็ไม่มีโอกาสเอามาต่อวงจรให้เสร็จสักที ที่สำคัญคือโมดูลนี้หา Datasheet ยาก แม้แต่จากเว็บของ SparkFun เองก็ระบุว่าต้องติดต่อไปจึงจะให้ จนเดี๋ยวนี้โมดูลนี้เขาเลิกขายกันไปแล้ว คิดว่าสาเหตุหลัก ๆ ที่ทำให้ไม่ได้ลงมือทำซักทีก็คงจะเป็นเรื่องเวลา
ตอนนี้เวลามีแล้ว รื้อ ๆ ค้น ๆ ในกล่องเจอเจ้าโมดูลนี้ก็เลยคิดว่าจะลองทำดู ไหน ๆ ก็อุตส่าห์ซื้อมาแล้ว แม้ว่าการเอาไปทำโปรเจ็คแล้วคงไม่มีมูลค่าเพิ่มอะไร เพราะวิทยุ FM เดี๋ยวนี้ถูกมาก แต่ถ้าทิ้งไว้ก็จะเสียของไปเปล่า ๆ อย่างน้อยถ้าออกแบบเองอยากได้อะไรก็คงจะทำได้ (ล่ะมั้ง)

สุดท้ายก็เลยทำแบบง่าย ๆ คือให้มีคุณสมบัติดังนี้
  • แสดงตัวเลขความถี่ของสถานีทาง 7-Segment 4 ตัว
  • มีปุ่มควบคุม 2 ปุ่มคือเลื่อนสถานีขึ้นและลง โดยข้อจำกัดของโมดูลเลยทำให้เลื่อนได้ทีละ 0.1 MHz เรื่องนี้มีข้อเสียคือจะจูนหาสถานีเช่น 92.25 MHz ไม่ได้
  • เจ้าปุ่ม 2 ปุ่มนั้นถ้ากดค้างเกิน 0.5 วินาทีจะกลายเป็นการค้นหาสถานีอัตโนมัติในทิศทางเลื่อนขึ้นหรือเลื่อนลงแล้วแต่ว่าปุ่มที่กดเป็นปุ่มไหน
  • ให้สัญญาณเสียงสเตริโอปรับระดับเสียงได้ด้วยโวลุ่มตัวเดียว
เนื่องจากอยากทำให้เสร็จเร็ว ๆ เลยหาไลบรารีจากคนอื่นมาใช้ (สารภาพตรง ๆ ว่าถ้าต้องเขียนเองคงไม่เสร็จ) ไลบรารีที่ใช้มีดังนี้
  • ควบคุมการแสดงผล LED 7-Segments ด้วย SevSeg โดย Dean Reading
  • ควบคุมการทำงานของ AR1010 ด้วย AR1010lib โดย Adam Jansch
  • ตรวจการกดปุ่มว่าเป็นการกดค้างหรือกดปล่อย ได้ไอเดียจาก Arduino Forum
บล๊อกไดอะแกรมการทำงานก็เรียบ ๆ ดังรูป
จากคำอธิบายในไลบรารีที่ใช้ประกอบกับแนวทางการทำงาน ก็ต่อวงจรบนโปรโตบอร์ด ใช้เวลาช่วงเย็นหลังเลิกงานง่วนอยู่สัก 2 - 3 วันก็เสร็จ เสาอากาศไม่ได้ต่อไว้ยาวเลยรับได้แค่บางสถานีเท่านั้น แต่เสียงดีใช้ได้ทีเดียว


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

วันอาทิตย์ที่ 9 พฤษภาคม พ.ศ. 2553

การออกแบบวงจรโดยใช้โปรแกรม Opensource ตอนที่ 2/3

หลังจากที่ได้ทดลอง KiCad ทำงานง่าย ๆ แล้ว ก็ถึงเวลาทดลองใช้ KiCad แบบจริงจัง คือมีชิ้นงานเป็นผลลัพธ์สุดท้ายได้ ความตั้งใจก็คือใช้ Opensouce โปรแกรม ในการออกแบบตั้งแต่ ลายวงจร (Schematic) จำลองวงจร (Simulation) ออกแบบแผ่นวงจรพิมพ์ และประกอบวงจรจริง ๆ โดยตั้งใจว่าจะแบ่งทำเป็น 3 ตอนคือ
ตอนที่ 2 ออกแบบแผ่นวงจรพิมพ์โดยใช้ KiCad
จากลายวงจรและการจำลองวงจรในตอนที่ 1 ในการทำงานจริงเราควรต่อวงจรลงบนโปรโตบอร์ดเพื่อให้มั่นใจเสียก่อนว่าวงจรทำงานได้จริง แต่เนื่องจากวงจรที่กำลังออกแบบอยู่นี้เป็นวงจรแบบง่าย จึงละไว้

เมื่อจะออกแบบแผ่นวงจรพิมพ์ ก็มี 2 - 3 ประเด็นที่ทำให้ต้องไปปรับปรุงแก้ไขวงจรในตอนที่ 1 เสียใหม่ คือ
  • แม้ว่าในอุดมคติ วงจรนี้จะมีศักยภาพที่จะขับกำลังได้ถึง 1.5 วัตต์ ที่โหลด 8 โอห์ม แต่เมื่อทดสอบโดยการจำลองวงจรแล้ว พบว่ากำลังสูงสุดที่จ่ายได้คือ 0.25 วัตต์ ไม่ใช่ 0.5 วัตต์ ซึ่งถือว่าน้อย ปัญหาอาจเกิดจากการตั้งจุดไบแอสของทรานซิสเตอร์แต่ละตัว หรืออาจเกิดจากข้อจำกัดของตัวทรานซิสเตอร์ที่เลือกใช้ อาจปรับปรุงได้ในอนาคต
  • วงจรในตอนที่ 1 ไม่มีแหล่งจ่ายไฟ ก็เติมส่วนของแหล่งจ่ายไฟตรงแบบง่าย ๆ โดยใช้ไอซีเรกกูเลเตอร์เบอร์ยอดนิยม 7812 เนื่องจากกำลังสูงสุดที่จะขับได้ที่โหลด 8 โอหม์ คือ 0.25 วัตต์ หมายความว่ากระแสสูงสุดคือ 0.25 แอมแปร์ ไอซีขนาด 1 แอมแปร์ก็เกินพอ
  • วงจรในตอนที่ 1 มีช่องสัญญาณเดียว หากตั้งใจจะใช้กับเครื่องเล่น MP3 ก็ควรทำให้พร้อมสำหรับสเตอริโอ จึงได้เพิ่มวงจรลงไปอีกหนึ่งช่องสัญญาณซึ่งเหมือนกันทุกประการ
  • เมื่อไปซื้อวัสดุ พบว่าบางรายการไม่มีขาย จึงปรับแก้รายการวัสดุเล็กน้อย ทดสอบจำลองวงจรแล้วไม่มีปัญหา
แก้ไขแล้วได้ลายวงจรดังรูป
ก่อนจะสร้าง Netlist เพื่อนำไปทำแผ่นวงจรพิมพ์ จะต้องทำการ "เรียงเบอร์" (Annotate Schematic) เสียก่อน โปรแกรมจะทำการใส่เลขประจำตัวเช่น C1 C2 ให้กับอุปกรณ์แต่ละตัวโดยอัตโนมัติ เมื่อเรียงเบอร์เสร็จแล้ว ก็สามารถสร้าง Netlist ได้

Netlist ที่สร้างขึ้นจะเป็นแฟ้มข้อความ ระบุการเชื่อมต่อระหว่างโนดต่าง ๆ ในวงจร ขั้นตอนต่อไปคือการระบุ Footprint ของวัสดุแต่ละตัว ตรงนี้ KiCad ระบุว่าเป็นจุดที่แตกต่างจากโปรแกรม EDA อื่น ๆ ตรงที่ วัสดุหนึ่งรายการในลายวงจร เช่น C1 เราสามารถเลือก Footprint ให้ C1 ได้อย่างอิสระ (ข้อดีคือเราไม่ต้องสร้าง Symbol ใหม่ เมื่อมี Footprint ใหม่ ข้อเสียคือเราอาจเลือกผิด) การผูกวัสดุเข้ากับ Footprint ให้ใช้โปรแกรม Cvpcb ซึ่งเรียกใช้ได้จากแถบเครื่องมือของ EESchema หรือจาก Project Manager ของ KiCad ก็ได้
จากรูปหลักแรกคือลำดับที่ หลักที่ 2 คือชื่ออุปกรณ์ หลักที่ 3 คือค่าของอุปกรณ์ และหลักที่ 4 คือ Footprint ของอุปกรณ์ ซึ่งเราจะต้องเลือกเองให้ถูกต้องตรงกับวัสดุที่เรามี

เมื่อผูกวัสดุเข้ากับ Footprint ได้แล้ว จึงเรียก pcbnew ขึ้นมา โดยจะเรียกจากแถบเครื่องมือของ EESchema หรือจาก Project Manager ของ KiCad ก็ได้เช่นเดียวกัน น่าเสียดายว่าตอนที่ดำเนินการออกแบบแผ่นวงจรพิมพ์นั้นไม่ได้เก็บรูปต่าง ๆ ไว้ จึงจะไม่เขียนละเอียด

ข้อสังเกตสำคัญที่พบตอนที่ออกแบบก็คือ ค่าพารามิเตอร์ของลายเส้นของลายวงจรหรือแทร็ค (Track) จะไม่อยู่ในส่วนของ Preferences แต่จะอยู่ในส่วนของ Design Rule กว่าจะหาเจอก็งงไปนานเหมือนกัน การตั้งค่าความกว้างของแทร็ค และ Design Rule อื่น ๆ สามารถตั้งได้เองทั้งหมด ซึ่งน่าจะเป็นปัญหาสำหรับมือใหม่ หรือมือสมัครเล่น (เช่นผมเอง) เนื่องจากไม่ทราบเกณฑ์ต่าง ๆ ในการสร้างแผ่นวงจรพิมพ์ แต่ถ้าเราจะจ้างบริษัทให้กัดแผ่นวงจรพิมพ์ให้เรา ผมว่าบริษัทอาจมีเกณฑ์ Design Rule ที่เราขอทราบข้อมูลได้

วงจรเล็กนิดเดียว พอรู้วิธีทำก็สามารถทำเสร็จได้ภายในเวลา 2 คืน หน้าตาเป็นดังรูป
น่าเสียดายว่าไม่สามารถแสดงรูป 3 มิติของแผ่นวงจรพิมพ์นี้ได้ เข้าใจว่าเป็น Bug ของ KiCad เอง แต่ว่าไม่รู้ว่าจะรายงาน Bug อย่างไร เนื่องจากหน้าจอมันจะมืดไปเฉย ๆ ไม่มีข้อมูล เลยไม่แน่ใจว่าเป็น Bug ของ KiCad หรือของ Mesa หรือว่าของ X ไม่งั้นคงมีภาพ 3 มิติสวย ๆ มาอวดกัน


หลังจากอัพเกรดและอัพเดต sid ล่าสุดพบว่ามีการอัพเกรด X หลายโมดูล เลยทดลองสร้างภาพสามมิติของ KiCad ดูอีกครั้งปรากฏว่าไม่มืดแล้วครับ แล้วก็ได้ภาพมาด้วย เลยขอเอามาอวดกันสักหน่อย
ตอนนี้กัดปริ้นได้แล้วครับ แต่ยังเจาะไม่ครบเลยยังไม่ได้ลองประกอบดู หากประกอบเสร็จก็จะเอามาลง Blog เหมือนเคย อันที่จริง วงจรแค่นี้มันก็ถือว่าจิ๊บจ๊อยมากเมื่อเทียบกับงานของอีกหลาย ๆ ท่าน แต่ก็อยากเอามาลงไว้ในฐานะที่เป็นวงจรที่ (ตั้งใจจะ) ใช้ KiCad ในการสร้างจนใช้งานได้จริงเป็นชิ้นแรก หากผลงานออกมาดีจะเอาไว้ใช้ช่วยสอนในวิชาอิเล็กทรอนิกส์ด้วยเสียเลย

วันอาทิตย์ที่ 25 เมษายน พ.ศ. 2553

การออกแบบวงจรโดยใช้โปรแกรม Opensource ตอนที่ 1/3

หลังจากที่ได้ทดลอง KiCad ทำงานง่าย ๆ แล้ว ก็ถึงเวลาทดลองใช้ KiCad แบบจริงจัง คือมีชิ้นงานเป็นผลลัพธ์สุดท้ายได้ ความตั้งใจก็คือใช้ Opensouce โปรแกรม ในการออกแบบตั้งแต่ ลายวงจร (Schematic) จำลองวงจร (Simulation) ออกแบบแผ่นวงจรพิมพ์ และประกอบวงจรจริง ๆ โดยตั้งใจว่าจะแบ่งทำเป็น 3 ตอนคือ

วาดลายวงจร โดยใช้ KiCad และจำลองวงจรโดยใช้ gnucap ร่วมกับ gspiceui
วงจรที่เลือกคือวงจรขยายเสียงคลาสเอบีขนาด 0.5 วัตต์ ไม่ใช้ออปแอมป์หรือไอซีขยายเสียงสำเร็จรูป ออกแบบตามตำราเป๊ะ ๆ ไม่พลิกแพลงใด ๆ วงจรแบ่งออกเป็น 3 ส่วนย่อยซึ่งคนที่ผ่านวิชาอิเล็กทรอนิกส์น่าจะสังเกตได้ คือ
  1. วงจรขยายแรงดันแบบอิมิตเตอร์ร่วม
  2. วงจรกันชน (Buffer)
  3. วงจรขยายกำลังคลาสเอบี
ใช้ KiCad วาดลายวงจร โดยความตั้งใจแรกตอนที่วาดลายวงจรคือเพื่อสร้างแผ่นวงจร ลายวงจรจึงประกอบด้วยขั้วต่อสาย 3 จุด คือ ขั้วสัญญาณขาเข้า ขั้วสัญญาณขาออก และขั้วไฟเลี้ยง ดังรูป
เมื่อได้ลายวงจรแล้ว เราจะให้ KiCad สร้าง Netlist สำหรับ gnucap ให้เราได้ ผลที่ได้จะเป็นแฟ้มข้อความนามสกุล CIR ซึ่งมีเนื้อหาดังนี้
* EESchema Netlist Version 1.1 (Spice format) creation date: อา. 25 เม.ย. 2553, 18:45:25


C1  14 3 1u
P4  0 CONN_1
P3  5 CONN_1
P1  14 0 CONN_2
C2  13 0 470u
R2  3 0 42k
R1  5 3 79k
R5  13 0 39
R3  5 12 430
Q1  4 3 12 2N3904
RV1  10 10 9 100
R4  4 13 82
Q2  11 12 5 2N3904
R6  8 0 220
D2  9 8 1N4148
D1  11 10 1N4148
C3  6 7 470u
P2  7 0 CONN_2
R8  6 15 1
R7  2 6 1
Q4  15 8 0 2N2907
Q3  2 11 5 2N2222

.end
จากแฟ้มนี้ เราพบว่าต้องแก้ไขเพื่อให้จำลองวงจรใน gnucap ได้ 3 - 4 จุดด้วยกันคือ
  1. ขั้วต่อสัญญาณ Px ต่าง ๆ ไม่ต้องใช้ ก็ลบออก
  2. การเรียงลำดับของขาทรานซิสเตอร์ใน KiCad กับ gnucap ไม่ตรงกัน กล่าวคือ ใน KiCad จะเรียงลำดับเป็น E-B-C ในขณะที่ gnucap ต้องการให้เรียงลำดับเป็น C-B-E ก็แก้ไขลำดับของขาให้ถูกต้อง
  3. มีอุปกรณ์ตัวหนึ่งคือตัวต้านทานปรับค่าได้ ที่ gnucap ยังจำลองไม่ได้ ก็แก้ไขให้เป็นตัวต้านทานแทน ไม่ต้องปรับค่า
  4. อุปกรณ์เซมิคอนดักเตอร์ยังไม่มีโมเดล (.model) ในโปรแกรม gnucap นี้เราสามารถใช้โมเดลของ Spice ซึ่งหาได้จากบริษัทผู้ผลิตทั่วไปได้ทันที แต่โมเดลเหล่านี้ไม่ใช่ Opensource ผมจึงนำมาพิมพ์ไว้ตรงนี้ไม่ได้ หากใครสนใจให้ลองเข้าไปหาจากดาตาชีทของบริษัท หรือจากเว็บก็ได้ เมื่อโหลดมาแล้วก็เติมเข้าไปท้ายแฟ้ม ก่อน .end
  5. ไม่ได้กำหนดตำแหน่งไฟเลี้ยง และสัญญาณขาเข้า ก็ให้เพิ่ม VSupply กับ Vin เข้าไป ตามไวยกรณ์ของ gnucap
จะได้
* EESchema Netlist Version 1.1 (Spice format) creation date: อา. 25 เม.ย. 2553, 18:45:25


C1  14 3 1u
P4  0 CONN_1
P3  5 CONN_1
P1  14 0 CONN_2

C2  13 0 470u
R2  3 0 42k
R1  5 3 79k
R5  13 0 39
R3  5 12 430
Q1  12 3 4 2N3904
RV1  10 10 9 100
RV1 10 9 50
R4  4 13 82
Q2  5 12 11 2N3904
R6  8 0 220
D2  9 8 1N4148
D1  11 10 1N4148
C3  6 7 470u
P2  7 0 CONN_2
R8  6 15 1
R7  2 6 1
Q4  0 8 15 2N2907
Q3  5 11 2 2N2222

VSupply 5 0 12
Vin 14 0 GENERATOR

.model 1N4148 D (Is=5.84n...)*
.model 2N3904 NPN (Is=6.734f...)*
.model 2N2222 NPN (is=19f...)*
.model 2N2907 PNP (is=1.1P...)*

.end
โมเดลที่ดอกจัน (*) ไว้ หมายความว่าจะต้องไปโหลดมาจากเว็บของผู้ผลิตเอง ซึ่งจะมีพารามิเตอร์ให้ครบสำหรับ Spice ในกรณีของเราซึ่งใช้ gnucap นี้ เมื่อรันโปรแกรมซิมูเลชั่นแล้วจะเกิด Error ขึ้นเนื่องจาก gnucap ไม่รู้จักพารามิเตอร์บางตัว ให้ลบพารามิเตอร์ตัวนั้นทิ้งได้ (อย่างไรก็ตาม ไม่สามารถรับรองผลการทดลองได้)
เมื่อเตรียมแฟ้มเรียบร้อยแล้ว เราสามารถเลือกใช้ gnucap แบบบรรทัดคำสั่งก็ได้ หรือจะใช้ gspiceui เพื่อใช้ gnucap แบบ GUI ก็ได้ ในกรณีนี้เราเลือกใช้ gspiceui ซึ่งเรียกจากบรรทัดคำสั่งโดย
> gspiceui &
จะได้

หลักการของ gspiceui ก็คือเราจะต้อง "สร้าง" (Create) การซิมูเลชั่นขึ้นมาเสียก่อน แล้วจึงจะ "รัน" (Run) ซิมูเลชั่นนั้น ๆ ได้ การ "สร้าง" ซิมูลเลชั่นก็คือการตั้งค่าต่าง ๆ ของการซิมูเลชั่น นั่นเอง เช่นการกำหนดประเภทของการซิมูเลชั่น (.op .dc .ac) การกำหนดโหนด (Node) ที่ต้องการสังเกต การกำหนดประเภทของตัวแปรที่ต้องการสังเกต (แรงดัน กระแส กำลัง ค่าความต้านทาน) ส่วนการ "รัน" ซิมูเลชั่นก็คือการสั่งให้ gnucap ทำตามที่สั่ง

เมื่อทดลองใช้ดูพบว่าข้อความในแท็บ Netlist ไม่สามารถแก้ไขได้ ส่วนข้อความในแท็บ Simulation สามารถแก้ไขได้ นั่นหมายความว่าเราสามารถตกแต่งแก้ไขคำสั่งการซิมูเลชั่นที่ gspiceui ตั้งให้เราได้ ซึ่งมีจุดหนึ่งที่ต้องแก้ไขด้วยตนเองแน่ ๆ ก็คือ หากต้องการซิมูเลตแบบอื่น ๆ ที่ไม่ใช่ .op จะต้องสั่ง .op ก่อนเสมอ ไม่เช่นนั้นจะได้ผลเสมือนว่าวงจรไม่ได้รับไฟเลี้ยง

เมื่อทดลองซิมูเลตแบบ Transient (.tr) gspiceui จะอำนวยความสะดวกในการตั้งค่าต่าง ๆ ให้เรา ที่ได้ทดลองคือ
  • ตั้งค่า Vin เป็น 0.5 V ความถี่ 1 kHz (ลอง 1.0 V แล้ว สัญญาณเพี้ยน)
  • Start Time = 0 ms
  • Stop Time = 10 ms
  • Step Time = 10us 
ผลการทดลองเป็นดังนี้

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

วันเสาร์ที่ 5 ธันวาคม พ.ศ. 2552

การใช้ KiCad ครั้งแรก

ผมมีความต้องการจะใช้โปรแกรมออกแบบลายวงจรในลินุกซ์มานานแล้ว แต่ก่อนผมพยายามจะใช้ geda แต่ขอเรียนตามตรงว่าความสามารถผมไม่ถึงจริง ๆ ผมว่า geda ใช้ยากนะ

ผมเห็น KiCad ใน Reprository มานานแล้ว แต่ไม่ได้จะใช้ด้วยความคิดแบบไร้เดียงสาว่า ตัว K เกี่ยวข้องกับ KDE และจะต้องลง KDE ทั้งชุดซึ่งผมไม่อยากทำ

สุดท้ายก็ตัดสินใจลง KiCad จนได้ ความประทับใจก็คือมันใช้ง่ายมากเลยครับ ทำให้เรียนรู้ได้ง่าย ไม่จำเป็นต้องเป็นคนที่รู้เรื่องกระบวนการ EDA มาก่อนก็ได้

Tutorial ชุดแรกที่ผมอ่านคือ Mini Tutorial - KiCad ซึ่งผลงานชิ้นแรกผมทดลองทำ Instrument Amplifier แบบที่ใช้ OpAmp 3 ตัว ผลงานก็แสดงดังรูปครับ