ماژول ترموکوپل max6675 یک سنسور تشخیص دمای ترموالکتریک مدار بسته از دو سیم غیرمشابه است که در یک انتها به هم متصل هستند. هنگامی که دمای یک طرف با دمای طرف دیگر متفاوت است، جریان الکتریکی در مسیر برقرار میشود. این پدیده را اثر سیبک می نامند که اساس کار ترموکوپلها را تشکیل میدهد. این ماژول را میتوان با برد avr Wizard راه اندازی کرد تا دمای اندازهگیری شده بر روی LCD نمایش داده شود. در این بررسی به طور کامل در مورد راه اندازی ترموکوپل با avr صحبت میکنیم. اگر میخواهید بدانید ماژول الکترونیکی چیست کلیک کنید.
نحوه اندازی max6675 با avr
ماژول max6675 یک مبدل 12 بیتی آنالوگ به دیجیتال برای ترموکوپل های سری K است. این ماژول دارای تقویت کننده داخلی است و قادر خواهد بود دما را از «صفر» تا «1024» درجه سانتیگراد با وضوح 0.25 درجه سانتیگراد اندازه گیری کند. این ماژول دادهها را به صورت سریالی انتقال میدهد.
با صفر قرار دادن پایه CS، تبدیل داده توسط ADC متوقف شده و با اعمال پالس ساعت به پایه SCK، دادههای آماده شده روی خط SDO منتقل میشود. دادههای خروجی 16 بیت است و بیتهای 3 تا 14 شامل دادههای مربوط به دمای ترموکوپل خواهند بود. همچنین بیت 2 نشان میدهد که آیا ترموکوپل قطع شده یا وصل شده است.
لوازم مورد نیاز برای راه اندازی max6675 با avr عبارتند از:
- ماژول و سنسور ترموکوپل MAX6675 تایپ K
- میکروکنترلر Atmega8
- نمایشگر LCD کاراکتری 16×2
- پتانسیومتر 5 کیلو اهم
مشخصات سنسور ترموکوپل MAX6675 تایپ Kبه شرح زیر است:
- ولتاژ مورد نیاز: 3 تا 5.5 ولت DC
- جریان: جریان ماژول 50 میلیآمپر
- پروتکل ارتباطی: SPI
برای خرید میکروکنترلر AVR کلیک کنید.
مراحل راه اندازی max6675 با avr
پایه های ماژول ها و قطعات استفاده شده را به صورت زیر به پین های میکروکنترلر ببندید:
MAX6675 :
SCK: PB7 (Pin 13)
CS: PB2 (Pin 11)
SO: PB4 (Pin 14)
LCD:
RS: PD0 (Pin 2)
EN: PD1 (Pin 3)
D4-D7: PD4-PD7 (Pins 6-9)
Potentiometer:
ADC0 (Pin 23)
* کد زیر بر اساس پین های فوق نوشته شده است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
#include <avr/io.h> #include <util/delay.h> #include <stdio.h> #include "lcd.h" #define CS_PIN PB2 #define TEMP_UNIT_CELSIUS 0 #define TEMP_UNIT_FAHRENHEIT 1 // Function to initialize the SPI communication void SPI_Init() { // Set MOSI (PB5) and SCK (PB7) as output pins DDRB |= (1 << DDB5) | (1 << DDB7); // Enable SPI, Master mode, clock rate fck/16 SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR0); } // Function to send/receive data over SPI uint8_t SPI_Transfer(uint8_t data) { // Start transmission SPDR = data; // Wait for transmission complete while (!(SPSR & (1 << SPIF))); // Return the received data return SPDR; } // Function to read temperature from the MAX6675 uint16_t read_temp() { uint16_t temp = 0; // Select the MAX6675 by setting CS_PIN low PORTB &= ~(1 << CS_PIN); // Read the first byte (don't care about it) SPI_Transfer(0x00); // Read the second byte (higher 8 bits of temperature) temp = SPI_Transfer(0x00) << 8; // Read the third byte (lower 8 bits of temperature) temp |= SPI_Transfer(0x00); // Deselect the MAX6675 by setting CS_PIN high PORTB |= (1 << CS_PIN); // Discard the last bit (thermocouple status bit) temp >>= 3; return temp; } int main() { // Initialize SPI communication SPI_Init(); // Initialize LCD lcd_init(LCD_DISP_ON); // Variable to store the temperature read from the thermocouple uint16_t temperature = 0; // Variable to store the potentiometer value uint16_t pot_value = 0; // Variable to store the temperature unit (0 = Celsius, 1 = Fahrenheit) uint8_t temp_unit = TEMP_UNIT_CELSIUS; // Main loop while (1) { // Read temperature from the thermocouple temperature = read_temp(); // Read the potentiometer value for unit selection pot_value = adc_read(0); // Assuming the potentiometer is connected to ADC0 // Adjust the temperature unit based on the potentiometer value if (pot_value < 512) { temp_unit = TEMP_UNIT_CELSIUS; } else { temp_unit = TEMP_UNIT_FAHRENHEIT; } // Convert the temperature to Celsius or Fahrenheit based on the unit selection float temp_value; if (temp_unit == TEMP_UNIT_FAHRENHEIT) { temp_value = (temperature * 9.0 / 5.0) + 32.0; } else { temp_value = temperature; } // Display the temperature on the LCD char lcd_buffer[16]; snprintf(lcd_buffer, sizeof(lcd_buffer), "Temp: %.2f %c", temp_value, (temp_unit == TEMP_UNIT_FAHRENHEIT) ? 'F' : 'C'); lcd_clrscr(); lcd_puts(lcd_buffer); // Wait for a short delay before updating the temperature again _delay_ms(500); } return 0; } |
دمای کار ترموکوپل max6675 بین صفر تا 1024 درجه سانتیگراد است. دقت اندازه گیری ماژول برابر با 0.25 و دقت اندازه گیری ترموکوپل برابر با 8 LSB است. این ماژول برای مصارف صنعتی مناسب است. معمولاً سنسور توسط یک کابل با پوشش حرارتی ویژه به ماژول متصل میشود.
برای خرید پتانسیومتر از جم ترونیک کلیک کنید.
کد AVR در کدویژن (CodeVision)
باید کدها را در نرم افزار کدویژن تهیه و پروگرام کنید. برای ایجاد پروژه کدویژن جدید، پس از باز کردن نرم افزار کدویژن، از منوی File گزینه New و سپس Project را انتخاب کنید. پیام باز شده از شما میپرسد که آیا میخواهید از بخش کدویزارد استفاده کنید. صفحه باز شده در نرم افزار کدویژن مربوط به آدرس ذخیره سازی پروژه است. ابتدا محل ذخیره سازی مورد نظر را انتخاب کرده و سپس نامی برای پروژه تعیین کنید.
در این صفحه از کدویژن باید مدل میکروکنترلر خود را انتخاب کنید. برای مثال Atmega8 را انتخاب کنید و سپس OK را انتخاب کنید. قسمت پایین مربوط به فایلی است که کدهای پروژه در آن ذخیره شده است. در قسمت C Compiler از منوی باز شده به تنظیماتی مانند تغییر مدل میکروکنترلر، کریستال و غیره دسترسی دارید که با انتخاب گزینه OK پروژه در نرم افزار کدویژن ایجاد شده و آماده کدنویسی میشود.
پس از اتمام کدنویسی، از منوی Project گزینه Compile را انتخاب کنید. اگر خطایی مشاهده نکردید، از همان منوی Project در نرم افزار کدویژن گزینه Build All را انتخاب کنید. به طوری که برنامه به زبان ماشین ترجمه شده و در فایلی با پسوند hex ذخیره میشود. در این قسمت از آموزش کدویژن، برنامه نویس را به سیستم متصل کنید. میکروکنترلر را به درستی روی پروگرامر قرار دهید. سپس نرم افزار میکروکنترلر را باز کرده و از منوی Buffer گزینه Load Buffer را انتخاب کنید.
در صفحه باز شده باید فایل hex مربوط به برنامه را انتخاب کنید سپس به محل ذخیره پروژه رفته و از پوشه Debug داخل پوشه Exe فایل با پسوند hex را انتخاب کنید. توجه داشته باشید که فیوز بیت های آی سی به طور پیش فرض روی یک مگاهرتز تنظیم شده اند. پس اگر برنامه را در نرم افزار کدویژن با کریستال 8 مگاهرتز کامپایل کردهاید. در قسمت Fuses باید فیوز بیتها را روی 8 مگاهرتز تنظیم کنید.
پس از انجام مراحل بالا گزینه Auto Program را انتخاب کرده و منتظر بمانید تا آی سی برنامه ریزی شود. اکنون آی سی میکروکنترلر AVR برای استفاده در مدار آماده است. پس از ایجاد یک پروژه جدید در نرم افزار CodeVision، کدهای ترموکوپل max6675 زیر را در آن کپی کنید. سپس تراشه میکروکنترلر Atmega8 را برنامه ریزی کنید.
جهت تهیه و خرید نمایشگر LCD کلیک کنید.
تحلیل کد پروژه ترموکوپل max6675
ابتدا کتابخانههای مورد نیاز به برنامه اضافه شده است. سپس LCD روی پورت D تنظیم میشود. ما یک متغیر برای ذخیره دما و یک رشته برای پیکربندی LCD تعریف کردیم. تابع read_temp یک تابع خروجی است. در داخل این تابع تنظیمات پروتکل SPI برای ماژول ترموکوپل max6675 انجام شده است و خروجی این تابع دمای اندازه گیری شده توسط ماژول خواهد بود.
در داخل تابع اصلی، ابتدا پورت B به عنوان ورودی و خروجی در صورت نیاز برای اتصال به ماژول تعریف می شود و سپس پروتکل SPI فعال میشود. در داخل حلقه بینهایت ابتدا دما از تابع read_temp خوانده میشود و سپس داخل LCD نمایش داده خواهد شد. هنگام برنامه ریزی کد روی میکروکنترلر AVR، فیوز بیتها را روی کریستال خارجی تنظیم کنید. سپس وارد حلقه اصلی برنامه شده و طبق الگوی ذکر شده در دیتا شیت ماژول Max6675 دادهها را دریافت کرده و به دو مقدار درجه سانتیگراد و درجه فارنهایت تبدیل میکنیم. در نهایت این دو مقدار روی LCD نشان داده میشود.
کلام آخر
آموزش راه اندازی max6675 با avr در این مقاله توصیح دادیم. فقط ضروری است مراحل کار به درستی پیش ببرید تا روند راه اندازی به خوبی انجام شود. تمامی مراحل کار تخصصی هستند و نیاز به پایه اولیه دانش الکترونیک دارد. برای خرید محصولات آردوینو به فروشگاه جم ترونیک مراجعه کنید.
سلام وقت بخیر از چه کدی باید استفاده کنیم؟
یا سلام و وقت بخیر کدها داخل مقاله برای استفاده قرار داده شده است
درود و تشکر از آموزش شما
این کتابخانه LCD در برنامه را از کجا اضافه کنیم به برنامه؟
شما برنامه را برای اتمل نوشتید بعد از کدویژن استفاده کردید ؟
با تشکر
سلام و وقت بخیر اگر از کد ویژن استفاده کنید نیاز به اضافه کردن کتابخانه ال سی دی ندارید و پیشفرض داخل خودش قرار داره فقط نیاز هست که در ابتدای کد نویسی فراخوانی بشه.
موفق باشید.
با درود
در دیتاشیت نوشته شده دقت 12 بیتی، ودر قسمت دیگر نوشته دقت 8 بیتی !!
چرا 8 بیت جهت دریافت دما خوانده میشود در حالیکه در دیتاشیت هم 12 بیت خروجی اطلاعات رو مشخص کرده؟
با تشکر