(Luận văn thạc sĩ) nghiên cứu và phân tích phổ tần số rung của động cơ nhằm đánh giá tình trạng làm việc của động cơ

119 25 0
(Luận văn thạc sĩ) nghiên cứu và phân tích phổ tần số rung của động cơ nhằm đánh giá tình trạng làm việc của động cơ

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH LUẬN VĂN THẠC SĨ ĐỒN MINH TƯỜNG NGHIÊN CỨU VÀ PHÂN TÍCH PHỔ TẦN SỐ RUNG CỦA ĐỘNG CƠ NHẰM ĐÁNH GIÁ TÌNH TRẠNG LÀM VIỆC CỦA ĐỘNG CƠ NGÀNH: KỸ THUẬT CƠ KHÍ ĐỘNG LỰC - 60520116 S K C0 4 Tp Hồ Chí Minh, tháng 11/2014 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH LUẬN VĂN THẠC SĨ ĐỒN MINH TƯỜNG NGHIÊN CỨU VÀ PHÂN TÍCH PHỔ TẦN SỐ RUNG CỦA ĐỘNG CƠ NHẰM ĐÁNH GIÁ TÌNH TRẠNG LÀM VIỆC CỦA ĐỘNG CƠ NGÀNH: KỸ THUẬT CƠ KHÍ ĐỘNG LỰC - 60520116 Thành Phố Hồ Chí Minh, tháng 11 năm 2014 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH LUẬN VĂN THẠC SĨ ĐỒN MINH TƯỜNG NGHIÊN CỨU VÀ PHÂN TÍCH PHỔ TẦN SỐ RUNG CỦA ĐỘNG CƠ NHẰM ĐÁNH GIÁ TÌNH TRẠNG LÀM VIỆC CỦA ĐỘNG CƠ NGÀNH: KỸ THUẬT CƠ KHÍ ĐỘNG LỰC - 60520116 Hướng dẫn khoa học: TS NGUYỄN HUY BÍCH Thành Phố Hồ Chí Minh, tháng 11 năm 2014 LÝ LỊCH KHOA HỌC I LÝ LỊCH SƠ LƯỢC: Họ & tên: ĐỒN MINH TƯỜNG Giới tính: Nam Ngày, tháng, năm sinh: 21/ 04 /1982 Nơi sinh: Lâm Đồng Quê quán: Lâm Đồng Dân tộc: Kinh Địa liên lạc: Tân Hà, Lâm Hà, Lâm Đồng Đơn vị công tác: Trường Cao Đẳng Nghề số (BQP), đường Bùi Xuân Hòa, Kp 3, phường Long Bình Tân, thành phố Biên Hịa, tỉnh Đồng Nai Điện thoại đơn vị: 0613.930.082 Điện thoại riêng: 0976.971.128 Fax: 0613.937.379 E-mail: minhtuongspkt@gmail.com II QUÁ TRÌNH ĐÀO TẠO: Trung cấp: Đại học: Hệ đào tạo: Chính quy Thời gian đào tạo từ 09/2002 đến 09/2007 Nơi học: Trường Đại Học Sư Phạm Kỹ Thuật Thành Phố Hồ Chí Minh Ngành học: Cơ khí động lực Tên đồ án tốt nghiệp: “Băng Thử Công Suất Động Cơ” Ngày & nơi bảo vệ tốt nghiệp: 4/2007 Trường Đh SPKT Tp.HCM Giảng viên hướng dẫn: Thạc sĩ Đỗ Quốc Ấm III Q TRÌNH CƠNG TÁC CHUN MƠN TỪ KHI TỐT NGHIỆP ĐẠI HỌC Thời gian Nơi công tác Công việc đảm nhiệm 2007 – 2010 Cty Cổ phần tư vấn xây dựng điện Nhân Viên Phòng Sản Xuất 2010 – 2011 Trường Cao Đẳng Nghề Đà Lạt Giáo Viên Hiện Trường Cao Đẳng Nghế số Giáo viên i LỜI CAM ĐOAN Tôi cam đoan cơng trình nghiên cứu tơi Các số liệu, kết nêu luận văn trung thực chưa công bố công trình khác Tp Hồ Chí Minh, ngày 19 tháng năm 2014 Ký tên ii LỜI CẢM ƠN Trong q trình thực đề tài, Tơi nhận nhiều giúp đỡ, tạo điều kiện tập thể Ban Giám hiệu, Khoa Sau Đại học, Khoa Cơ Khí Động Lực, giảng viên, cán phịng, ban chức Trường Đại học Sư Phạm Kỹ Thuật Thành Phố Hồ Chí Minh đặc biệt Khoa khí trường Đại học Nơng Lâm Thành Phố Hồ Chí Minh Tơi xin bày tỏ lịng cảm ơn chân thành giúp đỡ Tơi xin bày tỏ lịng biết ơn sâu sắc tới Tiến Sĩ Nguyễn Huy Bích trực tiếp hướng dẫn bảo cho Tơi hồn thành luận văn Tôi xin chân thành cảm ơn bạn bè, đồng nghiệp Tơi gia đình động viên, khích lệ, tạo điều kiện giúp đỡ Tơi suốt q trình thực hồn thành luận văn Mặc dù tơi có nhiều cố gắng hồn thiện luận văn tất nhiệt tình lực mình, nhiên khơng thể tránh khỏi thiếu sót, mong nhận đóng góp q báu q thầy bạn Tp Hồ Chí Minh, tháng năm 2014 Học viên thực iii MỤC LỤC Trang tựa TRANG Quyết định giao đề tài Xác nhận cán hướng dẫn Lý lịch khoa học i Lời cam đoan ii Tóm tắt iv Astract v Mục lục vi Danh sách chữ viết tắt ix Danh sách hình x Danh sách bảng xii Chương TỔNG QUAN 1.1 Lý chọn đề tài 1.2 Tình hình nghiên cứu nước 1.3 Mục đích của đề tài .5 1.4 Nhiệm vụ giới hạn đề tài 1.4.1 Nhiệm vụ đề tài 1.4.2 Giới hạn đề tài 1.5 Phương pháp nghiên cứu .5 Chương CƠ SỞ LÝ THUYẾT .6 2.1 Lý thuyết rung động máy 2.1.1 Định nghĩa rung động .6 2.1.2 Tính chất rung động .7 2.1.3 Miền thời gian 2.1.4 Miền tần số vi 2.2 Rung động của động 10 2.2.1 Hư hỏng bugi 11 2.2.2 Xéc măng bị mòn .11 2.2.3 Không cân quán tính 12 2.2.4 Phương pháp tính tần số rung động 12 2.2.5 Hậu rung động 12 2.3 Phương pháp xử lý ứng dụng phân tích phổ của tín hiệu rung .13 2.3.1 Lý thuyêt tín hiệu xử lý tín hiệu 13 2.3.2 Phương pháp phân tích tín hiệu rung động 14 2.3.2.1 Phương pháp phân tích hình bao 14 2.3.2.2 Phương pháp phân tích Kurtosis 15 2.3.2.3 Phép biến đổi Fourier FFT .16 2.3.2.4 Ứng dụng biến đổi Fourier để phân tích tín hiệu rung động 18 2.3.3 Cảm biến đo rung động 20 2.4 Phần mềm LabVIEW .23 2.5 Phần mền PSoC Designer 24 2.6 Phần mền Ocard 24 Chương MƠ HÌNH THỰC NGHIỆM CHẨN ĐOÁN KỸ THUẬT ĐỘNG CƠ 25 3.1 Tổng quan mơ hình thực nghiệm chẩn đoán kỹ thuật của động .25 3.1.1 Sơ đồ tổng quan mơ hình thực nghiệm 25 3.1.2 Cấu trúc ngun lý hoạt động mơ hình thực nghiệm 26 3.2 Thiết kế, chế tạo TVE –T01 chẩn đoán kỹ thuật động 27 3.2.1 Quy trình thiết kế chế tạo 27 3.2.2 Thiết kế phần cứng 27 3.2.2.1 Thiết kế khối nguồn 27 3.2.2.2 Thiết kế khối vi điều khiển PSoC 29 3.2.2.3 Thiết kế khối A/D 33 3.2.2.4 Thiết kế khối UART .34 vii 3.2.2.5 Thiết kế khối lọc cho cảm biến gia tốc 34 3.2.2.6 Thiết kế khối truyền liệu 34 3.3 Thiết kế phần mềm 37 3.3.1 Thuật tốn chương trình điều khiển, xử lý liệu 37 3.3.2 Lập trình điều khiển board mạch thu thập xử lý liệu 38 3.3.3 Lập trình điều khiển, thu thập phân tích hiển thị kết 39 3.4 Bộ tích hợp TVE-T01 chẩn đoán kỹ thuật động .41 Chương THỰC NGHIỆM VÀ ĐÁNH GIÁ KẾT QUẢ 42 4.1 Các phương án thực nghiệm chẩn đoán kỹ thuật động 42 4.2 Phương tiện thực nghiệm điều kiện thực nghiệm .42 4.2.1 Động dùng thực nghiệm 42 4.2.2 Bộ chẩn đoán kỹ thuật động TVE-T01 .43 4.2.3 Các thiết bị khác .43 4.2.4 Điều kiện thực nghiệm chung 43 4.3 Thực nghiệm kết 44 4.3.1 Kiểm tra mô hình thực nghiệm chẩn đốn kỹ thuật động 44 4.3.2 Trường hợp (kết xử lý sau lần đo, xem phụ lục) 45 4.3.3 Trường hợp (kết xử lý sau lần đo, xem phụ lục) 47 4.3.4 Trường hợp (kết xử lý sau lần đo, xem phụ lục) 49 4.3.5 Trường hợp (kết xử lý sau lần đo, xem phụ lục) 51 4.3.6 Tổng hợp kết so sánh thực nghiệm 53 Chương KẾT LUẬN 55 5.1 Kết luận 55 5.2 Hướng phát triển .56 TÀI LIỆU THAM KHẢO 57 PHỤ LỤC 58 viii Chương TỔNG QUAN 1.1 Lý chọn đề tài Hàng năm, công ty sản xuất ô tô phải bỏ khoản chi phí lớn để sửa chữa bảo dưỡng động Khi cố xảy gây tổn thất lớn cho sản xuất công tác quản lý bảo dưỡng sửa chữa Xuất phát từ vấn đề này, ngành cơng nghiệp tơ có giải pháp chẩn đốn tình trạng làm việc động với trợ giúp ngành công nghệ điện tử, cơng nghệ thơng tin kỹ thuật giám sát chẩn đốn tình trạng làm việc động có bước tiến nhảy vọt Các thuật toán FFT [01] phần mềm quản lý ứng dụng vào khả phân tích xử lý tín hiệu cho phép giám sát chẩn đốn xác tình trạng làm việc động Hệ thống giám sát chịu trách nhiệm phân tích tượng xuất trình làm việc động tiếng ồn, rung động kiểm tra tình trạng làm việc thực tế động cơ, phát trạng thái làm việc bất thường động cơ, từ chẩn đốn tình trạng làm việc động hư hỏng Khi động làm việc, ảnh hưởng rung động nghiêm trọng Động bị thiệt hại rung động Nếu rung động xảy có cơng hưởng tần số làm nứt gãy vài phần đai ốc, bu lông mỏi Rung động mang tính dây chuyền từ chi tiết rung động bất thường gây hư hỏng cho nhiều chi tiết động Sự rung động khơng loại bỏ, cách ly truyền qua hệ thống liên kết với động hệ thống điện, hệ thống treo, hệ thống lái, hệ thống truyền động, hộp số, vi sai, khung sườn tơ, v.v Chính “Nghiên cứu phân tích phổ tần số rung của động nhằm đánh giá tình trạng làm việc của động cơ” công việc quan trọng có ý nghĩa vơ to lớn cơng tác chẩn đốn, bảo dưỡng sửa chữa phịng ngừa hư hỏng động ***********************************v oid ADC_1_Init(void) { ADC_1_Config = 1u; ADC_1_convDone = 0u; ADC_1_Ext_CP_Clk_SetMode(CYCLK_D UTY); /* This is only valid if there is an internal clock */ #if(ADC_1_DEFAULT_INTERNAL_CLK) ADC_1_theACLK_SetMode(CYCLK_DUT Y); #endif /* ADC_1_DEFAULT_INTERNAL_CLK */ #if(ADC_1_IRQ_REMOVE == 0u) /* Set interrupt priority */ CyIntSetPriority(ADC_1_INTC_NUMBER, ADC_1_INTC_PRIOR_NUMBER); #endif /* End ADC_1_IRQ_REMOVE /* Init static registers with common configuration */ ADC_1_DSM_DEM0_REG = ADC_1_CFG1_DSM_DEM0; ADC_1_DSM_DEM1_REG = ADC_1_CFG1_DSM_DEM1; #if(ADC_1_MI_ENABLE != 0u) /* Enable Modulator Input */ ADC_1_DSM_MODBIT_EN; #else #if(ADC_1_DEFAULT_NUM_CONFIGS > 3) ADC_1_GainCompensation(ADC_1_CFG4_ INPUT_RANGE, ADC_1_CFG4); } /*********************************** * Function Name: ADC_1_Enable *********************************** * Summary: * Enables the ADC DelSig block operation * Parameters: * None * Return: * None void ADC_1_Enable(void) { uint8 config; uint8 enableInterrupts; enableInterrupts = CyEnterCriticalSection(); /* Read volatile variable to the local variable */ config = ADC_1_Config; /* Enable active mode power for ADC */ ADC_1_PWRMGR_DEC_REG |= ADC_1_ACT_PWR_DEC_EN; /* Enable alternative active mode power for ADC */ ADC_1_STBY_PWRMGR_DSM_REG |= ADC_1_STBY_PWR_DSM_EN; /* Disable PRES, Enable power to VCMBUF0, REFBUF0 and REFBUF1, enable PRES */ ADC_1_RESET_CR4_REG |= ADC_1_DSM_EN_BUF_VCM); /* Code to disable the REFBUF0 if reference chosen is External ref */ #if (((ADC_1_CFG1_REFERENCE == ADC_1_EXT_REF_ON_P32)))) if (((config == 1u) && ((ADC_1_CFG1_REFERENCE == ADC_1_EXT_REF_ON_P03) || { /* Enable the REFBUF1 */ ADC_1_DSM_REF0_REG |= ADC_1_DSM_EN_BUF_VREF_INN; } #endif /* VSSA_TO_2VREF */ if(config != 0u) { /* Suppress compiler warning */ } /* Wait for microseconds */ CyDelayUs(ADC_1_PRES_DELAY_TIME) ; /* Enable the press circuit */ ADC_1_RESET_CR4_REG &= (uint8)~ADC_1_IGNORE_PRESA1; (uint8)~ADC_1_IGNORE_PRESA2; /* Enable negative pumps for DSM */ ADC_1_PUMP_CR1_REG |= ( ADC_1_PUMP_CR1_CLKSEL | /* Enable Modulator Chopping if required */ ADC_1_DSM_CR2_REG = /* This is only valid if there is an internal clock */ /* Clear a pending interrupt */ CyIntClearPending(ADC_1_INTC_NUMBE R); /* Enable interrupt */ 96 CyIntEnable(ADC_1_INTC_NUMBER); #endif /* End ADC_1_IRQ_REMOVE */ CyExitCriticalSection(enableInterrupts); } /*********************************** * Function Name: ADC_1_Start *********************************** * Summary: * Performs all required initialization for this component and enables * the power It configure all the register the first time it is called * Subsequent calls of the Start function only enable the ADC and turn * on the power If multiple configurations are selected, it will * configure the ADC for configuration by default, unless the * ADC_1_SelectConfiguration( ) function has been called to change * the default setting * Parameters: * None * Return: * None * Global variables: * ADC_1_initVar: Used to check the initial configuration, * modified when this function is called for the first time *********************************** void ADC_1_Start(void) { if(ADC_1_initVar == 0u) { if(ADC_1_started == 0u) { ADC_1_Init(); } ADC_1_initVar = 1u; } /* Enable the ADC */ ADC_1_Enable(); } /*********************************** * Function Name: ADC_1_Stop *********************************** * Summary: * This function stops and powers down the ADC component and the internal * clock if the external clock is not selected If an external clock is * used, it is up to the designer to power down the external clock it * required * Parameters: * None * Return: * None /*********************************** * Function Name: ADC_1_SetCoherency *********************************** * Summary: * This function allows the user to change which of the ADC's word * result will trigger a coherency unlock The ADC's result will not be * updated until the set byte is read either by the ADC or DMA * By default the LSB is the coherency byte for right alignment data format * The middle or high byte is set automatically depend on left alignment * configuration for DMA data transfer * If DMA or if a custom API requires different byte to be read the last, * this API should be used to set the last byte of the ADC result that is read * If a multibyte read is performed either by DMA or the ARM processor, the * coherency can be set to any byte in the last word read * Parameters: * coherency: Two bit value to set the coherency bit * 00-Coherency checking off * 01-low byte is key byte * 02-middle byte is the key byte * 03-high byte is the key byte * Return: * None *********************************** void ADC_1_SetCoherency(uint8 coherency) { uint8 tmpReg; tmpReg = ADC_1_DEC_COHER_REG & (uint8)~ADC_1_DEC_SAMP_KEY_MASK; tmpReg |= coherency & ADC_1_DEC_SAMP_KEY_MASK; ADC_1_DEC_COHER_REG = tmpReg; } 97 /*********************************** * Function Name: ADC_1_SetGCOR *********************************** * Summary: * Calculates a new GCOR value and writes it into the GCOR register * The GCOR value is a 16-bit value that represents a gain of to * The ADC result is multiplied by this value before it is placed in the ADC * output registers The numerical format for the GCOR value is: * 0x0000 -> 0.000 * 0x8000 -> 1.000 * 0xFFFF -> 1.99997 * When executing the function, the old GCOR value is multiplied by * gainAdjust and reloaded into the GCOR register * Parameters: * gainAdjust: floating point value to set GCOR registers * Return: * uint8: - if GCOR value is within the expected range * - the correction value is outside GCOR value range of * 0.00 to 1.9999 * Side Effects: The GVAL register is set to the amount of valid bits in the * GCOR register minus one If GVAL is 15 (0x0F), all 16 bits * of the GCOR registers will be valid If for example GVAL is * 11 (0x0B) only 12 bits will be valid The least bits will * be lost when the GCOR value is shifted places to the right *********************************** uint8 ADC_1_SetGCOR(float32 gainAdjust) { uint16 tmpReg; uint8 status; float32 tmpValue; tmpReg = ADC_1_gcor[ADC_1_Config 1u].gcor; tmpValue = ((float32)tmpReg / (float32)ADC_1_IDEAL_GAIN_CONST); tmpValue = tmpValue * gainAdjust; { status = 1u; } else { tmpValue *= (float32)ADC_1_IDEAL_GAIN_CONST; tmpReg = (uint16)tmpValue; CY_SET_REG16(ADC_1_DEC_GCOR_16 B_PTR, tmpReg); /* Update gain array to be used by SelectConfiguration() API */ ADC_1_gcor[ADC_1_Config - 1u].gcor = tmpReg; status = 0u; } return(status); } *********************************** uint16 ADC_1_ReadGCOR(void) { uint8 gValue; uint16 gcorValue; gValue = ADC_1_DEC_GVAL_REG; gcorValue = CY_GET_REG16(ADC_1_DEC_GCOR_16 B_PTR); if (gValue < ADC_1_MAX_GVAL) { gcorValue */ #if(ADC_1_DEFAULT_NUM_CONFIGS > 2) if(config == 3u) { /* Third Config */ ADC_1_DEC_CR_REG = ADC_1_CFG3_DEC_CR; 104 /* Set DSM_REF0_REG by disabling and enabling the PRESS circuit */ #if(ADC_1_DEFAULT_INPUT_MODE) #if (ADC_1_CFG3_INPUT_RANGE == ADC_1_IR_VSSA_TO_2VREF) ADC_1_AMux_Select(1u); #else ADC_1_AMux_Select(0u); #endif /* ADC_1_IR_VSSA_TO_2VREF) */ #endif /* ADC_1_DEFAULT_INPUT_MODE */ /* Set the Conversion stop if resolution is above 16 bit and conversion mode is Single sample */ #if(ADC_1_CFG3_RESOLUTION > 16 && \ ADC_1_CFG3_CONV_MODE == ADC_1_MODE_SINGLE_SAMPLE) ADC_1_stopConversion = 1u; #endif /* Single sample with resolution above 16 bits */ ADC_1_CountsPerVolt = (int32)ADC_1_CFG3_COUNTS_PER_VOL T; ADC_1_Ext_CP_Clk_SetDividerRegister(A DC_1_CFG3_CP_CLK_DIVIDER, 1u); #endif /* End ADC_1_IRQ_REMOVE */ } #endif /* ADC_1_DSM_REF2_REG = ADC_1_CFG4_DSM_REF2; ADC_1_DSM_REF3_REG = ADC_1_CFG4_DSM_BUF2; /* To select either Vssa or Vref to -ve input of DSM depending on * the input range selected #if(ADC_1_DEFAULT_INPUT_MODE) /*********************************** * Function Name: ADC_1_SelectCofiguration *********************************** * Summary: * Sets one of up to four ADC configurations Before setting the new * configuration, the ADC is stopped and powered down After setting * the new configuration, the ADC can be powered and conversion * can be restarted depending up on the value of second parameter * restart If the value of this parameter is 1, then ADC will be * restarted If this value is zero, then user must call ADC_1_Start * and ADC_1_StartConvert() to restart the conversion * Parameters: * config: configuration user wants to select * Valid range: * restart: Restart option means start the ADC and restart the conversion * means not start the ADC and conversion * Return: * None *********************************** void ADC_1_SelectConfiguration(uint8 config, uint8 restart) { /* Check whether the configuration number is valid or not */ if((config > 0u) && (config Pin_1_SHIFT; } /************************************ * Function Name: Pin_1_ReadDataReg ************************************ * Summary: * Read the current value assigned to a Digital Port's data output register * Parameters: * None * Return: * Returns the current value assigned to the Digital Port's data output register ************************************ uint8 Pin_1_ReadDataReg(void) { return (Pin_1_DR & Pin_1_MASK) >> Pin_1_SHIFT; } /* If Interrupts Are Enabled for this Pins component */ #if defined(Pin_1_INTSTAT) /************************************ * Function Name: Pin_1_ClearInterrupt ************************************ * Summary: * Clears any active interrupts attached to port and returns the value of the * interrupt status register * Parameters: * None * Return: * Returns the value of the interrupt status register ************************************ uint8 Pin_1_ClearInterrupt(void) { return (Pin_1_INTSTAT & Pin_1_MASK) >> Pin_1_SHIFT; } #endif /* If Interrupts Are Enabled for this Pins component */ /* [] END OF FILE */ 108 Chương trình Orcad thiết kế mạch 109 S K L 0 ... tới rung động xe Nghiên cứu truyền rung động chưa xác định cố chẩn đoán hư hỏng động 1.3 Mục đích của đề tài Nghiên cứu phân tích phổ tần số rung động nhằm đánh giá tình trạng làm việc động cơ, ... MINH LUẬN VĂN THẠC SĨ ĐỒN MINH TƯỜNG NGHIÊN CỨU VÀ PHÂN TÍCH PHỔ TẦN SỐ RUNG CỦA ĐỘNG CƠ NHẰM ĐÁNH GIÁ TÌNH TRẠNG LÀM VIỆC CỦA ĐỘNG CƠ NGÀNH: KỸ THUẬT CƠ KHÍ ĐỘNG LỰC - 60520116 Hướng dẫn khoa...BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH LUẬN VĂN THẠC SĨ ĐỒN MINH TƯỜNG NGHIÊN CỨU VÀ PHÂN TÍCH PHỔ TẦN SỐ RUNG CỦA ĐỘNG CƠ NHẰM ĐÁNH GIÁ TÌNH TRẠNG LÀM VIỆC

Ngày đăng: 06/12/2021, 21:33

Tài liệu cùng người dùng

Tài liệu liên quan