Tải bản đầy đủ (.docx) (20 trang)

Điều khiển nhiệt độ với nguồn 220V (Vi điều khiển và ứng dụng)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.06 MB, 20 trang )

MỤC LỤC
CHƯƠNG 1: MỤC TIÊU ĐỀ TÀI........................................................................1
CHƯƠNG 2: PHƯƠNG PHÁP TRIỂN KHAI ĐỀ TÀI......................................2
1. Chọn vi điều khiển.........................................................................................2
2. Cảm biến và các linh kiện liên quan.............................................................3
2.1

Cảm biến Pt100..........................................................................................3

2.2

Cảm biến LM35.........................................................................................5

2.3

Triac...........................................................................................................6

3. Thiết kế mô phỏng và kết quả.......................................................................6
3.1

Khối nguồn................................................................................................6

3.2 Điều khiển nhiệt độ:......................................................................................7
3.3Thiết kế mạch trên Altium...........................................................................10
3.4 Xác định hàm truyền của hệ thống và bộ điều khiển PID...........................10
3.4 Thiết kế chương trình..................................................................................11
CHƯƠNG 3: KẾT QUẢ THỰC NGHIỆM........................................................12
CHƯƠNG 4: KẾT LUẬN.....................................................................................12
1. Những điểm làm được.................................................................................12
2. Những điểm chưa làm được........................................................................12
PHỤ LỤC...............................................................................................................13




CHƯƠNG 1: MỤC TIÊU ĐỀ TÀI
Thiết kế mạch đọc nhiệt độ và điều khiển nhiệt độ cho mạch sử dụng điện áp
220VAC

 Hướng cần làm của đề tài:
- Thực hiện đọc nhiệt độ thực tế từ cảm biến, xác định hàm truyền để xây
dựng bộ điều khiển PID, điều khiển điện áp cấp cho bóng đèn làm
nóng(do nhóm em dùng Triac nên cần phải xác định điểm không của
nguồn 220V để thực hiện điều khiển Triac.)
- Thiết kế mạch và mơ phỏng trên phần mềm mơ phỏng proteus.
- Lập trình cho vi điều khiển .
- Thiết kế mạch thực tế, kiểm tra các tính năng của mạch thật.
 Các kết quả dự tính của đề tài:
- Mạch có thể đọc nhiệt độ từ cảm biến và hiển thị lên LCD hoặc LED 7
thanh
- Có thể điều khiển được độ sáng của đèn (thiết bị chấp hành) để từ đó
điều khiển nhiệt độ của hộp nhiệt.
- Mạch có khả năng tự điều chỉnh nhiệt độ bằng bộ PID
 Các chỉ tiêu kỹ thuật của thiết bị:
- Nhiệt độ đo được phải khá chính xác
- Điện áp điều khiển phải ổn định khi đạt được nhiệt độ yêu cầu.

1


CHƯƠNG 2: PHƯƠNG PHÁP TRIỂN KHAI ĐỀ TÀI
1. Chọn vi điều khiển


Trong bài tập này chúng em sử dụng vi điều khiển STM32F401CCU6 Blue
Pill theo sự gợi ý của thầy giáo Nguyễn…

Hình 1 Kit STM32F401CCU6 Blue Pill

Kit này có những ưu điểm:
- Bộ xử lý ARM Cortex-M4 với tần số hoạt động tối đa 84 MHz.
- Bộ nhớ flash 256 KB và SRAM 64 KB.
- Ổ đĩa USB 2.0 Full Speed, SPI, I2C, UART, CAN, và bộ điều khiển
DMA.
- Bộ chuyển đổi ADC 12-bit với tốc độ lên đến 2.4 MSPS và 16 kênh đầu
vào.
- Chế độ tiêu thụ điện năng thấp và các tính năng tiết kiệm năng lượng
khác.
- Tích hợp bộ đếm thời gian, bộ định thời và bộ đếm sự kiện.
- Đơn giản, dễ sử dụng, là kit cơ bản cho người mới lập trình
- Đầy đủ chức năng cần thiết cho bài toán đặt ra
2


- Dễ tìm kiếm trên thị trường, giá thành rẻ, hiệu quả cao
- Cơng cụ lập trình đều Free và đầy đủ tài liệu hỗ trợ
2. Cảm biến và các linh kiện liên quan
2.1 Cảm biến Pt100
Hay còn được gọi là cảm biến nhiệt độ RTD (Resistance Temperature
Detectors). Đây là loại thiết bị dùng để đo nhiệt độ thông qua 1 que dị cảm biến
có tích hợp Platinium bên trong. Thành phần Platinium được xem như là thành
phần quan trọng nhất của cảm biến nhiệt độ pt100. Và đây cũng là lý do vì sao
cảm biến nhiệt độ RTD (cảm biến nhiệt điện trở) thường được gọi chung là cảm
biến nhiệt độ Pt100.


