8:09 PM
5
การตรวจวัดอุณหภูมิด้วยเทอร์โมคัปเปิล K-Type ด้วยไอซี AD595AQ 

โดย สมภพ สุขเฉลิม 5511400293 ภาควิชาฟิสิกส์ คณะวิทยาศาสตร์

1. แนะนำเทอร์โมคัปเปิลและไอซี AD595AQ                                                                                                    ในการตรวจวัดการตรวจวัดอุณหภูมิจากเทอร์โมคัปเปิลแบบ K-Type ด้วยไอซี AD595AQ สัญญาณที่ได้จากไอซี AD595AQ นั่นเป็นสัญญาณอนาลอกซึ่งจะใช้ไอซี MCP2308 ในการแปลงสัญญาณอนาลอกเป็นดิจิตอล ซึ่งจะกล่าวในลำดับต่อไป 
                1.1 เทอร์โมคัปเปิล                                                                                                                                                     เทอร์โมคัปเปิล (Thermocouple) เป็นทรานสดิวเซอร์ (Transducer) หรือ เซนเซอร์ (Sensor) สำหรับวัดอุณหภูมิ ได้จากการนำโลหะสองชนิดมาต่อเข้าด้วยกัน แบ่งเป็นสองขั้วคือ ด้าน T+ และด้าน T- ซึ่งขึ้นอยู่กับชนิดโลหะที่นำมาใช้ และสามารถวัดความต่างศักย์หรือแรงดันไฟฟ้าได้ (Thermoelectric Voltage) ซึ่งอยู่ในช่วงที่ต่ำมาก (ระดับไมโครโวลต์ : μV) เมื่อมีการเปลี่ยนแปลงของอุณหภูมิ จะทำให้แรงดันเอาต์พุตเปลี่ยนแปลงตามอุณหภูมิแบบเชิงเส้น เทอร์โมคัปเปิลมีหลายชนิด เช่น K-, J-, N-, T-, S-, R-, or E-type เป็นต้น ซึ่งขึ้นอยู่กับวัสดุโลหะที่นำมาใช้งาน                                                                                                                      
               เทอร์โมคัปเปิล K-Type ประกอบด้วยโลหะผสมด้านบวก (T+) คือ Chromel (90% nickel +10% chromium) และโลหะผสมด้านลบ (T-) คือ Alumel (95% nickel + 2% manganese + 2% aluminum + 1% silicon) และใช้สำหรับวัดอุณหภูมิในช่วง -270 to +1370 °C โดยประมาณ                       
1.2 ไอซี AD595AQ                                                                                                                     สำหรับไอซี AD595AQ จะใช้กับเทอร์โมคัปเปิลแบบ K-Type ทุกการเปลี่ยนแปลงอุณหภูมิ 1 OC จะทำให้แรงดันภายในไอซีเปลี่ยนแปลงไป 10 mV ไฟเลี้ยงตั้งแต่ 5V ถึง 15V


รูปที่ 1 แสดงการจัดเรียงขาไอซี AD595AQ
                1.3 ไอซี MCP2308                                                                                                                                                 ไอซี MCP2308 จะรับสัญญาณอนาลอกแล้วแปลงเป็นสัญญานดิจิตอล ไอซีตัวนี้สามารถรับค่าได้ 8 Channel โดยแปลงค่าเป็นข้อมูล 12 บิต (0-4096)  และสามารถกำหนดค่า Vref  ได้เองครับ (ค่าแรงดันสูงสุด หรือ 4096 ) ใช้ติดต่อแบบ Serial Peripheral Interface (SPI) นะครับ  ซึ่งประกอบด้วย CLK, DOUT, DIN, CS, DGND ไฟเลี้ยง 2.7V-5.5V


รูปที่ 2 แสดงการจัดเรียงขาไอซี MCP2308

2. วงจรการเชื่อมต่อกับไมโครคอนโทรลเลอร์                                                                           

               
รูปที่ 3 การเชื่อมต่อเทอร์โมคัปเปิลกับไอซี AD595AQและMCP3208 กับไมโครคอนโทรลเลอร์

