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