โดย สมภพ สุขเฉลิม 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,
AD595 ใช้กับ thermocouple type_T ได้ใช่ไหมครับ (ผมอ่านดาตร้าชีท แล้ว บางอันบอกได้ บางอัน ก้ ไม่ได้บอก ผม เลย ขออนุญาติ ถามครับ ขอบคุณครับ)
ReplyDeleteAD595 สามารถใช้กับ thermocouple type_T ใช้ได้ใช่ไหมครับ ผมอ่านดาตร้าชีทบางอันบอกได้ บางอันไม่บอก เลยขออนุญาติถามครับ ขอบคุณครับ
ReplyDeletenarawit peattayarak
ReplyDeleteAD595 ใช้กับ thermocouple type_T ได้ใช่ไหมครับ (ผมอ่านดาตร้าชีท แล้ว บางอันบอกได้ บางอัน ก้ ไม่ได้บอก ผม เลย ขออนุญาติ ถามครับ ขอบคุณครับ)
ถ้าดูจากดาต้าชีท จะเขียนไว้ว่า Can Be Used with Type T Thermocouple Inputs ซึ่งบอกเราว่าสามารถใช้ได้ แต่พอไปดูข้อมูลที่ใช้แปลงค่าแรงดันไฟฟ้าเป็นอุณหภูมิ จะไม่มีข้อมูลให้เรา ในกรณีนี้ก็ไม่มีปัญหาครับ ถ้าจะใช้ Type T ก็ได้ แต่ต้องมานั่งทำ Transfer Function หรือทำ Calibration curve เอง ซึ่งทำแบบง่ายๆ เองกับเครื่องมือวัดอุณหภูมิที่สามารถอุณหภูมิเป้าหมายของเราครับ
narawit peattayarak
ReplyDeleteAD595 ใช้กับ thermocouple type_T ได้ใช่ไหมครับ (ผมอ่านดาตร้าชีท แล้ว บางอันบอกได้ บางอัน ก้ ไม่ได้บอก ผม เลย ขออนุญาติ ถามครับ ขอบคุณครับ)
ถ้าดูจากดาต้าชีท จะเขียนไว้ว่า Can Be Used with Type T Thermocouple Inputs ซึ่งบอกเราว่าสามารถใช้ได้ แต่พอไปดูข้อมูลที่ใช้แปลงค่าแรงดันไฟฟ้าเป็นอุณหภูมิ จะไม่มีข้อมูลให้เรา ในกรณีนี้ก็ไม่มีปัญหาครับ ถ้าจะใช้ Type T ก็ได้ แต่ต้องมานั่งทำ Transfer Function หรือทำ Calibration curve เอง ซึ่งทำแบบง่ายๆ เองกับเครื่องมือวัดอุณหภูมิที่สามารถอุณหภูมิเป้าหมายของเราครับ
ขอบคุณครับ แล้วถ้าผมใช้ A/D 16บิตเป็น MCP3421 ยังเขียนโค้ต คล้ายกันไหมครับ เข้า arduino พอดีผม เห็น ตัวนี้ส่งข้อมูลแบบ I^2C อะครับ ขอบคุณครับ
ReplyDelete