3. การพัฒนาโปรแกรม                                  
    ในที่นี้ใช้ไมโครคอนโทรลเลอร์ตระกูล AVR (Attiny 2313) และใช้ Atmel Studio 6.0 ในการเขียนโปรแกรมควบบคุม ซึ่งจะแสดงผ่านหน้าจอเทอร์มินอลมอนิเตอร์                                             

      3.1 การจัดการเรื่องเวลา                                                                                                                                     
                 ในอันดับแรกนั้นจะกำหนด F_CPU ซึ่งขึ้นอยู่กับผู้ใช้ว่าต่อไมโครคอนโทรลเลอร์เป็นกี่ MHz ในที่นี้จะใช้ 12MHz และจะใช้ฟังก์ชัน delay ในการหน่วงเวลา 
                                                                          
#define F_CPU 12000000UL          //define CPU clock
#include <util/delay.h>           //include delay library

      3.2 การเริ่มต้นเชื่อมต่อข้อมูล
        ในคู่มือสำหรับไอซีต่างๆนั้น จะมีรายละเอียดบอกการทำงานของไอซีว่าจะทำงานในช่วงไหน ในไอซี MCP3208 นี้ จะให้ DO CLK และ SS เป็นสัญญาณเอาท์พุต DI เป็นสัญญาณอินพุท สุดท้ายเซ็ตค่า DO เป็น high หรือ 1 รอคำสั่ง low หรือ 0 เพื่อรับค่าข้อมูลที่ได้

void spi_setup(void)
{
       USI_DIR_REG |=(1<<USI_DO_PIN)|(1<<USI_CLK_PIN)|(1<<USI_SS);
       USI_DIR_REG &=~(1<<USI_DI_PIN);
       USI_OUT_REG |=(1<<USI_DO_PIN);
}

       3.3 การเขียนและอ่านค่าข้อมูล
             ไมโครคอนโทรเลอร์จะอ่านค่าทีละ 8 บิต แต่ไอซี MCP3208 ให้ข้อมูล 12 บิต ดังนั้นจึงต้องอ่านข้อมูล 2 ครั้ง ไมโครคอนโทรลเลอร์จะอ่านข้อมูลได้ต้องส่งค่า SS เป็น low และส่งค่าๆหนึ่งเพื่อให้ไอซีทำงาน ครั้งแรกนั้นจะอ่านข้อมูลเป็น h_data แล้วบิตไปทางซ้ายไป 8 บิต ครั้งที่สองอ่านข้อมูลเป็น l_data แล้วสั่งให้ SS เป็น high เพื่อให้หยุดอ่านข้อมูล และนำข้อมูล h_data และ l_data มา and กัน จึงจะได้ค่า 12บิตที่เป็นข้อมูลอุณหภูมิของเรา

int main(void)
{
       USART_Init (12);
       spi_setup();
       uint16_t h_data;
       uint16_t hx_data;
       uint16_t l_data;
       uint16_t adc_data;
      
       while(1)
       {
              USI_OUT_REG &=~(1<<USI_SS);
              spi_transfer(0x06);
             
              h_data=spi_transfer(0x00);
              h_data &=0b00001111;
              hx_data = h_data<<8;
              l_data=spi_transfer(0x00);
              USI_OUT_REG |=(1<<USI_SS);
             
             
              adc_data = hx_data|l_data;
              USART_SHOW(adc_data);
             
             
       }
}


4. การแสดงผล        
                การแสดงผลในที่นี้จะแสดงออกมาทางหน้าจอเทอร์มินอลมอนิเตอร์ ข้อมูลนั้นมาจากการอ่านข้อมูลข้างตอนแล้วมาแปลงเป็นค่าอุณหภูมิอีกที ซึ่งจะได้เป็นค่าอุณหภูมิต้องคุณพารามิเตอร์เข้าไป จากการคำนวณ โดยคำนึงจากไอซี AD595AQ และไอซี MCP3208 แล้วค่าที่ต้องคูณเข้าคือ 1.22 จึงจะได้ค่าอุณหภูมิจริงออกมาทางหน้าจอเทอร์มินอลมอนิเตอร์

