1 พ.ย. 2023 เวลา 02:57 • วิทยาศาสตร์ & เทคโนโลยี
น้ำผึ้งตีนดอย

Isolation Automatic RS485 Direction Control Using PIC10F322.

RS-232 เป็นมาตรฐานการสื่อสารแบบอนุกรมของพีซีมาเป็นเวลานาน
อินเทอร์เฟซที่เรียบง่ายแต่มีประสิทธิภาพ นี้รวมอยู่ในพีซีทุกเครื่องที่ผลิตขึ้นมา จนกระทั่งในที่สุดก็ถูกแทนที่ด้วยมาตรฐาน Universal Serial Bus (USB) ที่เร็วและซับซ้อนยิ่งขึ้น
อย่างไรก็ตาม RS-232 ยังคงได้รับความนิยมมาจนถึงทุกวันนี้
เนื่องจากมีความเรียบง่ายและไม่มีค่าใบอนุญาต
การรองรับซอฟต์แวร์สำหรับ RS-232 ยังคงมีอยู่ในระบบปฏิบัติการของ
พีซีในปัจจุบัน และยังมี USB สำหรับแปลง USB เป็น RS232 ได้ด้วย
ข้อจำกัดประการหนึ่งของ RS-232 คือระยะห่างที่ค่อนข้างสั้นระหว่างอุปกรณ์ที่เชื่อมต่อ
RS-485 แก้ปัญหานี้โดยการแทนที่อินพุตและเอาต์พุต RS-232 ด้วยไดรเวอร์/ตัวรับส่ง
ด้วยข้อยกเว้นบางประการ ตัวรับส่งสัญญาณ RS-485 มีการควบคุมทิศทางเพื่อสลับระหว่างการส่งและรับ ดังนั้นจึงทำให้อินเทอร์เฟซแบบอนุกรมฮาล์ฟดูเพล็กซ์เท่านั้น (ทิศทางเดียวในแต่ละครั้ง)
ปัญหาอย่างหนึ่งของการส่งข้อมูลผ่านสายสัญญาณ RS485 คือ การรับส่งได้ทีละฝั่งบนสายสัญญาณคู่เดียว เรียกว่า Half Duplex เมื่อมีผู้ส่ง ฝั่งที่เหลือก็จะต้องรอรับอย่างเดียว หากมีผู้ส่งสองฝั่งจะทำให้สายสัญญาณเกิดการชนจนส่งต่อไม่ได้
หากผู้ใดผู้หนึ่งไม่ได้ส่งข้อมูลควรจะทำอย่างไร ?
หากต้องการจะส่งทำอย่างไร ?
ขณะส่งข้อมูลทำอย่างไร ?
หากต้องการเพิ่มอินเทอร์เฟซฮาร์ดแวร์ RS-485 ให้กับเอาต์พุตอนุกรม RS-232 จะต้องใช้การควบคุมทิศทางอัตโนมัติเพื่อจัดการการรับส่งข้อมูล แต่สายสัญญาณ RS485 ไม่มีสัญญาณกำหนดจังหวะรับส่ง(Handshake หรือ Flow Control เช่น RTS/CTS, DTR/DSR)
**** RS232 เป็นระดับสัญญาณที่ได้จากตัวขับภายนอกของสัญญาณ UART
ซึ่ง UART สามารถขับระดับสัญญาณได้ตัวอย่างเช่น RS-232, RS485, RS422 เป็นต้น
สัญญาณ RS485 ยังใช้ในการเดินสายสัญญาณภาคสนามภายนอกด้วย เช่น เซนเซอร์อุณหภูมิ เซนเซอร์แสง เซนเซอร์ความชื้น โซล่าร์อินเวอร์เตอร์ เป็นต้น
การเดินสายสัญญาณไปยังอุปกรณ์ภาคสนามอาจจะทำให้เกิด Surge ได้หลายกรณีทั้งฟ้าผ่า ไปฟ้าสถิตที่เกิดจากลมพัดเสียดสีกับอุปกรณ์ต่างๆ จนทำให้ประจุเกิดการเคลื่อนที่่ (Discharge) ผ่านสายสัญญาณ RS485 มายังคอมพิวเตอร์ก็จะทำให้คอมพิวเตอร์เสียหายได้
ดังนั้น บทความนี้นำเสนอวิธีการควบคุมทิศทางการรับส่งสัญญาณ RS485 โดยอัตโนมัติแบบแยกจุดสัญญาณออกจากัน โดยใช้ PIC10F322 (Isolation Automatic RS485 Direction Control Using PIC10F322)
ทั้งนี้จะนำเสนอเน้นส่วนของการเขียนโปรแกรมควบคุม PIC10F322 และ Simulation เป็นหลัก
โดยบทความนี้ได้พยายามทำซ้ำตามบทความ
How to Create Automatic Direction Control for RS-485 Interfaces
ref link: https://www.electronicdesign.com/technologies/embedded/article/21806514/how-to-create-automatic-direction-control-for-rs485-interfaces
โดยคุณ Ward Brown แต่ได้มีการปรับเปลี่ยนวิธีการบางส่วนให้แตกต่างออกไป
การออกแบบและโปรแกรม
สำหรับ PIC10F322 อยู่ในซีรี่ย์ Microcontroller รุ่นเล็กที่สุดของ Microchip
ตัวถัง SOT23-6 มีเพียง 6 ขาใช้ และมี I/O เพียง 3 I/O หากนับรวม MCLR จะมี 4 I/O เท่านั้น ความเร็วสัญญาณนาฬิกา 16 MHz
มี NCO Numerical Control Oscillator คือ มีตัวกำเนิดสัญญาณที่ควบคุมได้
มี CLC Configurable Logic Cell คือ Logic แบบตัั้งค่าได้ คล้ายกับ PLD
รู้จักสัญญาณ UART
สัญญาณ UART ชนิด 8N1 คือ ข้อมูล 8 Bits, 1 Start Bit, 1 Stop Bit
โดย Start Bit จะมี Logic เป็น 0 และ Stop Bit มี Logic เป็น 1 ส่วนข้อมูลมี 8 Bits
โดยรวมแล้วสัญญาณ Uart จะมี 10 bits
ดังนั้นใน 1 Frame จะมีความกว้าง 10 Bits ดังรูปที่ 1
รูปที่ 1 แสดงลักษณะ Waveform ของสัญญาณ UART 8N1
สัญญาณควบคุมทิศทางสัญญาณ RS 485 คือ Direction จะใช้สัญญาณขนาน 9.5 Bit Time เช่น ต้องการส่งข้อมูล 9600 Bps สัญญาณ 1 bit ใช้เวลา 1/9600 = 104.1667 uS
นั่นคือ Direction จะควบคุมทิศทางโดยกำหนดให้อยู่ในสถานนะตัวส่งเป็นเวลา 104.1667uS x 9.5
= 989.5833 uS
= 1/0.0009895833 Hz
= 1.010526 kHz
สัญญาณ UART จะส่งต่อไปยัง SR-LATCH เพื่อกำหนดทิศทางของขา Direction
โดย Direction จะมีลอจิกเป็น 0 เป็นเมื่อต้องส่งข้อมูล ข้อมูล UART จะต่อกับขา CLCIN1
เมื่อ Output ของ CLC เกิด Interrupt แล้ว ก็จะทำการรอ Interrupt จาก NCO เป็นระยะเวลา 9.5 bit Time (หรือที่ความถี่ Baudrate / 9.5 Hz)
ตัวอย่างการส่งข้อมูล 0xAA และกราฟ Direction
เส้นสีน้ำเงินแสดง Direction  ส่วนเส้นสีแดงบรรทัดบนสุดแสดงข้อมูล 0xAA
จากรูปข้างบน เส้นสีน้ำเงินแสดง Direction ส่วนเส้นสีแดงบรรทัดบนสุดแสดงข้อมูล 0xAA ที่ขอบขาลงของกราฟสีน้ำเงินจะเป็นจุดสิ้นสุดของ NCO 1 และ สั่งให้ PIC10F322 รอ Interrupt เมื่อ Data เป็น 0 (บิตแรก)
ผลการ Sim
ทดลองโดยใช้ MCU ตัวอื่นส่งข้อมูลไปให้อีกตัว ผ่านวงจรที่มีการจำลอง Direction
เพื่อดูผลว่าสามารถรับค่าได้หรือไม่
วิธีและรูปแบบการส่องต้องทดสอบให้ครบ เช่น
1) ส่ง Ascii จาก 0x00 ไปจน 0xFF ไม่มีการหน่วงเวลาระหว่างไบต์ และมีการหน่วงเวลา นับได้ 2 กรณี
2) ส่ง Ascii เฉพาะ Visible Charactor ไม่มีการหน่วงเวลาระหว่างไบต์ และมีการหน่วงเวลา นับได้ 2 กรณี
3) ทดสอบการรบกวนระหว่างการส่งทั้งข้อ 1 และ 2 นับได้ 4 กรณี
ดังนั้นการทดสอบจึงควรประกอบด้วย 8 กรณีเป็นอย่างน้อย
แสดงการทดสอบโดยคร่าว
กราฟที่ได้จากการ Proteus แตกต่างจาก Microchip Simulator เล็กน้อยเมื่อเกิด CLC Interrupt ซึ่งจะเกิด Logic ขึ้นลงเร็วมาก สามารถแก้ได้โดยการกำหนดลำดับทำงานของ Interrupt ใหม่
สรุป
จากการ Sim และทดสอบโดยใช้ Microchip Simulator และ Proteus และ GPSIM(ซึ่งไม่ได้เขียนเอาไว้ เพราะยุ่งยากและเข้าใจยาก) น่าจะมีความเป็นไปได้ที่จะทำ Isolation และ AutoDirection ให้ RS485 Bus
ทั้งนี้เพื่อนำไปใช้งานในพื้นที่ที่มีความเสี่ยงต่อสัญญาณรบกวนและดิสชาร์จต่างๆมากกว่าในอาคาร
โฆษณา