Hình 2 Cảm biến Pt100

Cảm biến nhiệt độ Pt100 có 6 thành phần chính:
 Đầu dị nhiệt: thành phần quan trọng nhất, thường được làm bằng platinium
hoặc nickel.
 Dây kết nối tín hiệu với đầu ra dạng 2 dây, 3 dây, 4 dây
 Chất cách điện: được làm bằng gốm giúp cách điện các dây nối từ vỏ bọc
bảo vệ.
 Chất làm đầy: chứa bột alumina được làm khô và đổ đầy vào nhằm bảo vệ
cảm biến khi bị rung động.
 Vỏ bảo vệ: là thành phần tiếp xúc trực tiếp với nguồn nhiệt cần đo, giúp bảo
vệ đầu dị cảm biến và dây tín hiệu của cảm biến
 Đầu củ hành: thường làm bằng các vật liệu cách điện như : nhựa , nhơm
hay gốm. Khi có sự thay đổi nhiệt độ trên đầu dị thì dẫn đến sự thay đổi
điện trở của ống trụ .Mỗi giá trị nhiệt độ khác nhau tương ứng với mỗi giá
trị điện trở khác nhau.Ở 10 ºC thì đo được giá trị điện trở RPT100 =107,6 Ω
. Khi tăng 1ºC thì RPT tăng sấp xỉ 0,4Ω Công thức điện trở phụ thuộc vào
3


nhiệt độ của PT100: Rt = R0(1+ AT)

Trong đó: A=0.004; T: nhiệt độ đo ;

R0=100 (om)

Hình 3 Bảng thông số điện trở của PT100 ứng với nhiệt độ đo

 Đọc dữ liệu cảm biến Pt100

Cảm biến Pt100 sẽ được nối với chân ADC 12bit của vi xử lý. Đầu ngõ vào ADC
của vi xử lý từ 0-3.6V, tín hiệu bit khi đọc tín hiệu điện áp từ Pt100 sẽ thay đổi từ
0000 0000 0000 – 1111 1111 1111. Vì vậy, khi điện áp thay đổi một khoảng
3.6
=0.88 mV thì tín hiệu của ADC sẽ dịch lên 1 bit.
212

4


Giả sử ta cấp dòng 1mA cho Pt100 qua IC LM334. Vì I ko đổi (nguồn dịng) nên U
sẽ thay đổi theo R. Tuy nhiên sự thay đổi của U rất nhỏ nên phải cho qua mạch
khuyếch đại để đựoc ngõ ra theo ý muốn. có thể có ngõ ra là 1mV/oC, 10mV/oC,
100mV/oC... tùy theo hệ số khuyếch đại của mạch . Tra hình 3 ta có, với sự thay
đổi nhiệt độ từ 0-100 độ, ta sẽ có điện áp hai đầu Pt100 khi đưa vào vi xử lý là
100mV-140mV. Từ đó, mỗi lần điện áp thay đổi 0.88mV thì nhiệt độ đọc được sẽ
thay đổi 2.2 độ. Chính vì vậy, để tăng độ chính xác ta sẽ phải lắp thêm mạch phân
áp và khuếch đại (có thể dùng OPAMP hoặc mua IC có sẵn) với hệ số khuếch đại
K=2.75. Lưu ý, khi khuếch đại thì phải cách ly để đảm bảo nguồn dịng cấp khơng
đổi.
2.2 Cảm biến LM35

Hình 4 LM35

5


Tuy vậy, để đơn giản và tiết kiệm linh kiện có sẵn, nhóm em sẽ sử dụng cảm biến
LM35 cho đề tài lần này. LM35 có thể đo nhiệt độ từ -55 đến 150 độ C với độ
chính xác ±0,5 độ C ở nhiệt độ phịng. Nó được thiết kế để tạo ra một điện áp đầu

ra tuyến tính với nhiệt độ, với tỷ lệ 10 mV/độ C.Điều này có nghĩa là, với mỗi độ C
tăng/giảm nhiệt độ, giá trị điện áp đầu ra của cảm biến sẽ tăng/giảm 10mV. Vì vậy,
để đọc giá trị nhiệt độ,chúng ta chỉ cần đo giá trị điện áp đầu ra của cảm biến
LM35 và chia cho 10.
2.3 Triac

