Quét lệnh bàn phím

Một phần của tài liệu Ứng dụng cảm biến khoảng cách laser trong đo lường (Trang 88 - 98)

Để điều khiển hệ thống đo thì người điều khiển phải thao tác thông qua các phím bấm. Các phím bấm thực hiện chức năng điều khiển hệ thống như : lấy chuẩn quy "0" tức là đặt giá trị đo hiện tại về giá trị gốc 0, lấy giá trị bù để mở rộng khoảng đo, lưu trữ hay đọc các giá trị đã lưu trữ.

Hệ thống có 8 phím bấm, ta gán cho mỗi phím một mã tương ứng với lệnh điều khiển, mã có giá trị từ 0 ÷ 7, mã có giá trị bằng 8 là khi không có lệnh điều khiển, bộ xử lý sẽ bỏ qua khi gặp giá trị này. Tần số quét bàn phím là 100ms là khơngr thời gian mà bộ xử lý đã lấy xong giá trị trung bình của 20 lần đo liên tiếp.

char scan(void) {

if(GS) {sw_input = 1; temp = 10;};

while( ~GS && sw_input ) {

delay_ms(60);

while(~GS && sw_input) {sw_input = 0;

temp = (PINA & 0x70)>>4; beep(); }; }; return temp; } 5.1.2. Quét lệnh máy tính.

Lệnh máy tính điều khiển theo phương thức truyền nối tiếp không đồng bộ. Vì vậy ta sử dụng chức năng ngắt (usart interrupt) tức khi nào có tín hiệu điều khiển

trong giao tiếp với máy tính, đây là giao thức đơn gi ản gồm 6 byte gửi lên từ máy tính.

interrupt [USART_RXC] void usart_rx_isr(void) {

char status,data; // Khai báo biến

status=UCSRA; //Trạng thái đường truyền data=UDR; //Dữ liệu nhận 8 bít

if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0) {

rx_buffer[rx_wr_index]=data; // Nhận dữ liệu 6 byte

if (++rx_wr_index == 6) // Khi đủ 6 byte tiến hành đọc và xử lý {rx_wr_index=0;

If (rx_buffer[0] ==0x72) // Kí tự "r" đọc giá trị từ bộ xử lý {

... };

If (rx_buffer[0] ==0x77) //Kí tự"w" ghi dữ liệu vào bộ xử lý { ... }; }; }; }

5.1.3. Đọc giá trị từ khối A/D

Thực hiện tiếp nhận dữ liệu từ khối A/D theo phương thức truyền SPI. Đường truyền SPI cũng là dạng truyền nối tiếp nhưng có tốc độ cao, thường đây là dạng giao tiếp giữa các thiết bị ngoại vi với nhau trong đó có thiết lập quan hệ "chủ - tớ".

Hinh 5-2 Dữ liệu trên đường truyền SPI

Giao tiếp với vi mạch MCP3202 có hai bít SGL/DIFF và ODD/SIGN là định chế độ hoạt động cho vi mạch. Như vậy trong một chu trình nhận một dữ liệu ta cần truyền lệnh 4 bit để định chế độ hoạt động và sau đó là nhận 12 bít dữ liệu đo được.

