Lập trình cho vi điều khiển PIC16F877A

Một phần của tài liệu đo liều lượng bức xạ bằng phương pháp đo khoảng thời gian giữa hai sự kiện (Trang 35 - 56)

2.4.1. Chương trình soạn thảo và biên dịch CCS C

Một vi điều khiển muốn hoạt động được cần phải có một chương trình điều khiển. Vi điều khiển chỉ hiểu và làm việc với hai con số 0 và 1. Lập trình cho vi điều khiển là làm việc với các con số 0 và 1. Ngày nay các vi điều khiển có kiến trúc phức tạp hơn và có nhiều thanh ghi lệnh hơn nên đòi hỏi sự ra đời của các loại ngôn ngữ lập trình. Đầu tiên là ngôn ngữ hợp ngữ (assembly). Sau này khi ngôn ngữ C ra đời, với các câu lệnh ngắn gọn và dễ hiểu hơn, mã lệnh được tối ưu khi biên dịch nó dần được thay thế cho ngôn ngữ ASM trong lập trình. Cùng với đó là sự ra đời của các chương trình soạn thảo và trình biên dịch C cho vi điều khiển như: CCS C, HT-Pic, Keil C, Mikro C…Trong đồ án này sử dụng trình soạn thảo và biên dịch CCS C. Đây là một công cụ mạnh cho việc lập trình bằng ngôn ngữ C.

CCS C giúp người dùng nắm bắt nhanh vi điều khiển PIC và đạt hiệu quả cao. CCS C chứa rất nhiều hàm phục vụ cho mọi mục đích và có nhiều cách lập trình mã cho cùng một vấn đề dẫn đến khác nhau về tốc độ thực thi mã và độ dài chương trình. Sự tối ưu đó là do kỹ năng lập trình của mỗi người dùng. CCS C cũng có đủ khả năng để không cần phải chèn thêm bất kỳ dòng lệnh ASSEMBLY (ngôn ngữ hợp ngữ - ngôn ngữ máy) nào. Nhưng CCS C vẫn cho phép phối hợp với ASSEMBLY cùng với C, như cung cấp tiện ích giám sát hoạt động của chương trình (C/ASM list) cho phép xem mã ASM của chương trình

biên dịch, giúp người dùng quản lý mã và nắm được cách thức mã sinh ra và chạy như thế nào. Và còn nhiều công cụ tiện ích khác trong mục Tool.

Hiện nay có khá nhiều hướng dẫn sử dụng CCS C nhưng quan trọng nhất vẫn là phần Help của chương trình. Trong đó đã bao gồm tất cả các hướng dẫn về khai báo biến, sử dụng câu lệnh và các ví dụ cụ thể.

Để bắt đầu một chương trình nhấn tạo một project. Chương trình sẽ khai báo sẵn các thông số ban đầu như: loại PIC, tên PIC, Timer nào, dùng ở chế độ gì, có sử dụng, ADC không....Tất cả các lựa chọn đó sẽ chuyển thành lệnh trong chương trình, có thể xem mã sinh ra ngay trong phần này. Nhiệm vụ của người lập trình là viết chương trình bằng các lệnh C trong CCS C.

2.4.2. Lưu đồ chương trìnhvới CCS C

Chương trình điều khiển PIC16F877A trong đồ án được mô tả như lưu đồ hình 2-11.

Bắt đầu

Khởi tạo chương trình

(Đọc các thông số của chương trình, hệ số khớp hàm)

Bật cao áp Đọc bộ đếm Tính trung bình Truyền ra máy tính Kết thúc Đợi có xung bức xạ Khớp hàm