uint16_t USART_SHOW( uint16_t data )
{

       uint16_t      tdata;
       uint16_t      hdata;
       uint16_t      ddata;
       uint16_t      udata;
       data = data*1.22;
       tdata = data/1000;
       hdata =       (data%1000)/100;
       ddata = (data%100)/10;
       udata = (data%10);
      
       USART_Transmit(48+tdata);
       USART_Transmit(48+hdata);
       USART_Transmit(48+ddata);
       USART_Transmit(46);
       USART_Transmit(48+udata);
       USART_Transmit(9);
       USART_Transmit(67);
       USART_Transmit(0x0A);
       _delay_ms(900);
}

                                        รูปที่ 4 การแสดงค่าอุณหภูมิห้องที่วัดได้ผ่านหน้าจอเทอร์มินอล

อ้างอิง

[1] THERMOCOUPLE K-TYPE,  
[2] AD595AQ Datasheet,
[3] MCP3208 Datasheet,
[3] ATMEL, ATtiny2313 Datasheet,

5 comments:

  1. AD595 ใช้กับ thermocouple type_T ได้ใช่ไหมครับ (ผมอ่านดาตร้าชีท แล้ว บางอันบอกได้ บางอัน ก้ ไม่ได้บอก ผม เลย ขออนุญาติ ถามครับ ขอบคุณครับ)

    ReplyDelete
  2. AD595 สามารถใช้กับ thermocouple type_T ใช้ได้ใช่ไหมครับ ผมอ่านดาตร้าชีทบางอันบอกได้ บางอันไม่บอก เลยขออนุญาติถามครับ ขอบคุณครับ

    ReplyDelete
  3. narawit peattayarak
    AD595 ใช้กับ thermocouple type_T ได้ใช่ไหมครับ (ผมอ่านดาตร้าชีท แล้ว บางอันบอกได้ บางอัน ก้ ไม่ได้บอก ผม เลย ขออนุญาติ ถามครับ ขอบคุณครับ)

    ถ้าดูจากดาต้าชีท จะเขียนไว้ว่า Can Be Used with Type T Thermocouple Inputs ซึ่งบอกเราว่าสามารถใช้ได้ แต่พอไปดูข้อมูลที่ใช้แปลงค่าแรงดันไฟฟ้าเป็นอุณหภูมิ จะไม่มีข้อมูลให้เรา ในกรณีนี้ก็ไม่มีปัญหาครับ ถ้าจะใช้ Type T ก็ได้ แต่ต้องมานั่งทำ Transfer Function หรือทำ Calibration curve เอง ซึ่งทำแบบง่ายๆ เองกับเครื่องมือวัดอุณหภูมิที่สามารถอุณหภูมิเป้าหมายของเราครับ

    ReplyDelete
  4. narawit peattayarak
    AD595 ใช้กับ thermocouple type_T ได้ใช่ไหมครับ (ผมอ่านดาตร้าชีท แล้ว บางอันบอกได้ บางอัน ก้ ไม่ได้บอก ผม เลย ขออนุญาติ ถามครับ ขอบคุณครับ)

    ถ้าดูจากดาต้าชีท จะเขียนไว้ว่า Can Be Used with Type T Thermocouple Inputs ซึ่งบอกเราว่าสามารถใช้ได้ แต่พอไปดูข้อมูลที่ใช้แปลงค่าแรงดันไฟฟ้าเป็นอุณหภูมิ จะไม่มีข้อมูลให้เรา ในกรณีนี้ก็ไม่มีปัญหาครับ ถ้าจะใช้ Type T ก็ได้ แต่ต้องมานั่งทำ Transfer Function หรือทำ Calibration curve เอง ซึ่งทำแบบง่ายๆ เองกับเครื่องมือวัดอุณหภูมิที่สามารถอุณหภูมิเป้าหมายของเราครับ

    ReplyDelete
  5. ขอบคุณครับ แล้วถ้าผมใช้ A/D 16บิตเป็น MCP3421 ยังเขียนโค้ต คล้ายกันไหมครับ เข้า arduino พอดีผม เห็น ตัวนี้ส่งข้อมูลแบบ I^2C อะครับ ขอบคุณครับ

    ReplyDelete