Hình 5 Triac BTA12

Triac (Triode for alternating Current) là một linh kiện điện tử được dùng nhiều
trong đóng cắt dịng điện xoay chiều. Nói một cách đơn giản Triac cũng như một
cái chuyển mạch thơi. Nó được cấu tạo tương đương như 2 Thyristor mắc song
song với chiều ngược nhau. Tính năng hai chiều của Triac làm cho chúng chuyển
đổi thuận tiện cho dòng điện xoay chiều (AC). Ngồi ra, áp dụng một kích hoạt ở
góc pha điều khiển của AC trong mạch chính cho phép điều khiển dịng điện trung
bình chảy vào tải (điều khiển pha). Điều này thường được sử dụng để kiểm soát tốc
độ của động cơ cảm ứng, đèn mờ, và kiểm sốt máy sưởi điện. Tuy nhiên người ta
khơng sử dụng nó trong các ứng dụng chuyển mạch cơng suất cao – một trong
những lý do là đặc tính chuyển mạch khơng đối xứng của nó.
3. Thiết kế mơ phỏng và kết quả
3.1 Khối nguồn
Nhóm chúng em sử dụng nguồn đầu vào là adapter 9VDC. Mạch nguồn hạ áp 9V
xuống 5V dùng IC LM7805 là một mạch rất phổ biến trong các ứng dụng điện tử,
giúp cung cấp nguồn ổn định cho các linh kiện điện tử cần sử dụng điện áp ổn định
5V.Mạch nguồn này sử dụng IC LM7805, một IC ổn áp đơn với dải điện áp đầu
vào từ 7V đến 35V, dòng điện tối đa 1A và đầu ra ổn định 5V. Mạch cũng bao
6


gồm một tụ điện bù (tụ C1) để giảm nhiễu và tăng độ ổn định của đầu ra. Cấu trúc
mạch nguồn hạ áp 9V xuống 5V dùng LM7805 như sau:

Bước 1: Kết nối đầu vào của LM7805 với nguồn điện áp 9V thông qua đường dây
dương và âm.
Bước 2: Kết nối đầu ra của LM7805 với các linh kiện cần sử dụng điện áp ổn định
5V thông qua đường dây dương và âm.
Bước 3: Nối tụ C1 với đầu vào và đầu ra của LM7805, với mục đích giảm nhiễu và
tăng độ ổn định của đầu ra.
Đây là một mạch nguồn đơn giản, dễ thực hiện và sử dụng. Tuy nhiên, khi sử
dụng mạch nguồn này cần chú ý đến tản nhiệt của IC LM7805 để tránh quá nóng
và làm giảm tuổi thọ của nó. Ngồi ra, cũng cần lưu ý đến độ chính xác của đầu ra
5V để đảm bảo độ ổn định và an toàn cho các linh kiện điện tử.
3.2 Điều khiển nhiệt độ:

Hình 6 Mạch mô phỏng bắt điểm 0 của Triac

Khi dòng 220VAC 50Hz đi qua chỉnh lưu cầu, sóng sin sẽ được chuyển thành dao
động chu kỳ dương với chu kỳ bằng nửa chu kỳ dao động của dòng điện(T=10ms).
Khi điện áp qua diode quang lớn hơn 4.7V ( chiếm đa phần thời gian) , Led sẽ
sáng, kích dẫn transitor nối với GND. Lúc này, ngõ ra sẽ là 0V. Khi điện áp qua
diode quang nhỏ hơn 4.7V, Led không sáng, transitor không dẫn, chân tín hiệu kết
nối với vi điều khiển được nối xuống nguồn. Dựa vào điểm này, ta sử dụng ngắt
7


ngồi của vi điều khiển để nhận biết tín hiệu đồng bộ của điện áp xoay chiều, tính
góc mở của triac. Ta chỉ điều khiển thời gian trong khoảng thời gian từ 1ms tới
9ms. Vì điện áp cần có khoảng thời gian trễ để tăng lên tắt led.

Hình 7 Mô phỏng bắt điểm 0

Hình 8 Mạch mô phỏng điều khiển nhiệt độ


MOC3021 : bên trong gồm 1 con diode phát quang ( hoặc LED) và 1 con triac
quang. Khi có dịng qua diode quang, sẽ làm diode sáng, kích dẫn triac trong MOC
dẫn, cho dòng AC chạy qua. Mạch phát hiện điểm 0 sẽ phát ra các xung đưa vào vi