Bắt đầu chương trình, vi điều khiển PIC sẽ đọc các thông số khởi tạo ban đầu trên các thanh ghi, đọc hệ số khớp hàm. Sau đó PIC xuất xung điều khiển ra chân 16. Có xung điều khiển, cao áp sẽ hoạt động đồng thời bộ đo thời gian phát xung vào bộ đếm. Đợi có bức xạ được ghi nhận, thì đồng thời bộ đo thời gian bị đóng, cao áp ngừng hoạt động, và tạo tín hiệu ngắt. Khi đó vi điều khiển sẽ đọc bộ đếm sau đó lưu số đếm vào bộ đệm để tính trung bình. Từ kết quả trung bình PIC sẽ gán vào hàm để tính ra suất liều rồi truyền ra máy tính. Sau khi tính toán PIC điều khiển cao áp hoạt động trở lại để thực hiện quá trình đếm với xung tiếp theo. Vòng lặp sẽ ngừng khi có điều kiện sai.

PHẦN 3 - KẾT QUẢ CHUẨN MÁY VÀ ĐO ĐẠC THỬ NGHIỆM

Dưới đây là một số hình ảnh về mạch in và ống đếm GM.

Hình 3-3: Ống đếm có vỏ bọc

3.1. Nguồn bức xạ

Sử dụng nguồn Cs-137 có hoạt độ nguồn 37 MBq được đo ngày 28-8-2008 tại Trung tâm an toàn hạt nhân - Viện KH&KT hạt nhân.

Như vậy có thể tính được hoạt độ của nguồn Cs-137 tại thời điểm hiện tại 5/2010. Tính toán bằng phần mềm RadProCalculator do IAEA cung cấp và được phát hành miễn phí trên mạng internet, hoặc tính toán trực tiếp hoạt độ nguồn bằng công thức: 0 0 1/2 ln 2 .exp( ) .exp( ) A A= −λt =AT t (3-1) Trong đó:

A0, A: hoạt độ nguồn ban đầu và hiện tại (MBq)

λ: hằng số phân rã (=ln2/T1/2)

T1/2: chu kỳ rã nửa (đối với Cs-137: 30,7 năm) t: thời gian từ lúc đo hoạt độ ban đầu tới hiện tại được A = 35.6MBq

Dùng chương trình RadProCalculator tính toán suất liều tại các vị trí cách nguồn lần lượt 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70 (cm) được bảng kết quả như bảng 1.

Bảng 1: Suất liều tại các vị trí cách nguồn một khoảng r (cm)

r (cm) Suất liều (µSv/h) 20 67.89 25 43.44 30 30.16 35 22.16 40 16.96 45 13.4 50 10.85 55 8.97 60 7.53 65 6.42 70 5.53 3.2. Tiến hành đo đạc

Nạp chương trình (phụ lục) cho PIC với giải thuật như lưu đồ hình 2-13. Đặt nguồn Cs-137 tại vị trí cố định, dịch chuyển ống đếm theo khoảng cách đã tính liều chiếu như bảng 1. Tiến hành đo tại mỗi vị trí 3 lần, mỗi lần lấy 5 số liệu. Kết quả được thu thập và có bảng số liệu (phụ lục).

Sử dụng phần mềm Excel vẽ đồ thị tương quan giữa suất liều và thời gian như các hình 3-4.

Hình 3-4: Đồ thị chuẩn liều theo thời gian

Có thể thấy tương quan giữa suất liều và giá trị thời gian đọc từ bộ đếm theo công thức thực nghiệm sau:

y = k.x-1 (3-2) Với y: suất liều

x: thời gian đo

Từ đồ thị ta xác định được

k = 109

Sau khi xác định được hệ số k=109 đối với máy này, lập trình cho vi điều khiển chuyển đổi số đếm ra suất liều.

Từ đồ thị ta thấy suất liều tỉ lệ phi tuyến với số đếm. Kết quả có thể được sử dụng để chuyển đổi thành suất liều theo công thức (3-2), tuy nhiên đây chưa phải là kết quả như yêu cầu của bài toán đặt ra.

Có thể giải thích nguyên nhân dẫn tới kết quả đo không tuyến tính như sau. Thời gian chết của ống đếm vẫn có ảnh hưởng lớn tới kết quả đo. Thời gian hồi phục cao áp chưa hợp lý. Ngoài ra còn phải kể đến kỹ thuật chế tạo mạch in và hàn linh kiện, điều này cũng ảnh hưởng lớn tới sai số của kết quả đo. Do đó để phát triển tiếp đề tài cần tính toán thêm và hiệu chỉnh thời gian chết cho thiết bị sao cho kết quả đo khả quan hơn.