unsigned int load_adc(void) {

unsigned int adc; CS = 0;

spi(0b1110); // chọn kênh vào CH0 độc lập. adc = (unsigned)spi(0x00)<<5; //Nhận 7 bít cao

adc|=spi(0x00)>>3; // Nhận 5 bít thấp còn lại trong 12 bít CS = 1;

5.1.4. Quy đổi giá trị đo

Thực hiện đọc dữ liệu và quy đổi giá trị tương ứng với khoảng cách đo tính theo đơn vị µm. Để loại trừ trường hợp số đo bị dao động do bị lượng tử hóa gây nên thì ta lấy khoảng 20 giá trị đo liên tiếp rồi sau đó lấy trung bình cộng các giá trị đó. Việc xử lý trên máy tính có tốc độ xử lý cao và linh hoạt hơn, vì thế số liệu gửi lên máy tính là số liệu thô.

for(i = 0;i<20;i++) {

adc_read = load_adc(); (adsbygoogle = window.adsbygoogle || []).push({});

giatri_adc[i] = adc_read; // Lấy mẫu 20 giá trị đo liên tiếp trong 100ms

delay_ms(5); };

temp = 0;

for(i = 0;i<20;i++)

{temp = temp + giatri_adc[i]; //Lấy tổng 20 giá trị liên tiếp.

}

Trungbinh_adc = (int)(temp/20); // Giá trị trung bình cộng

if ( (measure <820) || (measure >4090)){ sprintf(str,"NGOAI KHOANG DO!"); lcd(1,str);

} else{

quydoi = 3277-(trungbinh_adc - 819); // Quy đổi giá trị

if (scan() == 6) // Lệnh chuẩn "0" {giatri_chuan0 = quydoi;

Delay_ms(300); // Thực hiện lấy chuẩn ‘0’ };

sprintf(str," %+.0f um ", giatri_dothuc); // Hiển thị kết quả đo.

lcd(1,str); };

Giá trị khi truyền lên máy tính là dạng ASCII nên từ giá trị đo dạng số ta cần đổi sang dạng ký tự. Giá trị đo lớn nhất là 4095 có 4 chữ số, ta cần chuyển 4 chữ số đó sang 4 ký tự tương ứng ví dụ là "4", "0", "9", "5". Khi đó ta cần chuyển đổi như sau:

Void int_to_4BCD(int input) {

int high_value,low_value; char bcd1,bcd2,bcd3,bcd4;

high_value = input/100; // chữ số hàng nghìn, trăm low_value = input%100; // chữ số hàng chục, đơn vị

while (high_value >= 10) {

Bcd1++;

high_value -= 10; };

Bcd1+ = 48; // quy đổi mã ASCII chữ số hàng nghìn Bcd2 = high_value + 48; // quy đổi mã ASCII chữ số hàng trăm

while (low_value >= 10) {

Bcd3++;

low_value -= 10; };

}

5.2.Chương trình xử lý trên máy tính.

Quá trình đo có thể thực hiện trên máy tính với tất cả các thao tác đo và đồng thời xử lý được kết quả đo. Chương trình máy tính có thể thay đổi một cách linh hoạt mà không phụ thuộc nhiều vào phần cứng. Để áp dụng cho hệ thống đo bằng optimet dùng trong thí nghiệm, ta xây dựng chương trình theo từng bước thực hành thí nghiệm là đưa ra được bảng thông số đo, bao gồm các giá trị trong mỗi lần đo, đánh giá kết quả đo, xây dựng biểu đồ ...

Chương trìnhđược viết bằng phần mềm lập trình Visual Basic cóưu điểm là đơn giản, trực quan và thích hợp với điều kiện của phòng máy. Số liệu đo được nhận liên tục từ hệ thống mạch đo, vì là số liệu thô nên cần các thuật toán tính toán như chương trình của bộ xử lý. Ngoài ra chương trình có nhiệm vụ điều khiển hoạt động và kiểm soát trạng thái của bộ xử lý. Như vậy hoạt động giữa máy tính và bộ xử lý là hai chiều qua lại. Máy tính đóng vai trò là "chủ", và bộ xử lý đóng vai trò là "tớ ", có nghĩa là khi máy tính gửi đến một lệnh yêu cầu thì lúcđó bộ xử lý hồi đáp lại yêu cầu. Với hệ thống phức thì giao thức (protocol) lệnh này được quy chuẩn, nhưng đối với chương trình không phức tạp thì giao thức này quy định riên g do người sử dụng đặt. Đối với hệ thống ta đặt ra giao thức như sau:

` Dữ liệu đo và trạng (adsbygoogle = window.adsbygoogle || []).push({});

thái hoạt động Tín hiệu điều khiển

Lệnh yêu cầu (Request message): gồm 1 byte ghi/đọc; 1 byte lệnh; 4 byte dữ liệu.

Bảng 5-1 Giao thức truyền dữ liệu

Lệnh yêu cầu Ghi/đọc (1 byte) Lệnh (1 byte) Dữ liệu (4 byte)

Lệnh hồi đáp Lệnh (1 byte) Dữ liệu (4 byte)

Dữ liệu truyền theo ký tự ASCII, vì vậy số đo ở dạng thập phân gồm 4 chữ số (lớn nhất là 4095) được chuyển thành dạng BCD là 4 ký tự "0", "1" ,...,"9" (vị trí 48 ÷57) ; "A", "B", ...,"Z" (vị trí 65 ÷ 90) hoặc "a", "b", ...,"z" (vị trí 97 ÷ 122) tương ứng.

5.2.1. Xử lý các chức năng truyền dữ liệu.

1. Thiết lập cổng truyền.

Các thông số của đường truyền như đã giới thiệu ở mục 3.3.4.2, như vậy việc thiết lập bao gồm đặt các tham số như: baud rate, data bit, parity, stop bit ...

With MSComm1

.CommPort = 1 'chọn cổng COM1

.Settings = "19200,N,8,1" 'baud 19200bps, none parity, 8 bit data, 1 bit stop .InBufferSize = 1024 .InputLen = 0 .RThreshold = 5 .SThreshold = 6 .OutBufferSize = 512 .InputMode = comInputModeBinary .PortOpen = True End With 2. Lệnh yêu cầu

lý, ghi (kí tự "w") yêu cầu ghi giá trị vào biến của bộ xử lý, lệnh điều khiển (kí tự "c") để điều khiển hoạt động của bộ xử lý. Byte thứ hai là lệnh điều khiển, nếu là đọc/ghi thìđây là tên biến cần truy cập, nếu là điều khiển thìđây là lệnh điều khiển như thao tác trên phím bấm. 4 byte còn lại mang dữ liệu dạng ASCII, nếu là đọc/ghi thì là giá trị số, nếu là điều khiển thì là giá trị 0.

Dim byte_tx() as byte byte_tx(0) = xxx byte_tx (1) = xxx byte_tx (2) = xxx byte_tx (3) = xxx byte_tx (4) = xxx byte_tx (5) = xxx If flag_tx = 0 then Mscomm.output = byte_tx() flag_tx = 1 End if 3. Lệnh hồi đáp

Sau khi phát đi lệnh yêu cầu, bộ xử lý sẽ phản hồi lại yêu cầu đó. Dữ liệu nhận được lưu vào bộ đệm nhận rx_buffer. Khi đó phát sinh sự kiện mscomm_oncom(), biến comm_even có giá trị báo đã nhận đủ dữ liệu.

Private Sub MSComm1_OnComm() Dim Byte_rx() as byte

On Error GoTo error_comport

If MSComm1.CommEvent = comEvReceive then Select case byte_rx(0)

Case "c" 'khi nhận lệnh điều khiển ...

Case "w" ' Khi nhận lệnh ghi ... End select End if Error_comport: End Sub 5.2.2. Xử lý số liệu

Phần này cũng thực hiện các bước xử lý như trên bộ xử lý, số liệu đo thực khi nhận được sẽ có chương trình xử lý nâng cao và lưu trữ lại tạo thành tệp. Giao diện được thiết lập dạng bảng đo với các mục như nội dung thực hành thí nghiệm, ngoài ra còn có thể có chức năng đồ họa, xây dựng biểu đồ đo... Số liệu đo được cập nhật liên tục từ bộ xử lý, tất cả quá trình tính toán được thực hiện tức thời để đưa ra kết quả đo hiện tại. Phần giao diện được thiết kế như Hinh 5-3 bao gồm giao diện điều khiển và phần hiển thị kết quả đo.

Hinh 5-3 Giao diện phần mềm quản lý đo.

Sau một thời gian tìm hiểu và thực hiện thiết kế cải tiến, tôi đã hoàn thành được nội dung đồ án đề ra và thực hiện thử nghiệm trên mẫu thật. Nhiệm vụ đó là nghiên cứu được về nguyên lý hoạt động của các thiết bị đo không tiếp xúc và khả năng ứng dụng của nó trong thực tế; thiết kế cải tạo trên dụng cụ đo tại phòng thí nghiệm và thực hiện xử lý tín hiệu đo. Qua số liệu đánh giá bằng kết quả thực nghiệm tôi thấy rằng phương pháp mới này còn có một số khuyết điểm chưa thể khắc phục được. Đó là hiện tượng sai số đo quá lớn đối với những vật đo có bề mặt nhẵn bóng (vật đo có bề mặt gia công tinh, căn mẫu) bởi vìđầu đo laser sử dụng là đầu đo khuyếch tán, điều đó không thể khắc phục do điều kiện trang bị của phòng thí nghiệm. Phần mạch xử lý hoạt động ổn định, tuy nhiên do độ phân giải chưa cao nên chưa tận dụng hết khả năng đo của đầu đo laser. Tuy nhiên sau khi nghiên cứu phương pháp đo không tiếp xúc, tôi thấy rằng khả năng ứng dụng rất cao do những tính chất ưu việt của nó. Có thể thiết kế hệ thống đo sai số hình học cho các chi tiết đang làm việc mà không cần phải tháo ra khỏi máy (như độ mòn dao, độ đảo trụ quay ...) hoặc ứng dụng cho hệ thống quét mẫu 3D... Và khả năng ứng dụng trong tương lai là thiết kế những hệ thống đo có tính công nghệ cao như máy đo lỗ sâu, máy quết biên dạng hình học 3 chiều có thể kết nối với hệ xử lý của máy tính...

Với sự hướng dẫn tận tình của thầy giáo Hồ Việt Hải, cùng sự giúp đỡ của các thầy giáo trong bộ môn Chế Tạo Máy đã giúp tôi hoàn thành nội dung nghiên cứu. Tuy nhiên do hạn chế về kinh nghiệm và kiến thức, do điều kiện trang bị nên còn gặp một số sai sót là không tránh khỏi. Tôi rất mong nhận được sự đóng góp và giúp đỡ của các thầy và các bạn.

1. Dương Tử Cường. Xử lý tín hiệu số. Học viện Kĩ Thuật Quân Sự.

2. Trần Văn Địch.Nghiên cứu độ chính xác gia công bằng phương pháp thực

nghiệm. Nhà xuất bản KH&KT 2003.

3.Đỗ Lương Hùng.Kỹ thuật đo lường điện tử. Đại học Giao thông vận tải. 4. Ngô Diên Tập. Đo lường bằng máy tính. NXB KH&KT 2001.

5. Nguyễn Tiến Thọ, Nguyễn thị Xuân Bảy, Nguyễn Thị Cẩm Tú. Kỹ thuật đo lường kiểm tratrong chế tạo cơ khí. Nhà xuất bản KH&KT 2001.

6. Non-linear displacement sensor based on optical triangulation principle. US Patent 5113080. (adsbygoogle = window.adsbygoogle || []).push({});

7. Capacitive Proximity sensors. Tài liệu hãng SIEMEN.

8. High-precision displacement measurement device and method using unit displacement sensor based on confocal theory. US Patent 6563098.

Một phần của tài liệu Ứng dụng cảm biến khoảng cách laser trong đo lường (Trang 88 - 98)