8


xử lý. Vi xử lý xuất tín hiệu điều khiển mạch kích Triac từ đó điều khiển góc mở
điện áp cấp cho bóng đèn.

Hình 9 Tín hiệu điều khiển của mạch kích Triac

Hình 10 mơ phỏng tín hiệu điều khiển Triac

9


3.3Thiết kế mạch trên Altium

Hình 11 Mạch tổng thể

3.4 Xác định hàm truyền của hệ thống và bộ điều khiển PID
Do thành phần nhiệt độ thay đổi khơng tuyến tính, nên để giảm sai số do thành
phần D ta sẽ chọn bộ điều khiển PI. Sau khi chọn bằng kinh nghiệm, ta thu được
chỉ số Kp Ki như sau: Kp= ; Ki=
.

10



Hình 12 Hàm truyền và bộ điều khiển PID

3.4 Thiết kế chương trình
Tín hiệu từ cảm biến LM35 sẽ được gửi về vi xử lý, sau đó hiển thị lên màn hình
LCD để người sử dụng dễ theo dõi. Nhiệt độ đọc được sẽ được so sánh với giá trị
đặt mà người sử dụng đặt thông qua UART. Nếu người dùng không cài đặt giá trị
nhiệt độ đặt ban đầu thì sẽ mặc định là 40 ℃ . Giá trị sai lệch sẽ là đầu vào của bộ
điều khiển PID số được lập trình trong vi điều khiển. Đầu ra của bộ điều khiển sẽ
là giá trị nằm trong khoảng thời gian giữa 2 lần liên tiếp điểm 0 của Triac. Sử dụng
ngắt ngồi để đọc tín hiệu gửi về của mạch phát hiện điểm 0.
Tại mỗi lần vi điều khiển nhận ngắt thì đấy chính là thời điểm có thể mở Triac với
độ mở lớn nhất. Khi ta điều chỉnh thời gian mở Triac thì cũng là điều chỉnh điện áp
cấp vào cho bóng đèn. Bằng việc thực hiện làm chậm trễ khoảng thời gian kích dẫn
dịng điện đến chân G của Triac là ta có thể điều khiển được.

11


CHƯƠNG 3: KẾT QUẢ THỰC NGHIỆM

Hình 13 Mạch đã hoàn thiện

CHƯƠNG 4: KẾT LUẬN
1. Những điểm làm được
- Phân tích được nguyên lý hoạt động, chọn được thiết bị cho mạch đọc và
điều khiển nhiệt độ nguồn 220 VAC.
- Tìm hiểu về cảm biến Pt100 và cách đọc.
- Thiết kế và làm thành công phần cứng mạch đọc nhiệt độ từ cảm biến
LM35 về vi điều khiển và hiển thị lên LCD khá chính xác.

- Thiết kế mơ phỏng phần điều khiển nhiệt độ trên nền tảng Proteus, lập
trình được chương trình bắt điểm 0 và điều khiển góc mở TRIAC điều
khiển bóng đèn.
- Xác định hàm truyền đối tượng và chỉnh định bộ điều khiển PID
- Mạch đã có cầu chì và cách ly giữa điện áp 220V và vi điều khiển.
2. Những điểm chưa làm được
- Phần bảo vệ còn hạn chế khiến nguy hiểm khi thực hiện. Đặc biệt phần
hàn đáy chưa được bảo vệ nên hạn chế động chạm.
- Vấn đề tản nhiệt còn kém nên linh kiện dễ hỏng hóc( IC LM7805 )

12


PHỤ LỤC
 Thư viện hiển thị LCD ( sử dụng thư viện có sẵn trên mạng)
#include "i2c_lcd.h"
extern I2C_HandleTypeDef hi2c2;

// change your handler here accordingly

#define SLAVE_ADDRESS_LCD 0x4E // change this according to ur setup

void lcd_send_cmd (char cmd)
{
char data_u, data_l;
uint8_t data_t[4];
data_u = (cmd&0xf0);
data_l = ((cmd<<4)&0xf0);
data_t[0] = data_u|0x0C;


//en=1, rs=0

data_t[1] = data_u|0x08;

//en=0, rs=0

data_t[2] = data_l|0x0C;

//en=1, rs=0

data_t[3] = data_l|0x08;

//en=0, rs=0

HAL_I2C_Master_Transmit (&hi2c2, SLAVE_ADDRESS_LCD,(uint8_t *)
data_t, 4, 100);
}