PHẦN 4 - KẾT LUẬN

Sau khi hoàn thành đồ án "Đo liều lượng bức xạ bằng phương pháp xác định khoảng thời gian giữa hai sự kiện", các kết quả đạt được là:

- Hiểu rõ thêm lý thuyết vật lý hạt nhân cũng như điện tử đã học.

- Sử dụng phần mềm Protel DXP thiết kế mạch và chế tạo thành công mạch điện tử thiết bị đo liều. Kết nối được mạch đo với máy tính.

- Nắm được hoạt động của chip vi điều khiển PIC. - Kết quả đo đạc ban đầu ổn định.

- Từ kết quả đo tìm ra công thức thực nghiệm chuyển đổi ra suất liều. - Hiểu rõ hơn quá trình làm thực nghiệm.

Về cơ bản đồ án đã hoàn thành một thiết bị đo liều sử dụng vi điều khiển và ống đếm GM. Song vẫn còn các hạn chế là:

- Kết quả đo chưa tuyến tính như mong muốn do chưa loại bỏ được ảnh hưởng thời gian chết của ống đếm.

- Thiết kế mạch in chưa chuyên nghiệp dẫn tới khó khăn trong việc kiểm tra nếu có lỗi phát sinh.

- Phần lập trình phần mềm điều khiển còn đơn giản, chưa .

- Chưa có điều kiện để nắm bắt hết các chức năng của vi điều khiển PIC. Hướng phát triển:

Như đã nói ban đầu, mục đích của thiết bị này nhằm làm giảm hoặc loại bỏ ảnh hưởng thời gian chết của ống đếm sao cho kết quả đo tuyến tính hơn nên hướng phát triển tiếp theo là tính toán thêm để điều chỉnh một số yếu tố trong thiết kế mạch điện tử, nâng cao kỹ năng thiết kế, chế tạo mạch, tìm hiểu và sử dụng các chức năng khác của vi điều khiển.

TÀI LIỆU THAM KHẢO

1. Datasheet PIC16F877A

2. Th.S. Ngô Tiến Phán – Bài giảng điện tử hạt nhân 3. Th.S. Ngô Tiến Phán – Bài giảng kỹ thuật xung số

4. Phùng Văn Duân – An toàn bức xạ – NXB Bách Khoa 2006 5. ThS. Nguyễn Tất Thắng - Bài giảng xác định liều lượng bức xạ 6. TS. Trần Kim Tuấn – Bài giảng thực nghiệm hạt nhân

Phụ lục 1. Kết quả đo đạc Khoảng cách (cm) Lần 1 (ms) Lần 2 (ms) Lần 3 (ms) 20 1.52 1.72 1.52 1.17 1.34 1.56 1.44 1.48 1.68 1.45 1.41 1.42 1.44 1.56 1.40 25 2.44 2.61 2.39 2.19 2.34 2.59 2.59 2.39 2.21 2.41 2.44 2.77 2.32 2.45 2.48 30 3.23 3.22 3.43 3.68 3.51 3.36 3.93 3.50 3.45

3.30 3.37 3.75 3.58 3.22 3.48 35 4.34 5.14 5.22 4.83 4.63 5.29 4.87 4.49 4.94 4.92 4.82 4.92 4.91 4.97 5.68 40 6.78 6.07 6.83 6.15 6.22 6.56 5.97 6.92 6.60 5.90 6.44 7.06 6.28 6.82 6.76 45 7.70 8.64 7.27 7.40 7.58 7.18 7.41 9.42 7.06 7.80 8.78 8.99

8.42 7.50 8.20 50 9.80 9.78 10.40 10.82 9.56 9.67 10.12 9.43 10.43 9.10 10.75 11.00 10.42 9.73 9.96 55 11.98 12.06 11.66 10.46 11.83 11.22 11.80 11.86 10.88 10.94 10.63 11.00 11.95 13.40 11.28 60 13.62 15.46 13.80 14.73 13.87 13.57 13.23 13.03 15.01 14.50 13.66 15.02 13.81 13.90 13.81 65

