Nghiên cứu thiết kế và chế tạo máy đo áp suất của ổ đỡ thuỷ động có kết nối máy tính

Cách ghép nối máy BKM-10 với máy tính để lấy đƣợc kết quả đo: Với yêu cầu là có thể vẽ lên biểu đồ phân bố áp suất bên trong chu vi ổ dạng hai chiều, để vẽ đƣợc biểu đồ dạng hai chiều ta phải có hai giá trị là giá trị áp suất tại mỗi điểm bên trong ổ theo phƣơng chu vi ổ và tƣơng ứng là vị trí ứng với giá trị áp suất đó trong ổ. Để có hai giá trin này ta sử dụng đồng thời hai cảm biến đó là cảm biến đo áp suất và cảm biến đo vị trí và tín hiệu từ hai cảm biến này đƣợc đƣa vào hai đầu lấy tín hiệu vào của chuột tƣơng ứng với hai phƣơng dịch chuyển của con trỏ trên màn hình máy tính và nó làm cho con trỏ di chuyển tƣơng ứng.

pdf194 trang | Chia sẻ: lylyngoc | Lượt xem: 2350 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Nghiên cứu thiết kế và chế tạo máy đo áp suất của ổ đỡ thuỷ động có kết nối máy tính, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
r (nghĩa là giảm nguồn cho nó), nguồn motor đƣợc bật on/off một cách nhanh chóng. Phần trăm thời gian mà nguồn đƣợc bật sẽ quyết định phần trăm hoạt động mà nó đƣợc thực hiện Giảng đồ trình bày khái niệm này, trình bày tín hiệu PWM đến hoạt động motor tại 75%, 50%, 25% nguồn hoạt động. Một khoảng rộng của tần số có thể đƣợc sử dụng cho tín hiệu PWM Một dạng sóng PWM gồm 8 bit, mà mỗi một dạng sóng có thể là on hoặc off, đƣợc lập lại để sử dụng cho động cơ. Mỗi một phần trăm của giây, bit điều khiển quyết định motor là nạp hoặc ngắt. Mỗi 1/125 của giây dạng sóng đƣợc lập lại. Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 132 Hình 3.27 Nguyên lý PWM Thực chất của PWM là làm thay đổi tổng giá trị áp (trung bình) đặt vào hai đầu cực của động cơ. Khi áp trung bình thay đổi tức là làm thay đổi tốc độ động cơ ngay lập tức. Có nhiều phƣơng pháp điều khiển PWM: Phƣơng pháp tƣơng tự: tác động nhanh và liên tục. Phƣơng pháp số: có thể điều khiển chính xác vị trí và tốc độ của hệ truyền động. IC chuyên dụng. Dùng con vi điều khiển trện board. Có hai phƣơng pháp phổ biến nhất làm thay đổi tổng điện áp đặt vào hai cực động cơ Servo DC: Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 133 Hình 3.28 Các phương pháp PWM cho động cơ Servo Hình trên minh họa phƣơng pháp PWM cho Servo chuẩn (phƣơng pháp 1) và Servo số (phƣơng pháp 2) +Phƣơng pháp 1: Bằng cách thay đổi thời gian Ton và Toff. Trong khi chu kỳ xung vẫn giữ nguyên (không đổi) Ví dụ: Chúng ta mong muốn mức logic ngõ ra PWM dùng điều khiển tốc độ động cơ Servo DC. Khi đó, động cơ đạt tốc độ Minimum thi tƣơng ứng với tín hiệu PWM là 100% off 0% on và khi động cơ đạt tốc độ Maxi- mum thì tƣơng ứng với tín hiệu 0% off 100% on. Tuy nhiên điều này chỉ là lý thuyết, trong thực tế phƣơng pháp PWM không bao giờ đạt con số 100% off 0% on (hoặc 0% off 100% on) mà nó chỉ mang tính gần đúng . Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 134 Hình 3.29 Phương pháp PWM với tần số không đổi t1 = t2 = TON + TOFF = const Trong đó: t1, t2: chu kỳ xung Ton: thời gian On Toff: thời gian Off Theo tiêu chuẩn động cơ Servo, ta nên chọn chu kỳ xung t1=t2 =20ms Chúng ta thấy rằng, thời gian Ton càngtăng thì điện áp trung bình tƣơng ứng càng lớn, đồng nghĩa với tăng tốc độ động cơ và hoàn toàn ngƣợc lại nếu Ton càng nhỏ thì điện áp trung bình tƣơng ứng càng giảm, đồng nghĩa với giảm tốc độ động cơ Hình 3.19 Quan hệ giữa thời gian Ton với điện áp Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 135 + Phƣơng pháp 2: Bằng cách thay đổi tần số xung. Do đó trƣờng hợp này làm cho chu kỳ xung bị thay đổi, tức là: t1 ≠ t2 Hình 3.30 Phương pháp PWM với tần số thay đổi Nhìn chung cả 2 phƣơng pháp trên đều có một điểm chung đó là điều tiết PWM dẫn đến làm thay đổi tổng áp trung bình đặt vào hai cực VCC và GND của động cơ Servo DC. Tùy theo thế mạnh của từng phƣơng pháp, thế mạnh của ngƣời dùng mà lựa chọn phƣơng pháp nào là hợp lý, dễ sử dụng và mang lại hiệu quả cao Hình 3.32 Sơ đồ điều khiển động cơ DC Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 136 3.4. Mạch xử lý giao tiếp với máy tính a. Lý thuyết chung - Thuật ngữ USART trong tiếng anh là viết tắt của cụm từ: Universal Synchronous & Asynchronous serial Reveiver and Transmitter, nghĩa là bộ truyền nhận nối tiếp đồng bộ và không đồng bộ. Cần chú ý rằng khái niệm USART (hay UART nếu chỉ nói đến bộ truyền nhận không đồng bộ) thƣờng để chỉ thiết bị phần cứng (device, hardware), không phải chỉ một chuẩn giao tiếp. USART hay UART cần phải kết hợp với một thiết bị chuyển đổi mức điện áp để tạo ra một chuẩn giao tiếp nào đó. Ví dụ, chuẩn RS232 (hay COM) trên các máy tính cá nhân là sự kết hợp của chip UART và chip chuyển đổi mức điện áp. Tín hiệu từ chip UART thƣờng theo mức TTL: mức logic high là 5, mức low là 0V. Trong khi đó, tín hiệu theo chuẩn RS232 trên máy tính cá nhân thƣờng là -12V cho mức logic high và +12 cho mức low Chú ý là các giải thích trong tài liệu này theo mức logic TTL của USART, không theo RS232. - Truyền thông nối tiếp: giả sử bạn đang xây dựng một ứng dụng phức tạp cần sử dụng nhiều vi điều khiển (hoặc vi điều khiển và máy tính) kết nối với nhau. Trong quá trình làm việc các vi điều khiển cần trao đổi dữ liệu cho nhau, ví dụ tình huống Master truyền lệnh cho Slaver hoặc Slaver gởi tín hiệu thu thập đƣợc về Master xử lí…Giả sử dữ liệu cần trao đổi là các mã có chiều dài 8 bits, bạn có thể sẽ nghĩ đến cách kết nối đơn giản nhất là kết nối 1 PORT (8 bit) của mỗi vi điều khiển với nhau, mỗi line trên PORT sẽ chịu trách nhiệm truyền/nhận 1 bit dữ liệu. Đây gọi là cách giao tiếp song song, cách này là cách đơn giản nhất vì dữ liệu đƣợc xuất và nhận trực tiếp không thông qua bất kỳ một giải thuật biến đổi nào và vì thế tốc độ truyền cũng rất nhanh. Tuy nhiên, nhƣ bạn thấy, nhƣợc điểm của cách truyền này là số đƣờng truyền quá nhiều, bạn hãy tƣởng tƣợng nếu dữ liệu của bạn có giá trị Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 137 càng lớn thì số đƣờng truyền cũng sẽ nhiều thêm. Hệ thống truyền thông song song thƣờng rất cồng kềnh và vì thế kém hiệu quả. Truyền thông nối tiếp sẽ giải quyết vần đề này, trong tuyền thông nối tiếp dữ liệu đƣợc truyền từng bit trên 1 (hoặc một ít) đƣờng truyền. Vì lý do này, cho dù dữ liệu của bạn có lớn đến đâu bạn cũng chỉ dùng rất ít đƣờng truyền. Hình 3.16 mô tả sự so sánh giữa 2 cách truyền song song và nối tiếp trong việc truyền con số 187 thập phân (tức 10111011 nhị phân). Hình 3.33 Truyền 8 bit theo phương pháp song song và nối tiếp - Một hạn chế rất dễ nhận thấy khi truyền nối tiếp so với song song là tốc độ truyền và độ chính xác của dữ liệu khi truyền và nhận. Vì dữ liệu cần đƣợc “chia nhỏ” thành từng bit khi truyền nhận, tốc độ truyền sẽ bị giảm. Mặt khác, để đảm bảo tính chính xác của dữ liệu, bộ truyền và bộ phận cần có những “thỏa hiệp” hay nhũng tiêu chuẩn nhất định. Do đó trong máy đo áp suất thủy động ta dùng truyền thông nối tiếp. Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 138 Hình 3.34 Sơ đồ modul giao tiếp với máy tính 3.4. Thiết kế mạch điều khiển cho máy 3.4.1 Thiết kế mạch in cho máy Hình 3.35 Sơ đồ mạch in Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 139 3.4.2 Code nạp cho vi điều khiển #include #asm .equ __lcd_port=0x15 ;PORTC #endasm #include #include "hard_def.h" #include /************************************************************* * * USART * ************************************************************** / #define FRAMING_ERROR (1<<FE) #define PARITY_ERROR (1<<UPE) #define DATA_OVERRUN (1<<OVR) #define DATA_REGISTER_EMPTY (1<<UDRE) #define RX_COMPLETE (1<<RXC) #define RX_BUFFER_SIZE 100 unsigned char rx_buffer[RX_BUFFER_SIZE]; unsigned char rx_wr_index, // write index rx_rd_index, // read index rx_counter; // counter bit rx_buffer_overflow; // USART reveiver buffer overflow flag Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 140 interrupt [USART_RXC] void usart_receiver(void){ unsigned char status,data; status=UCSRA; data=UDR; if ((status & (FRAMING_ERROR | PARITY_ERROR | DA- TA_OVERRUN))==0){ // checking error rx_buffer[rx_wr_index]=data; if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0; if (++rx_counter == RX_BUFFER_SIZE){ rx_counter=0; rx_buffer_overflow=1; }; }; } #ifndef _DEBUG_TERMINAL_IO_ #define _ALTERNATE_GETCHAR_ #pragma used+ unsigned char getchar(void){ unsigned char data; while (rx_counter==0); data = rx_buffer[rx_rd_index]; if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0; #asm("cli") --rx_counter; Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 141 #asm("sei") return data; } #pragma used- #endif void reset_rx_buffer(){ #asm("cli") rx_wr_index = rx_rd_index = rx_counter = 0; rx_buffer_overflow=0; #asm("sei") } // Standard Input/Output functions #include #include /************************************************************* * * ADC 10-bit * ************************************************************** / #define ADC_VREF_TYPE 0x40 // Read the AD conversion result unsigned int read_adc(unsigned char adc_input) { Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 142 ADMUX=adc_input | (ADC_VREF_TYPE & 0xff); // Delay needed for the stabilization of the ADC input voltage delay_us(10); // Start the AD conversion ADCSRA|=0x40; // Wait for the AD conversion to complete while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; return ADCW; } eeprom unsigned char pre_vel; unsigned int CW_encd = 0, CCW_encd = 0, pressure = 0, cmd_angle = 0; char *tempstr = " "; float angle = 0; const float OneStep = 3.6; bit direction = 0; unsigned char pressure_input_pin = 1, vel = 0; #define APD_buffer_size 100 unsigned char APD_counter=0, APD_id = 0; bit tx_finished = 0; unsigned int PD[APD_buffer_size], AD[APD_buffer_size]; Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 143 void system_init(){ PORTA=0x00; DDRA=0x00; PORTB=0x02; DDRB=0x00; PORTD=0x00; DDRD=0x52; // timer 0 stopped TCCR0=TCNT0= OCR0=0x00; //timer 1: PWM TCCR1A=0x31; // inverted TCCR1B=0x02; TCNT1H= TCNT1L=ICR1H=ICR1L=0x00; OCR1AH=OCR1AL=OCR1BH=PWM=0x00; // timer 2 Stopped ASSR=TCCR2=TCNT2=OCR2=0x00; // External Interrupt(s) initialization // INT0: off // INT1: Off // INT2: Off GICR|=0; Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 144 MCUCR=0; MCUCSR=0; GIFR=0; // 8 Data, 1 Stop, No Parity // USART Receiver: interrupt // USART Transmitter: On // USART Mode: Asynchronous // USART Baud Rate: 9600 UCSRA=0x00; UCSRB=0x98; UCSRC=0x86; UBRRH=0x00; UBRRL=0x33; // Analog Comparator: Off ACSR=0x80; SFIOR=0x00; // ADC Clock frequency: 125.000 kHz // ADC Voltage Reference: AVCC pin ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x86; // LM016L init lcd_init(16); vel = pre_vel; RELAY = 1; Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 145 PWM = 0; direction = forward; #asm("sei") } void push_APD(){ if( APD_counter == APD_buffer_size ) APD_counter =0; else{ AD[APD_counter]= angle; PD[APD_counter++]= pressure; } } void reset_APD(){ APD_counter = 0; APD_id = 0; tx_finished = 0; } ////////////////////////////////////////////////////////////////////////////////////////// // ket qua gui ve may tinh: // [_STARTING][_REPORT_AD][gia tri goc][_REPORT_PD][gia tri ap suat][_ENDING] // ////////////////////////////////////////////////////////////////////////////////////////// void send_APD(){ if( APD_id >= APD_counter ){ tx_finished = 1; return;} else{ Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 146 char *tempstr = " "; putchar(_STARTING); putchar('X'); itoa(AD[APD_id], tempstr); printf("%s",tempstr ); putchar('Y'); itoa(PD[APD_id], tempstr); printf("%s",tempstr ); putchar(_ENDING); APD_id++; tx_finished = 0; } } void reset_encd(){ CW_encd = CCW_encd = 0; } void set_origin(){ reset_encd(); APD_counter=0; } Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 147 void lcd_putnum(unsigned int num){ char *str = " "; itoa( num, str); lcd_puts(str); } void move( ){ PWM = vel; RELAY = direction; } void status_report(){ lcd_clear(); if( direction ) lcd_putsf("CW --- "); else lcd_putsf("CCW --- "); lcd_putnum(PWM); lcd_gotoxy(0,1); lcd_putnum(angle); lcd_gotoxy(8,1); lcd_putnum(pressure); } #define stop_move() { PWM = 0; } void move_to_angle(unsigned int ang){ if( angle < ang ){ direction = forward; while( angle <ang ) move(); } Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 148 else if( angle > ang ){ direction = reverse; while( angle > ang ) move(); } stop_move(); } ///////////////////////////////////////////////////////////////////////////////////////////// // no_step : so lan lay gia tri ap suat < APD_buffer_size( mac dinh la 50, co the set lai ) // d_ang : goc quay giua 2 lan lay ap suat // dir : chieu quay // stop_time: thoi gian dung (ms)lai sau khi quay mot goc d_ang, sau do doc gia tri ap suat. // Neu muon do lien tuc khong dung thi set = 0. //////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// // cmd_list: luu cac ma lenh duoc gui tu PC den AVR // temp_cmd_data: luu du lieu can thiet de thuc thi // function: + void reset_cmd_list // + void push_cmd :nhap ma lenh vao cmd_list // + unsigned char get_cmd :lay ma lenh tu command list cmd_list // + unsigned char cmd_decoder : giai ma lenh /////////////////////////////////////////////////////////////////////// #define cmd_list_size 20 Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 149 unsigned char cmd_list[cmd_list_size], cmd_counter=0, cmd_wr_index=0,cmd_rd_index=0; unsigned int temp_cmd_data[cmd_list_size], stepnumber = 0; void reset_cmd_list(){ cmd_counter = cmd_wr_index = cmd_rd_index=0; } void push_cmd( unsigned char cmd_code ){ cmd_list[cmd_wr_index] = cmd_code; if(++cmd_wr_index == cmd_list_size ) cmd_wr_index = 0; ++cmd_counter; } unsigned char get_cmd(){ unsigned char temp_cmd; if (cmd_counter == 0) return 0; temp_cmd = cmd_list[cmd_rd_index]; if(++cmd_rd_index == cmd_list_size ) cmd_rd_index = 0; --cmd_counter; return temp_cmd; } unsigned char cmd_decoder(){ unsigned char temp = 0; unsigned char val = 0; while ( temp != _STARTING ) temp = getchar(); // go to the start code Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 150 temp = getchar(); // get the CMD if( temp == _RUN_TASK ){ getchar();return 1;} // if the command is run, return push_cmd(temp); // put the command into the cmd_list temp = getchar(); // get the next data // calculating data while( temp != _ENDING ){ val *= 10; val += (temp - '0'); temp = getchar(); }; temp_cmd_data[cmd_wr_index-1] = val; return 0; } /////////////////////////////////////////////////////////////////////// // Thuc thi cac lenh tu PC // /////////////////////////////////////////////////////////////////////// void measure_pressure( ){ if( stepnumber == 0) { PWM = 0; return; } CW_encd = 0; reset_APD(); // clear all old data reset_rx_buffer(); Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 151 CW_encd = 0; putchar(_STARTING); putchar('X'); itoa(CW_encd, tempstr); printf("%s",tempstr ); putchar('Y'); itoa(read_adc( pressure_input_pin), tempstr); printf("%s",tempstr ); putchar(_ENDING); GICR|=0x40; MCUCR=0x02; MCUCSR=0x00; GIFR=0x40; } void process(){ unsigned char temp_cmd = 0; do{ temp_cmd = get_cmd(); if( temp_cmd == _FORWARD_DIR ) { RELAY = direction = forward; } else if( temp_cmd == _REVERSE_DIR ) { Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 152 RELAY = direction = reverse; } else if( temp_cmd == _STOP_MOVE ) { stop_move(); } else if( temp_cmd == _SET_VEL ) { PWM = (unsigned char) temp_cmd_data[cmd_rd_index-1]; } else if( temp_cmd == _START_MSR ) { measure_pressure( ); } else if( temp_cmd == _SET_ORIGIN ) { set_origin(); } else if( temp_cmd == _RETURN_ORIGIN ){ move_to_angle(0); } else if( temp_cmd == _SEND_APD ) { lcd_clear(); lcd_putsf("dang gui"); while(tx_finished == 0){ send_APD();} reset_APD(); lcd_clear(); lcd_putsf("da gui"); Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 153 } else if( temp_cmd == _RESET_APD ) { reset_APD(); } else if (temp_cmd == _STEP_NO ) { stepnumber = temp_cmd_data[cmd_rd_index-1]; lcd_gotoxy(11,0); lcd_putnum(stepnumber); } } while(temp_cmd!=0); } /////////////////////////////////////////////////////////////////////// // kiem tra truyen du lieu : PC -> AVR // /////////////////////////////////////////////////////////////////////// void test_receive(){ char ch; ch = getchar(); lcd_clear(); if( ch == _STARTING ) lcd_putsf("start"); else if( ch == _ENDING ) lcd_putsf("end"); else if( ch == _FORWARD_DIR ) lcd_putsf("forward"); else if( ch == _REVERSE_DIR ) lcd_putsf("reverse"); else if( ch == _STOP_MOVE ) lcd_putsf("stop"); else if( ch == _SET_VEL ) lcd_putsf("set vel"); Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 154 else if( ch == _RETURN_ORIGIN ) lcd_putsf("return org"); else if( ch == _SEND_APD) lcd_putsf("send APD"); else if( ch == _RESET_APD ) lcd_putsf("reset apd"); else if( ch == _GOT_CMD ) lcd_putsf("got cmd"); else if( ch == _DONE) lcd_putsf("done"); else if( ch == _WAIT) lcd_putsf("wait"); else if( ch == _FREE) lcd_putsf("free"); else if( ch == _QUEUE) lcd_putsf("queue"); else if( ch == _BUSY) lcd_putsf("busy"); else if( ch == _REPORT_PD) lcd_putsf("report pd"); else if( ch == _REPORT_AD) lcd_putsf("report ad"); else if( ch == _RUN_TASK) lcd_putsf("run task"); else lcd_putsf("unknown cmd"); } /////////////////////////////////////////////////////////////////////// // kiem tra truyen du lieu : AVR -> PC // /////////////////////////////////////////////////////////////////////// void test_transmit(){ unsigned char i = 0; putchar( _STARTING); putchar(' '); putchar( _ENDING); for( i = _FORWARD_DIR; i<=_RUN_TASK; i++){ putchar(i); putchar(' '); } Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 155 } void main(void){ //unsigned char start_process = 0; //char ch; system_init(); angle = 0; pressure = 0 ; push_APD(); angle = 1; pressure = 100 ; push_APD(); angle = 2; pressure = 200 ; push_APD(); angle = 3; pressure = 300 ; push_APD(); angle = 4; pressure = 500 ; push_APD(); angle = 5; pressure = 600 ; push_APD(); angle = 6; pressure = 400 ; push_APD(); angle = 7; pressure = 300 ; push_APD(); angle = 8; pressure = 200 ; push_APD(); angle = 9; pressure = 1000 ; push_APD(); Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 156 lcd_putsf("Ready"); while(getchar() != 'a'); lcd_clear(); lcd_putsf("Connected"); while (1) { while(cmd_decoder() == 0); process(); reset_cmd_list(); // lcd_putchar( getchar()); }; } interrupt [EXT_INT0] void ext_int0_isr(void){ CW_encd ++; if( CW_encd > stepnumber){ PWM = 0; GICR =0; MCUCR=0; MCUCSR=0; GIFR=0; CW_encd = 0; } else { Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 157 lcd_clear(); lcd_putnum(CW_encd); lcd_putchar('/'); lcd_putnum(stepnumber); putchar(_STARTING); putchar('X'); itoa(CW_encd, tempstr); printf("%s",tempstr ); putchar('Y'); itoa(read_adc( pressure_input_pin), tempstr); printf("%s",tempstr ); putchar(_ENDING); } } interrupt [EXT_INT1] void ext_int1_isr(void){ CCW_encd ++; } Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 158 CHƢƠNG IV: THIẾT KẾ PHẦN MỀM MÁY ĐO ÁP SUẤT Ổ ĐỠ THỦY ĐỘNG 4.1. Giới thiệu các chƣơng trình viết giao diện 4.1.1. Giới thiệu về Visual Basic Có rất nhiều chƣơng trình hay ngôn ngữ lập trình khác nhau nhƣ: C++, Delphi, Visual Basic…có thể tạo ra chƣơng trình đáp ứng đƣợc những yêu cầu giao tiếp mạch điều khiển, hiển thị tọa độ trỏ chuột của đề tài. Với điều kiện cũng nhƣ khả năng của mình nhóm quyết định chọn Visua Basic để tạo chƣơng trình chạy. 4.1.1.1. Tổng quan về Visual Basic Giao diện chƣơng trình IDE là tên viết tắt của môi trƣờng phát triển tích hợp (Inegreated Development Enviroment). IDE là nơi tạo ra các chƣơng trình VB. IDE của VB là nơi tập trung các menu, thanh công cụ và cửa sổ để tạo ra chƣơng trình. Mỗi phần của IDE có các tính năng ảnh hƣởng đến các hoạt động lập trình khác nhau. Thanh menu cho phép bạn tác động cũng nhƣ quản lý trực tiếp trên toàn bộ ứng dụng. Thanh công cụ cho phép truy cập các chức năng của thanh menu qua các nút trên thanh công cụ. Các biểu mẫu (Form) - khối xây dựng các chƣơng trình Visual ba- sic - xuất hiện trong cửa sổ form. Hộp công cụ để thêm các điều khiển vào các biểu mẫu của đề án. Project explorer hiển thị các đề án mà bạn đang làm cũng nhƣ các thành phần của các đề án. Bạn duyệt và cài đặt các thuộc tính của điều khiển, biểu mẫu và module trong cửa sổ property. Cuối cùng, bạn bố trí và xem xét một hoặc nhiều biểu mẫu trên màn hình thông qua cửa sổ form layout. Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 159 Hình 4.1 Giao diên Visual Basic 4.1.2. Giới thiệu về LabVIEW LabVIEW (viết tắt của nhóm từ Laboratory Virtual Instrumentation Engineering Workbench) là một phần mềm máy tính đƣợc phát triển bởi công ty National Instrument, Hoa Kỳ. LabVIEW còn đƣợc biết đến nhƣ là một ngôn ngữ lập trình với khái niệm hoàn toàn khác so với các ngôn ngữ lập trình truyền thống nhƣ ngôn ngữ C, Pascal. Bằng cách diễn đạt cú pháp thông qua các hình ảnh trực quan trong môi trƣờng soạn thảo, LabVIEW đã đƣợc gọi với tên khác là lập trình G (viết tắt của Graphical, nghĩa là đồ họa). Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 160 a.Các khả năng chính của LabVIEW LabVIEW đƣợc dùng nhiều trong các phòng thí nghiệm, lĩnh vực khoa học kỹ thuật nhƣ tự động hóa, điều khiển, điện tử, cơ điện tử, hàng không, hóa sinh, điện tử y sinh….. Hiện tại ngòa phát triển phiên bản LabVIEW cho các hệ điều hành Windows, Linux, hãng NI đã phát triển các modul Lab- VIEW cho máy hỗ trợ cá nhân. Các chức năng chính của LabVIEW có thể tóm tắt nhƣ sau: - Thu thập tín hiệu từ các thiết bị bên ngoài nhƣ cảm biến nhiệt độ, hình ảnh từ webcam, vận tốc của động cơ… - Giao tiếp với các thiết bị ngoại vi thông qua nhiều chuẩn giao tiếp thông qua các cổng giao tiếp: RS232, RS485, USB…. - Mô phỏng và xử lý các tín hiệu thu nhận đƣợc để phục vụ các mục đích nghiên cứu hay mục đích của hệ thống mà ngƣời lập trình muốn. - Xây dựng các giao diện ngƣời dùng một cách nhanh chóng và thẩm mỹ hơn nhiều so với các ngôn ngữ khác nhƣ Visual Basic, Matlab…. - Cho phép thực hiện các thuật toán điều khiển nhƣ PID, Logic mờ, một cách nhanh chóng thông qua các chức năng tích hợp sẵn trong LabVIEW. - Cho phép kết hợp với nhiều ngôn ngữ lập trình truyền thông nhƣ C, C++……. Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 161 Hình 4.2 Giao diện chính của chương trình LabVIEW 4.2. Chọn chƣơng trình viết giao diện của máy đo áp suất thủy động Một số lý do để chọn Visual Basic làm ngôn ngữ thảo chƣơng trình: - Dễ học - Thíc hợp cho MS WINDOWS - Tiện dùng cho MS OFICE 2000 về WEB Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 162 a. Hộp công cụ Hộp công cụ là bảng chứa các điều khiển và ta thiết kế giao diện ngƣời sử dụng bằng cách chọn các điều khiển từ hộp công cụ và đƣa chúng vào các biểu mẫu. Một số điều khiển có sẵn trong Visual basic và không thể gỡ bỏ khỏi hộp công cụ. Một số khác nằm bên ngoài Visual basicvà chứa trong các tập tin mà có phần mở rộng là. ocx. Các điều khiển này có thể đƣợc thêm vào hoặc gỡ bỏ khỏi thanh công cụ. Trong chƣơng trình của đề tài cần tập tin mở rộng là NTgraph.ocx điều khiển này cho phép tạo một đồ thị trên form chính. Ngoài ra cần thêm vào thanh công cụ phần Mscomm1. Để sử dụng ta tìm file Ntgraph.ocx trên trang chủ sau đó paste và system32 trên giao diện của VB chọn menu project -> components cửa sổ components hiện ra ta sẽ tìm và chọn các công cụ trên. Hình 4.3 Hộp công cụ và components Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 163 b. Vẽ đồ thị với NTgraph. Đây là một điều khiển OCX tạo ra một đồ thị 2D với tọa độ X,Y đƣợc tính toán, điều chỉnh nhập vào từ bên ngoài có thể lấy từ tín hiệu qua cổng COM, LPT, Card giao tiếp PC. Hình 4.4 NTgraph active Để vẽ đồ thị ta cũng có thể dùng Teechart nhƣng phức tạp hơn mà phải trả phí. Với NTgraph thì giao thức đơn giản và phù hợp với tín hiệu 2 trục mà ta cần trong đề tài này. Trong NTgraph ta có thể đặt các thuộc tính màu sắc đƣờng nét, trục tọa độ, tạo thêm nhiều đƣờng hiển thị khác… Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 164 Hình 4.5 Bảng lựa chọn chế độ vẽ đồ thị Ta có thể sử dụng code để áp đặt thuộc tính cho đồ thị: Graph.Caption = “ ” - tiêu đề của đồ thị. .Xlabel = “ ” – tiêu đề trục X. .Ylabel = “ ” – tiêu đề trục Y. .PlotAreaColor = (red, green, black, white) - màu nền đồ thị. .XgridNumber - vạch chia trên trục X. .YgridNumber - vạch chia trên trục Y. .SetRange(xmin, xmax, ymin, ymax) – đặt dải tọa độ trên các trục. Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 165 .ClearGraph – xóa đồ thị. Để nhận và vẽ đồ thị từ tín hiệu cảm biến chuột máy tính ta cần khai báo các hàm, lệnh liên kết với windows. c. Code chƣơng trình giao diện máy đo áp suất Dim MotorDir As Boolean Dim AD As FIFO Dim PD As FIFO Dim InputData As BYTEFIFO Dim NumberStepValue As String Dim Vel As String Private Sub ExcelSave_Click() 'oXL.oWB.ORng Dim oXL As Excel.Application Dim oWB As Excel.Workbook Dim oSheet As Excel.Worksheet Dim oRng As Excel.Range Vel = "0" ' Start Excel and get Application object. Set oXL = CreateObject("Excel.Application") oXL.Visible = True ' Get a new workbook. Set oWB = oXL.Workbooks.Add Set oSheet = oWB.ActiveSheet ' Add table headers going cell by cell. oSheet.Cells(1, 1).Value = "Lan Do" oSheet.Cells(1, 2).Value = "Goc" oSheet.Cells(1, 3).Value = "Ap Suat" ' Format A1:D1 as bold, vertical alignment = center. With oSheet.Range("A1", "C1") .Font.Bold = True .VerticalAlignment = xlVAlignCenter End With Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 166 ' Create an array to set multiple values at once. Dim size As Integer Dim i As Integer AD.ResetReadIndex PD.ResetReadIndex i = 2 Do While Not AD.IsEmpty oSheet.Cells(i, 1).Value = i - 1 oSheet.Cells(i, 2).Value = AD.Pop oSheet.Cells(i, 3).Value = PD.Pop i = i + 1 Loop ' Fill A2:B6 with an array of values (First and Last Names). 'oSheet.Range("A2", "C6").Value = Result Set oRng = oSheet.Range("A1", "C1") oRng.EntireColumn.AutoFit ' Make sure you release object references. Set oRng = Nothing Set oSheet = Nothing Set oWB = Nothing Set oXL = Nothing Exit Sub Err_Handler: MsgBox Err.Description, vbCritical, "Error: " & Err.Number End Sub Private Sub CandyButton1_Click() Unload Me End End Sub Private Sub ClearCmd_Click() CmdText.Text = "" End Sub Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 167 Private Sub Excel_Click() 'oXL.oWB.ORng Dim oXL As Excel.Application Dim oWB As Excel.Workbook Dim oSheet As Excel.Worksheet Dim oRng As Excel.Range ' Start Excel and get Application object. Set oXL = CreateObject("Excel.Application") oXL.Visible = True ' Get a new workbook. Set oWB = oXL.Workbooks.Add Set oSheet = oWB.ActiveSheet ' Add table headers going cell by cell. oSheet.Cells(1, 1).Value = "Lan Do" oSheet.Cells(1, 2).Value = "Goc" oSheet.Cells(1, 3).Value = "Ap Suat" ' Format A1:D1 as bold, vertical alignment = center. With oSheet.Range("A1", "C1") .Font.Bold = True .VerticalAlignment = xlVAlignCenter End With Dim i As Integer AD.ResetReadIndex PD.ResetReadIndex i = 2 Do While Not AD.IsEmpty oSheet.Cells(i, 1).Value = i - 1 oSheet.Cells(i, 2).Value = AD.Pop * 0.9 oSheet.Cells(i, 3).Value = PD.Pop * 25 / 1023 i = i + 1 Loop ' Fill A2:B6 with an array of values (First and Last Names). 'oSheet.Range("A2", "C6").Value = Result Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 168 Set oRng = oSheet.Range("A1", "C1") oRng.EntireColumn.AutoFit ' Make sure you release object references. Set oRng = Nothing Set oSheet = Nothing Set oWB = Nothing Set oXL = Nothing Exit Sub Err_Handler: MsgBox Err.Description, vbCritical, "Error: " & Err.Number End Sub Private Sub Form_Load() Set PD = New FIFO Set AD = New FIFO Set InputData = New BYTEFIFO Dim cnttemp As Integer PD.Reinitialize AD.Reinitialize InputData.Reinitialize InputData.SetSpecialData ("z") NumberStepValue = "1" PWMScroll.Enabled = True PWMScroll.Min = 0 PWMScroll.Max = 255 PWMScroll.Value = 0 ComList.AddItem "COM1" ComList.AddItem "COM2" ComList.AddItem "COM3" ComList.AddItem "COM4" ComList.AddItem "COM5" ComList.ListIndex = 0 For cnttemp = 0 To 255 PWMValue.AddItem Str(cnttemp) Next cnttemp PWMValue.ListIndex = 0 For cnttemp = 1 To 400 Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 169 StepNumber.AddItem Str(cnttemp * 0.9) Next cnttemp StepNumber.ListIndex = 0 MotorDir = True 'ConnectStt.Caption = "Chua Ket Noi" With Graph .PlotAreaColor = vbBlack .FrameStyle = BITMAP .Caption = " Do Thi Goc-Apsuat" .XLabel = "Goc (Do)" .YLabel = "Ap Suat (mBar)" .ClearGraph .ElementLineColor = RGB(255, 255, 0) .XGridNumber = 19 .YGridNumber = 15 .GridColor = RGB(100, 100, 100) .ShowGrid = True .ElementWidth = 1 .ElementLinetype = Solid .SetRange 0, 380, 0, 30 End With Timer1.Interval = 50 ' disable all button when the comport is not already connected Timer1.Enabled = False PWM.Enabled = False Direction.Enabled = False Dir.Enabled = False PWMValue.Enabled = False Command.Enabled = False SaveGraph.Enabled = False ClearGraph.Enabled = False PWMScroll.Enabled = False StartProcess.Enabled = False StepButton.Enabled = False StopMove.Enabled = False Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 170 Excel.Enabled = False CmdText.Enabled = False PWMValue.Enabled = False Label2.Enabled = False SendStt.Enabled = False StepNumber.Enabled = False Connect.ColorButtonUp = &HFF& RefreshGraph.Enabled = False ClearCmd.Enabled = False End Sub Private Sub PWM_Click() Vel = Trim$(PWMValue.Text) PWMScroll.Value = Val(Vel) End Sub Private Sub CmdText_Click() On Error GoTo ErrHandle SendStt = "Wait" Exit Sub ErrHandle: If Err.Number = 8018 Then MsgBox "Loi: Chua chon cong COM!" End Sub Private Sub ClearGraph_Click() With Graph .ClearGraph End With End Sub Private Sub Command_Click() On Error GoTo ErrHandle If CmdText.Text = "" Then SendStt = "Error" MsgBox ("Error:Khong Co du lieu") Exit Sub Else Me.RS232Com.Output = CmdText.Text SendStt = "Done" End If Exit Sub Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 171 ErrHandle: If Err.Number = 8018 Then MsgBox "Loi: Chua chon cong COM!" End Sub Private Sub Connect_Click() Dim Rs232ComId As Byte Rs232ComId = 0 If ComList.Text = "COM1" Then Rs232ComId = 1 ElseIf ComList.Text = "COM2" Then Rs232ComId = 2 ElseIf ComList.Text = "COM3" Then Rs232ComId = 3 ElseIf ComList.Text = "COM4" Then Rs232ComId = 4 ElseIf ComList.Text = "COM5" Then Rs232ComId = 5 End If If RS232Com.PortOpen Then RS232Com.PortOpen = False On Error GoTo ErrHandle If Not Rs232ComId = 0 Then RS232Com.CommPort = Rs232ComId RS232Com.Settings = "9600,N,8,1" Me.RS232Com.RThreshold = 1 RS232Com.InputLen = 1 RS232Com.PortOpen = True Me.RS232Com.Output = "a" Timer1.Enabled = True PWM.Enabled = True Direction.Enabled = True Dir.Enabled = True PWMValue.Enabled = True Command.Enabled = True SaveGraph.Enabled = True ClearGraph.Enabled = True PWMScroll.Enabled = True StartProcess.Enabled = True StepButton.Enabled = True StopMove.Enabled = True Excel.Enabled = True Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 172 CmdText.Enabled = True PWMValue.Enabled = True Label2.Enabled = True SendStt.Enabled = True StepNumber.Enabled = True Connect.ColorButtonUp = &H404000 RefreshGraph.Enabled = True ClearCmd.Enabled = True Else MsgBox ("Chua Chon Cong Com") 'ConnectStt.Caption = "Chua Ket Noi" Timer1.Enabled = False PWM.Enabled = False Direction.Enabled = False Dir.Enabled = False PWMValue.Enabled = False Command.Enabled = False SaveGraph.Enabled = False ClearGraph.Enabled = False PWMScroll.Enabled = False StartProcess.Enabled = False StepButton.Enabled = False StopMove.Enabled = False Excel.Enabled = False CmdText.Enabled = False PWMValue.Enabled = False Label2.Enabled = False SendStt.Enabled = False StepNumber.Enabled = False Connect.ColorButtonUp = &HFF& ClearCmd.Enabled = False End If Exit Sub ErrHandle: 'ConnectStt.Caption = "Chua Ket Noi" If Err.Number = 8002 Then MsgBox "Error: Thiet bi chua ket noi hoac chua bat nguon !" If Err.Number = 8018 Then MsgBox "Error: Chi gui duoc khi thiet di da san sang!" Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 173 Timer1.Enabled = False PWM.Enabled = False Direction.Enabled = False Dir.Enabled = False PWMValue.Enabled = False Command.Enabled = False SaveGraph.Enabled = False ClearGraph.Enabled = False PWMScroll.Enabled = False StartProcess.Enabled = False StepButton.Enabled = False StopMove.Enabled = False Excel.Enabled = False CmdText.Enabled = False PWMValue.Enabled = False Label2.Enabled = False SendStt.Enabled = False Connect.ColorButtonUp = &HFF& RefreshGraph.Enabled = False ClearCmd.Enabled = False End Sub Private Sub Direction_Click() On Error GoTo ErrHandle MotorDir = Not MotorDir If Not MotorDir Then Dir.Text = "Trai" Me.RS232Com.Output = "aAzaRz" Else Dir.Text = "Phai" Me.RS232Com.Output = "aBzaRz" End If Exit Sub ErrHandle: If Err.Number = 8018 Then MsgBox "Error: Chua chon cong COM!" End Sub Private Sub PWMScroll_Change() PWMValue.Text = Str(PWMScroll.Value) Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 174 End Sub Private Sub PWMValue_Change() PWMScroll.Value = Val(PWMValue.Text) End Sub Private Sub RefreshGraph_Click() Graph.SetRange 0, 380, 0, 30 End Sub Private Sub RS232Com_OnComm() Dim tempstr As String If Me.RS232Com.CommEvent = comEvReceive Then tempstr = RS232Com.Input InputData.Push (tempstr) End If End Sub Private Sub SaveGraph_Click() Graph.PrintGraph End Sub Private Sub StartProcess_Click() On Error GoTo ErrHandle If Dir.Text = "Trai" Then Me.RS232Com.Output = "aAz" Else Me.RS232Com.Output = "aBz" End If Me.RS232Com.Output = "aD" + Vel + "zaT" + NumberStepValue + "zaEzaRz" Exit Sub ErrHandle: If Err.Number = 8018 Then MsgBox "Error: Chua Ket Noi Thiet Bi!" End Sub Private Sub StepButton_Click() NumberStepValue = Str(StepNumber.ListIndex + 1) End Sub Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 175 Private Sub StopMove_Click() On Error GoTo ErrHandle Me.RS232Com.Output = "aD0zaRz" PWMValue.Text = "0" Exit Sub ErrHandle: If Err.Number = 8018 Then MsgBox "Error: Chua Ket Noi Thiet Bi!" End Sub Private Sub ComInputDecoder() Dim Temp As String Dim Value As Long 'Ma du lieu gui ve: aX[data]Y[data]z '#define _REPORT_AD 'X' // '#define _REPORT_PD 'Y' // If InputData.CheckData Then ' Go to the Starting code Temp = InputData.Pop Do While Not Temp = "a" Temp = InputData.Pop Loop ' Get the next cmd code Temp = InputData.Pop Value = 0 If Temp = "X" Then Temp = InputData.Pop Do While Not Temp = "Y" Value = Value * 10 + Val(Temp) Temp = InputData.Pop Loop AD.Push (Value) Value = 0 Temp = InputData.Pop Do While Not Temp = "z" Value = Value * 10 + Val(Temp) Temp = InputData.Pop Loop PD.Push (Value) Else MsgBox ("Error: Unkown Code") Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 176 End If End If End Sub Private Sub Timer1_Timer() ComInputDecoder If Not AD.IsEmpty And Not PD.IsEmpty Then Graph.PlotXY AD.Pop * 0.9, PD.Pop * 25 / 1023, 0 End If End Sub Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 177 CHƢƠNG V: NGHIÊN CỨU THỰC NGHIỆM MÁY ĐO ÁP SUẤT Ổ ĐỠ THỦY ĐỘNG BKM-10 5.1. Sơ đồ độngvà nguyên lý hoạt động của máy BKM-10 5.1.1. Sơ đồ động của máy m?ch x? lý tín hi?u máy tính 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Hình 5.1 Sơ đồ động thử nghiệm Máy thử nghiệm gồm các bộ phận chính sau: 1- Khung 9- trục vít 2- Động cơ xoay chiều 10- Bánh vít 3- Dây đai 11- Động cơ điện một chiều 4- Bánh đai 12- Khớp nối 5- Ổ lăn 13- Cảm biến áp suất 6- Buồng dầu 14- Encoder 7- Trục 15- Mạch xử lý tín hiệu 8- Cụm bánh vít 16- Máy tính Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 178 5.1.2. Nguyên lý hoạt động của máy. Khi động cơ 2 quay thông qua bộ truyền đai làm cho trục chính 7 quay, dƣới tác động của tải W tác dụng lên ổ nó tạo ra khe hở giữa trục và bạc ổ 8 dầu bôi trơn đƣợc đƣa từ thùng chứa tới ổ thủy động. Khi trục quay nó sẽ tạo ra một nêm dầu bên trong ổ đỡ, để xác định giá trị của áp suất trong ổ khi có nêm dầu ta sử dụng một cảm biến đo áp suất và dầu từ ổ đƣợc trích ra đƣa lên cảm biến. Động cơ một chiều 12 quay làm cho trục vít 9 quay và làm cho bánh vit quay, bánh vít đƣợc nắp chặt với bạc của ổ thủy động và nó làm cho bạc ổ quay và tƣơng ứng với mỗi góc quay xác định của bánh vít ta thu đƣợc một giá trị áp suất trên cảm biến đo áp suất và ở đây ta cũng sử dụng một cảm biến đo vị trí của ổ. Hai tín hiệu của hai cảm biến này đƣợc đƣa qua mạch ghép nối và đƣa lên máy tính và thông qua phần mềm đã đƣợc lập trình bằng ngôn ngữ lập trình Visual Basic nó sẽ vẽ lên biểu đồ áp suất của ổ. 5.2. Kết cấu ổ thực nghiệm Mô hình ổ thí nghiệm bôi trơn thủy động có các số liệu sau: * Trục ổ: - Đƣờng kính trục D=24 mm - Vật liệu làm trục Thép C45 - Trục đƣợc mài đạt Rz=0,63 * Bạc của ổ - Vật liệu Đồng - Lỗ bạc đƣợc mài đạt Rz=0,63 * Dùng dầu bôi trơn - Dầu công nghiệp có độ nhớt động lực học =0,002Pas - Khối lƣợng riêng =0,880kg/dm3 Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 179 * Động cơ dùng để truyền động cho trục: - Công suất động cơ P=0,7kW - Số vòng quay n=1350vg/phút * Khe hở hƣớng kính C=0,03mm 5.3. Sơ đồ đặt tải P O W L = 580 L = 581 2 Hình 5.2 Sơ đồ đặt tải P: Là tải trọnh đặt vào cánh tay đòn W: Là tải trọng tác dụng lên ổ Xét cân bằng mômen tại điểm O ta có : P.L1 – W.L2 =0 W= 2 1 L PL (N) 5.4. Kết nối máy tính và đƣa kết quả đo ra màn hình 5.4.1. Sơ đồ mạch kêt nối với máy tính Để vẽ đƣợc biểu đồ phân bố áp suất trong ổ đỡ thủy động một mƣởng đang tính ta sử dụng hai cảm biến để đo hai giá trị đó là: - Cảm biến để đo vị trí. - Cảm biến đo áp suất để xác định giá trị của áp suất trong ổ ứng với các vị trí khác nhau trên ổ thủy động. Hai tín hiệu lấy từ hai cảm biến này sẽ đƣợc đƣa qua một mạch xử lý tín hiệu và mạch này tổng hợp hai tín hiệu lại và đƣa lên máy tính thông qua cổng RS232. Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 180 5.4.2. Sơ đồ khối mạch điều khiển Hinh 5.3 Sơ đồ khối mạch điều khiển Máy Tính ATmega 16 Pressure sensor LCD Động Cơ Encorder Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 181 5.4.3. Lƣu đồ thuật toán Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 182 CHƢƠNG VI: KẾT QUẢ ĐẠT ĐƢỢC 6.1. Mô hình hoàn thiện máy say khi lắp ráp Hình 6.4 Mô hình máy thực tế Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 183 6.2. Mạch điều khiển máy Hình 6.5 Mạch thực tế của máy Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 184 6.3. Giao diện thực hiện của máy 6.3.1. Nhiệm vụ của giao diện Có thể nhập các thông số để điều chỉnh động cơ 1 chiều. Chọn tải cho máy BKM10. Có thể xuất ra đồ thị dạng PDF. Có thể xuất ra bảng excel kết quả đo. 6.3.2. Giao diện chƣơng trình Trục tunh thể hiện giá trị của áp suất. Trục hoành thể hiện vị trí của cảm biến trên bạc. Các thanh công cụ: - Kết nối : chọn cổng COM giao tiếp máy tính. - Tải : chọn tải đặt trên máy BKM-10. - chiều quay : Chọn chiều quay trái, phải cho động cơ 1 DC. - Thanh trƣợt: di thanh trƣợt để điều khiển tốc độ động cơ DC. - PWM :nhập giá trị từ 0-255 để điều khiển tốc độ đông cơ DC. - Góc : Chọn góc quay cho động cơ DC. - Bắt đầu quá trình : khi đã chọn đầy đủ ấn nút này để bắt đầu quá trình đo. - Dừng động cơ : khi muốn dừng động cơ ở vị trí bất kì ấn nút này.Sau khi ấn có thể kết thúc quá trình đo hoặc ấn nút bắt đầu quá trình để tiếp tục đo. - Lƣu đồ thị : khi muốn lƣu lại đồ thị,ấn nút này. - Xóa đồ thị : Xóa đồ thị trên giao diện. - Excel : Xuất ra bảng excel. - Refrest : xóa toàn bộ thông số đã chon và kết quả đo đƣợc. Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 185 - Command : Nhập lệnh để đo nếu muốn. Hình 6.5 Giao diện chương trình 6.4. Kết quả đo đƣợc từ máy BKM-10 Ta tiến hành đo với nhiều tải trọng khác nhau và các tốc độ khác nhau của máy và có thể đo với nhiều loại dầu có độ nhớt khác nhau để có thể so sánh các kết quả thu đƣợc ứng với mỗi lần đo cho ta các biểu đồ phân bố áp suất nhƣ thế nào để có thể đƣa ra kết luận. Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 186 Ta tiến hành khảo sát áp suất bên trong ổ ứng với các thông số cố định là: Tốc độ quay của trục là N=2000v/ph, độ nhớt động học của dầu là 0,015Pa.s. Giá trị thay đổi ở đây chính là tải trọng đặt vào máy và ứng với mỗi một giá trị tải trọng ta thu đƣợc một biểu đồ áp suất bên trong ổ. Ta có đồ thị ứng với tải trọng đặt vào ổ và tốc độ trục chính là: Hinh 6.6 Đồ thị ứng với tải 5kg và tốc độ 900 vòng/phút Hinh 6.7 Đồ thị ứng với tải 10kg và tốc độ 900 vòng/phút Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 187 Hinh 6.8 Đồ thị ứng với tải 15kg và tốc độ 900 vòng/phút Hinh 6.9 Đồ thị ứng với tải 5kg và tốc độ 1350 vòng/phút Hinh 6.10 Đồ thị ứng với tải 10kg và tốc độ 1350 vòng/phút Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 188 Hinh 6.11 Đồ thị ứng với tải 15kg và tốc độ 1350 vòng/phút Hinh 6.12 Đồ thị ứng với tải 5kg và tốc độ 2025 vòng/phút Hinh 6.13 Đồ thị ứng với tải 10kg và tốc độ 2025 vòng/phút Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 189 Hinh 6.14 Đồ thị ứng với tải 15kg và tốc độ 2025 vòng/phút Từ số liệu trên thấy áp suất lớn nhất tăng theo chiều tăng của tải trọng và cũng tăng theo chiều tăng của tốc độ trục chính. Nhƣ vậy hoàn toàn phù hợp với những tính toán lý thuyết về áp suất thủy động. Ngoài ra các biểu đồ áp suất cũng cho thấy đƣợc thời điểm xuất hiện áp suất trên ổ và vị trí đạt cực đại áp suất qua đó ta có thể dựng tƣơng đối biểu đồ áp suất tác dụng lên trục. Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 190 Hinh 6.15 Áp suất thực tế trên ổ thủy động Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 191 Hình 6.15 Áp suất lý thuyết trên ổ thủy động Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 192 KẾT LUẬN Với đề tài đƣợc giao là “Nghiên cứu mô hình thử nghiệm máy đo áp suất ổ đỡ thuỷ động BKM-10 có kết nối máy tính” và sau khoảng thời gian mƣời năm tuần thì nội dung công việc mà chúng em đã thực hiện đƣợc gồm: Phần I: Lý thuyết: Tìm hiểu về lý thuyết bôi trơn, các dạng bôi trơn trong đó chú ý đến phần bôi trơn thuỷ động và đi sâu vào tìm hiểu cách tính toán các thông số cơ bản của ổ đỡ và ổ chặn trong bôi trơn thuỷ động, do đề tài đƣợc giao về phần ổ đỡ nên chúng em có tìm hiểu sâu hơn về ổ đỡ. Ngoài ra còn tìm hiểu thêm về các cách đo của các thông số cơ bản trong cơ khí bằng các loại cảm biến nhƣ cảm biến đo áp suất và cảm biến xác định vị trí… Đi vào tìm hiểu thêm một số ngôn ngữ lập trình nhƣ Visual Basic… Phần II: Cách ghép nối máy BKM-10 với máy tính để lấy đƣợc kết quả đo: Với yêu cầu là có thể vẽ lên biểu đồ phân bố áp suất bên trong chu vi ổ dạng hai chiều, để vẽ đƣợc biểu đồ dạng hai chiều ta phải có hai giá trị là giá trị áp suất tại mỗi điểm bên trong ổ theo phƣơng chu vi ổ và tƣơng ứng là vị trí ứng với giá trị áp suất đó trong ổ. Để có hai giá trin này ta sử dụng đồng thời hai cảm biến đó là cảm biến đo áp suất và cảm biến đo vị trí và tín hiệu từ hai cảm biến này đƣợc đƣa vào hai đầu lấy tín hiệu vào của chuột tƣơng ứng với hai phƣơng dịch chuyển của con trỏ trên màn hình máy tính và nó làm cho con trỏ di chuyển tƣơng ứng. Và thông qua một chƣơng trình vẽ đƣợc viết trên ngôn ngữ lập trình Visual Basic nó sẽ vẽ lên biểu đồ phân bố áp suất bên trong chu vi của ổ đỡ thuỷ động. Phần III: Phần thực nghiệm: Đi vào nghiên cứu ổ đỡ thuỷ động có chiều dài hữu hạn và tiến hành tính một số thông số cơ bản của của một ổ đỡ Bộ môn: Máy và ma sát học Đồ án tốt nghiệp Thực hiện:Nguyễn Tiến Long_Vũ Hoàng Thanh_Nguyễn Tiến Thành 193 có kích thƣớc xác định và đồng thời tiến hành tính toán các thông số của một máy đo áp suất BKM-10 thử nghiệm. Ta tiến hành ứng dụng máy này vào thực tế để đo đƣợc áp suất của ổ ứng với các giá trị của tải trọng, của vận tốc, của độ nhớt của dầu… Tiến hành đo giá trị áp suất trong ổ ứng với các giá trị tải trọng và tốc độ quay của trục cũng nhƣ độ nhớt của dầu khác nhau và nó cho ta giá trị cũng nhƣ sự phân bố áp suất bên trong ổ là khác nhau và ta cũng xác định đƣợc giá trị lớn nhất của áp suát bên trong ổ là bao nhiêu để từ đó ta có thể so sánh với lý thuyết để có thể đƣa ra đƣợc kết lận về độ chính xác của kết quả đo và cung đƣa ra đƣợc kết lận về mô hình thử nghiệm này. Để ta có thể biết đƣợc độ chính xác cũng nhƣ độ tin cậy của máy đến đâu khi làm việc thì ta phải tiến hành so sánh giá trị thu đƣợc giữa lý thuyết và thực nghiệm, nhƣng để tính đƣợc giá trị áp suất bên trong ổ đỡ thuỷ động có kích thƣớc giới hạn thì không phải là một việc đơn giản ta không thể tính bằng phƣơng pháp thông thƣờng mà buộc ta phải đi giải phƣơng trình vi phân cấp hai để giải phƣơng trình này buộc ta phải sử dụng phƣơng pháp sai phân hữu hạn bằng việc ứng dụng các ngôn ngữ lập trình nhƣ For- tran…Nhƣng do thời gian có hạn nên việc tính theo lý thuyết là chƣa thực hiện đƣợc nên việc so sánh về giá trị là chƣa thể thực hiện đƣợc, nhƣng về dạng biểu đồ phân bố áp suất thì nó có dạng tƣơng đối giống với lý thuyết.

Các file đính kèm theo tài liệu này:

  • pdfthuyet_minh__7805.pdf