void lcd_send_data (char data)
{
char data_u, data_l;
uint8_t data_t[4];
data_u = (data&0xf0);

13


data_l = ((data<<4)&0xf0);
data_t[0] = data_u|0x0D;


//en=1, rs=0

data_t[1] = data_u|0x09;

//en=0, rs=0

data_t[2] = data_l|0x0D;

//en=1, rs=0

data_t[3] = data_l|0x09;

//en=0, rs=0

HAL_I2C_Master_Transmit (&hi2c2, SLAVE_ADDRESS_LCD,(uint8_t *)
data_t, 4, 100);
}

void lcd_init (void)
{
lcd_send_cmd (0x33); /* set 4-bits interface */
lcd_send_cmd (0x32);
HAL_Delay(50);
lcd_send_cmd (0x28); /* start to set LCD function */
HAL_Delay(50);
lcd_send_cmd (0x01); /* clear display */
HAL_Delay(50);
lcd_send_cmd (0x06); /* set entry mode */
HAL_Delay(50);
lcd_send_cmd (0x0c); /* set display to on */

HAL_Delay(50);
*/

lcd_send_cmd (0x02); /* move cursor to home and set data address to 0
HAL_Delay(50);
lcd_send_cmd (0x80);

}

14


void lcd_send_string (char *str)
{
while (*str) lcd_send_data (*str++);
}

void lcd_clear_display (void)
{
lcd_send_cmd (0x01); //clear display
}

void lcd_goto_XY (int row, int col)
{
uint8_t pos_Addr;
if(row == 1)
{
pos_Addr = 0x80 + row - 1 + col;
}
else

{
pos_Addr = 0x80 | (0x40 + col);
}
lcd_send_cmd(pos_Addr);
}

 PID
#include "PID.h"
#include <math.h>

15


float PIDcal(float setpoint,float actual_position)
{
//

static float pre_error = 0;
static float integral = 0;
float error;

//

float derivative;
float output;
//Caculate P,I,D
error = setpoint - actual_position;
//In case of error too small then stop intergration
if(abs(error) > epsilon)
{

integral = integral + error*dt;
}

//

derivative = (error - pre_error)/dt;

//

output = Kp*error + Ki*integral + Kd*derivative;
output = Kp*error + Ki*integral ;
//Saturation Filter
if(output > MAX)
{
output = MAX;
}
else if(output <= MIN)
{
output = MIN;
}
//Update error

16


//

pre_error = error;

return output;

}

 Hàm đọc giá trị nhận về
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
if(htim->Instance == htim2.Instance){
//

HAL_ADC_Start(&hadc1);

//

HAL_ADC_PollForConversion(&hadc1, 1000);

//

sensor_value = HAL_ADC_GetValue(&hadc1);

//

temp = ((float)(sensor_value*3.3*100))/4096;

//

HAL_ADC_Stop(&hadc1);
}
if(htim->Instance == htim9.Instance){

//

for(int i =0 ;i<10;i++){

HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, 1000);
sensor_value = HAL_ADC_GetValue(&hadc1);
HAL_ADC_Stop(&hadc1);
temp = ((float)(sensor_value*3.3*100))/4096;
//

temp+=temp1;

//}
//

temp = temp/10;
thoigian = 10-PIDcal(Nhietdodat,temp);

}

17


if(htim->Instance == htim10.Instance){
count++;
if(count == 10){
//val_temp = (uint16_t)temp;
sprintf(&tam3,"%.1f",temp);
lcd_goto_XY(2,10);
lcd_send_string(&tam3);
count = 0;
}
}

}

 Hàm hiển thị LCD
lcd_init();
lcd_goto_XY(1,0);
lcd_send_string("Setpoint:");
lcd_goto_XY(1,10);
sprintf(&temp_dat,"%d",Nhietdodat);
lcd_send_string(&temp_dat);
lcd_goto_XY(1,14);
lcd_send_string("oC");

lcd_goto_XY(2,0);
lcd_send_string("Feedback:");
lcd_goto_XY(2,14);
lcd_send_string("oC");

 Hàm điều khiển góc mở Triac
18


if(HAL_GPIO_ReadPin(zero_GPIO_Port,zero_Pin) == 1)
{
tam = (int)thoigian *1000;
delay_us(tam);
HAL_GPIO_WritePin(triac_GPIO_Port,triac_Pin,GPIO_PIN_SET);
delay_us(200);
HAL_GPIO_WritePin(triac_GPIO_Port,triac_Pin,GPIO_PIN_RESET);
}


19



×