16.89 15.76 15.45 16.91 17.21 17.08 16.19 15.71 16.89 17.21 15.80 16.85 70 17.66 17.80 18.14 18.34 18.44 20.40 21.80 17.41 20.50 18.25 20.78 19.27 18.32 17.72 20.59

2. Chương trình phầm mềm điểu khiển PIC:

#include <16F877A.h> #include <def_877a.h> #include <math.h>

#FUSES NOWDT //No Watch Dog Timer #FUSES XT //Crystal osc <= 4mhz #FUSES NOPUT //No Power Up Timer

#FUSES NOPROTECT //Code not protected from reading #FUSES NODEBUG //No Debug mode for ICD

#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

#FUSES NOCPD //No EE protection

#use delay(clock=4000000)

#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) //giao tiep //noi tiep voi may tinh

#include <lcd_lib_4bit.c> int8 i;

short int st;

unsigned int32 count; float tbcount,dose; void hv(); //void average(); //--- #int_EXT void EXT_isr()

{ st=1; count=get_timer1(); set_timer1(0); // printf(" %ld \r\n",count); } //===================================== void main() { setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_psp(PSP_DISABLED); setup_spi(SPI_SS_DISABLED); setup_timer_0(RTCC_DIV_256|RTCC_INTERNAL); setup_timer_1(T1_DIV_BY_1|T1_EXTERNAL); setup_timer_2(T2_DISABLED,0,1); setup_vref(FALSE); enable_interrupts(INT_EXT);

enable_interrupts(GLOBAL); ext_int_edge(H_TO_L);

set_timer1(0);

TRISA=0x00; //PORT A LA OUTPUT TRISB=0xff; //PORT B LA INPUT TRISE=0x00; //PORT E LA OUTPUT

TRISC=0x01; //PIN_C0 PORT C LA INPUT // TODO: USER CODE!!

i=0; hv(); st=0; while(TRUE) { delay_ms(10); if (st==1) {

tbcount+=count; i++;

if(i>=55){ i=0; tbcount /= 55; printf(" %.2f \r\n",tbcount);} st=0;

dose = 103.4*312500/tbcount; //312500 : tan so xung chuan - quy doi //ve thoi gian

hv(); } //hv(); } } //====================================

void hv() //dieu khien cao ap {

output_high(PIN_C1); output_low(PIN_C1); }

3. Danh mục hình vẽ, bảng

Hình 1-1: Sơ đồ nguyên tắc hoạt động của ống đếm khí Hình 1-2: Vùng điện áp làm việc của các loại ống đếm khí Hình 1-3: Sơ đồ mắc ống đếm

Hình 1-4: Phân bố cường độ điện trường trong ống đếm trụ

Hình 1-5: Thời gian chết, thời gian phân giải, thời gian hồi phục của ống đếm GM Hình 1-6: Đặc trưng đếm của ống đếm GM

Hình 2-1: Sơ đồ khối

Hình 2-2: Sơ đồ nguyên lý toàn mạch Hình 2-3: Khối cao áp

Hình 2-4: Sơ đồ chân của PIC16F877A Hình 2-5: Sơ đồ khối của PIC16F877A Hình 2-6: Sơ đồ khối Timer0

Hình 2-7: Sơ đồ khối Timer1

Hình 2-8: Thiết kế phần cứng cho vi điều khiển Hình 2-9: Bộ đo thời gian

Hình 2-10: Giao diện khởi động của CCS C Hình 2-11: Lưu đồ chương trình điều khiển Hình 3-1: Mạch in hoàn thiện

Hình 3-2: Ống đếm GM đã được gá lắp Hình 3-3: Ống đếm có vỏ bọc

Hình 3-4: Đồ thị chuần liều theo thời gian

Một phần của tài liệu đo liều lượng bức xạ bằng phương pháp đo khoảng thời gian giữa hai sự kiện (Trang 35 - 56)

Tải bản đầy đủ (PDF)

(56 trang)