Cách tính nhiệt độ trong đề tài

Một phần của tài liệu Điều khiển nhiệt độ nhiều kênh dùng dsPIC (Full Code) (Trang 51)

Cảm biến LM35 là cảm biến tương tự vì vậy ta phải dùng bộ ADC chuyển sang tương tự thì mới tính toán được nhiệt độ.

Ta có: U= t.k u là điện áp đầu ra

t là nhiệt độ môi trường đo, k là hệ số theo nhiệt độ của LM35 10mV/1 độ C

Điện áp cấp cho LM35 là 5V ADC 12bit

Vậy bước thay đổi của LM35 sẽ là 5/(2^12) = 5/4096 Giá trị ADC đo được thì điện áp đầu vào của LM35 là (t*k)/(5/4096) = ((10^-2)*4096*t)/5 = 4.096*t

Vậy nhiệt độ ta đo được t = giá trị ADC/4096 Tính nhiệt độ trong đề tài:

coun_adc = 0; sum_adc = 0; while(coun_adc < 3000){ adc = read_adc(); sum_adc += adc; coun_adc++; }; tdo_1 = sum_adc/30000;

3.2.3 Cách tính toán PWM duty trong đề tài

Các ký hiệu:

+ Kp, Ki, Kd lần lượt là các hệ số Kp,Ki, Kd. + err là sai lệch hiện tại (trong lúc đang xét). + pre_err là sai lệch ngay trước đó.

+ e_sum là tổng của tất cả các sai lệch từ lúc bắt đầu đến thời điểm đang xét.

+ t_da là nhiệt độ đặt (oc).

+ t_do là nhiệt độ đo đọc được từ cảm biến LM35. + duty là độ rộng của xung PWM.

- Cách tính:

#define period 5000 err_1 = tda_1 - tdo_1;

p_part_1 = (signed int32)kp_1*err_1; if(p_part_1 > period){p_part_1 = period;}; if(p_part_1 < -period){p_part_1 =- period;}; if(ki_1 != 0){

i_part_1 += ((signed int32)ki_1*err_1); }

else{

i_part_1 = 0; };

if(i_part_1 > period){i_part_1 = period;}; if(i_part_1 < -period){i_part_1 =- period;};

if(tdo_1 >= tda_1){i_part_1 = 0;}; d_part_1=((signed int32)kd_1*(err_1 - pre_err_1)); if(d_part_1 > period){d_part_1 = period;};

if(d_part_1 < -period){d_part_1 =- period;}; pre_err_1 = err_1; output_1 = p_part_1 + i_part_1 + d_part_1; if(output_1 > period){output_1 = period;}; if(output_1 < 0){output_1 = 0;};

if(tdo_1 > tda_1){output_1 = 0;}; temp = output_1*65472/period; set_pwm_duty(1,temp);

Một phần của tài liệu Điều khiển nhiệt độ nhiều kênh dùng dsPIC (Full Code) (Trang 51)