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.
                
              
                                            
                                
            
 
            
                 194 trang
194 trang | 
Chia sẻ: lylyngoc | Lượt xem: 2615 | Lượt tải: 1 
              
            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:
 thuyet_minh__7805.pdf thuyet_minh__7805.pdf