BÁO CÁO ĐỒ ÁN TÊN ĐỀ TÀI: Thiết kế xe điều khiển bằng sóng RF sử dụng mạch STM32

25 70 0
BÁO CÁO ĐỒ ÁN  TÊN ĐỀ TÀI:  Thiết kế xe điều khiển bằng sóng RF sử dụng mạch STM32

Đ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

TRƯỜNG ĐẠI HỌC LẠC HỒNG KHOA CƠ ĐIỆN - ĐIỆN TỬ - BỘ MÔN: VI ĐIỀU KHIỂN BÁO CÁO ĐỒ ÁN TÊN ĐỀ TÀI: Thiết kế xe điều khiển sóng RF sử dụng mạch STM32 GVHD : NGƠ KIM LONG Lớp: 19CD111 SVTH : Vũ Đình Tảo Hồng Kim Qúy Phạm Quốc Tân Biên Hịa, tháng 11 năm 2021 TRƯỜNG ĐẠI HỌC HỌC LẠC HỒNG KHOA CƠ ĐIỆN - ĐIỆN TỬ BỘ MÔN: VI ĐIỀU KHIỂN BÁO CÁO ĐỒ ÁN TÊN ĐỀ TÀI: Thiết kế xe điều khiển sóng RF sử dụng mạch STM32 Giảng viên hướng dẫn : NGÔ KIM LONG Sinh viên thực : Vũ Đình Tảo Hồng Kim Qúy Phạm Quốc Tân Lớp: 19CD111 Biên Hòa, tháng 11 năm 2021 MỤC LỤC CHƯƠNG MỞ ĐẦU 1.1 Lý chọn đề tài 1.2 Mục tiêu nghiên cứu đề tài 1.3 Phạm vi nghiên cứu 1.4 Kết đạt CHƯƠNG CƠ SỞ LÝ THUYẾT 2.1 Phân tích để tài 2.2 Lựa chọn thiết bị Phần cứng 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 Vi sử lí: Kit STM32f407 -DISCOVERY Bộ khung xe robot bánh ( mica, Motor giảm tốc DC, ba bánh xe) Mạch điều khiển RF 315mhz kênh Mạch điều khiển motor DC L298n bóng đèn led 2.3 2.4 Giới thiệu phần mềm 10 Sơ đồ nguyên lý hoạt động 11 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 Tổng quan sơ đồ 11 Khối motor kết nối mạch L298n 11 Khối đèn trước đèn sau 12 Khối điều khiển 12 Khối vi xử lý 13 CHƯƠNG THIẾT KẾ 14 3.1 Kết nối phần cứng 14 3.1.1 Thống kê I/O 14 3.2 3.3 3.4 3.5 Sơ đồ giải thật 16 Viết code cho hệ thống 16 Thử nghiệm mơ hình 22 Kết thử nghiệm 22 CHƯƠNG KẾT LUẬN 24 4.1 Kết đạt 24 4.2 Hạn chế 24 4.3 Hướng phát triển 24 TÀI LIỆU THAM KHẢO 25 Chương MỞ ĐẦU 1.1 Lý chọn đề tài Ngày tời đại tiên tiến công nghệ khoa học kỹ thuật, thành tựu cánh mạng 4.0 làm cho sống ngày phát triển Với phát triển khơng ngừng phát triển nhiều đồ chơi công nghệ tiên tiến nhiều dạng khác sóng RF sử dụng đa dạng phong phú 1.2 Mục tiêu nghiên cứu đề tài Là mục tiêu nghiên cứu sử dụng sóng RF để điều khiển xe mơ hình với tính quẹo trái, quẹo phải, tiến tới, lùi về, đèn trước, đền sau Người sử dụng điều khiển xe mơ hình hoạt động theo ý muốn người điều khiển remotr 1.3.Phạm vi nghiên cứu Phần cứng: - Đấu nối thiết bị ngoại vi, với vi xử lý trung tâm - Xử lý vấn đề phần cứng phát sinh gây nhiễu Phần mềm: - Nghiên cứu đưa giải pháp lập trình 1.4.Kết đạt - - Thay đồ chơi truyền thống chạy motor ko có điều khiển thay thành đồ chơi công nghệ 4.0 điểu khiển theo chức nút nhấn Có thể ứng dụng vào phát triển điều khiển robot xếp kho kho phân loại Có thể ứng dụng điều khiển cửa tự động nút nhấn Chương 2.CƠ SỞ LÝ THUYẾT 2.1 Phân tích để tài Trong đề tài nhóm, nhóm chúng em sử dụng mạch kit STM32F407DISCOVERY để kết nối với thu sóng RF,điều khiển cho động DC đèn trước đèn sau.với bộ phát sóng RF gồm có nút để xuất tín hiệu cho thu sóng với nút nhấn tương ứng cho chức nút nhấn số điều khiển hai động tiến tới ,nút nhấn số hai động lùi về,nhấn nút động phải quay ngược lại động trái tiến tới (rẽ phải), nhấn nút 4động trái quay ngược lại động phải tiến tới (rẽ trái), nhấn nút 5lần đèn trước sáng, nhấn nút lần hai đèn tắt, nhấn nút lần đèn sau sáng, nhấn nút lần hai đèn sau tắt Tổng quan sóng vơ tuyến (RF) Trong phiên truyền thơng, tận chất liệu bao gồm bit 1, bên phát liệu cần có cách thức để gửi bit để gửi cho bên nhận Một tín hiệu xoay chiều hay chiều tự không thực tác vụ Tuy nhiên, tín hiệu có thay đổi dao động, dù ít, thay đổi giúp phân biệt bit bit Lúc đó, liệu cần truyền gửi nhận thành cơng dựa vào thay đổi tín hiệu Có ba thành phần dạng sóng thay đổi để tạo sóng mang, biên độ, tần số pha Tất dạng truyền thơng dùng sóng vô tuyến dùng vài dạng điều chế để truyền liệu Để mã hóa liệu vào tín hiệu gửi qua sóng AM/FM, điện thoại di động, truyền hình vệ tinh, ta phải thực vài kiểu điều chế sóng vơ tuyến truyền Hình 2.1:sơ đồ khối 2.2 Lựa chọn thiết bị Phần cứng Với đề tài xe điều sóng RF, phần cứng nhóm em sử dụng bao gồm: - Modul Kit STM32f407 -DISCOVERY - Bộ khung xe robot bánh ( mica, hai động DC, ba bánh xe) - Mạch điều khiển RF 315mhz kênh 12V - Mạch điều khiển động DC L298n 5~12V - Đèn led ( led đỏ, led trắng) 2.2.1 Vi sử lí: Kit STM32f407 -DISCOVERY Kit STM32F407 Discovery loại kit sử dụng số trường đại học giảng dạy vi điều khiển ARM, so sánh ngoại vi sức mạnh STM32 so với dòng ARM hãng khác tầm giá , ARM STM 32 vượt trội cấu hình ngoại vi nhiều Vi điều khiển Kit STM32f407 microcontroller featuring 32-bit ARM contex-M4F core,1MB flash, 192 KB RAM in an LQFP 100 package Tích hợp sẵn mạch nạp debug STINK/V2 Nguồn cấp từ cổng usb mini qua ic nguồn chuyển thành 3.3v Có sẵn chân nguồn 3V 5V Có cảm biến gia tốc : LIS302DL, ST MEMS MOTION SENSER, 3-AXITS Có led Có led thơng báo trạng thái nguồn Tích hợp nút nhấn cho người sử dụng nút reset Có cổng Micro USB OTG Hình 2.2: Kit STM32F407 Discovery 2.2.2 Bộ khung xe robot bánh ( mica, Motor giảm tốc DC, ba bánh xe) Dùng để gắn thiết bị lên mica Thông tin Tấm mica khung xe - Kích thước: 220 x 150mm - Chất liệu: nhựa Hình 2.3: Mica khung xe Motor xe hoạt động tiến lùi, quẹo, trái, quẹo phải Một số thông tin Motor giảm tốc DC - Kích thước động : 70x22x18mm - Tỷ số bánh răng: 1:48 - Điện áp định mức: ~ 6V - Mơ-men xoắn: 0,15Nm ~ 0,60Nm Hình 2.4: Motor giảm tốc DC Động phải kèm theo Bánh xe cho mơ hình chạy Một số thơng tin bánh xe - Đường kính bánh xe: 65mm - Độ dày bánh xe: 28mm Hình 2.5: Bánh xe 2.2.3 Mạch điều khiển RF 315mhz kênh Với đề tài nhóm điều khiển xe tín hiệu xuất ngõ nên nhóm chúng em chọn điều khiển sóng RF kênh tích hợp với xe - Nguồn nuôi: 12VDC - Relay điều khiển: 10A 120VAC/ 20A14DC - Phương pháp học lệnh: nút nhấn + remote - Tần số 315MHZ - Khoảng cách điểu khiển: 1000m Hình 2.6: Mạch điều khiển RF 315mhz kênh 2.2.4 Mạch điều khiển motor DC L298n Để điều khiển motor nhóm em lựa chọn mạch L298n để điều khiển motor theo lệnh đưa Ic chính: L298-Dual Full Bridge Driver Điện áp đầu vào: 5~30VDC Cơng suất tối đa: 25w cầu Dịng tối đa cho cầu H là: 2A Mức điện áp logic: low- 0.3V~1.5V, high:2.3V~Vss Kích thước:43x43x27mm Hình 2.7: Mạch điều khiển động DC L298n 2.2.5 bóng đèn led Để làm đèn trước đèn sau nhóm chúng em chọn đèn led dễ lắp đặt, dịng điện tiêu thụ thấp phù hợp với mạch Cường độ dòng điện:15000-18000mcd Dòng điện:2~2.5V | 20mA Hình 2.8: Đèn led 2.3 Giới thiệu phần mềm STM32cubeMX: STM32CubeMX công cụ hỗ trợ cấu hình tạo code cho MCU STM32.Tất cơng việc cấu hình, nâng cấp thực qua giao diện đồ họa Việc giúp cho việc lập trình STM32 dễ dàng hơn, rút ngắn thời gian nghiên cứu phát triển Hình 2.9: Phần mềm stm32cubeMx KeilC v5 Hiện có nhiều trình biên dịch ngôn ngữ C cho 8051 Mikro C, IAR,SDCC, Reads 51 … µVision mơi trường phát triển tích hợp (IDE: Integrated Development Environment, trình soạn thảo ngơn ngữ C, trình biên dịch debug) cơng ty Keil Software, thường gọi Keil C Keil C môi trường phát triển mạnh sử dụng rộng rãi Nó hỗ trợ ta viết chương trình cho chip vi điều khiển lõi 8051 ARM tất hãng giới Hình 2.10: Phần mềm keilc version 2.4 Sơ đồ nguyên lý hoạt động 2.4.1 Tổng quan sơ đồ Hình 2.11: Tổng quan sơ đồ 2.4.2 Khối motor kết nối mạch L298n - Motor em kết nối OUT4, OUT3,OUT2,OUT1 mạch L298n IN4, IN3, IN2, IN1 em kết nối với mạch STM chân PB2, PB3,PB4,PB5 Hình 2.12: Sơ đồ kết nối chân motor với mạch L298n 2.4.3 Khối đèn trước đèn sau - Kết nối đèn trước gồm có bóng đèn led điện trở 100Ω kết nối với mạch STM chân PB6 - Kết nối đèn sau gồm có bóng đèn led điện trở 100Ω kết nối với mạch STM chân PB7 Hình 2.13 khối đèn trước đèn sau 2.4.4 Khối điều khiển - Nút nhấn số 1, số 2, số 3, số 4, số 5, số 6được kết nối với mạch STM dạng INPUT.Chân PE0,PE1,PE2,PA0,PE4,PE5 Hình 2.14 Khối điều khiển 2.4.5 Khối vi xử lý - PB2,PB3,PB4,PB5,PB6,PB7 ngõ để điều khiển thiết - PE0, PE1,PE2,PA0,PE4,PE5 ngõ vào để cấp tín hiệu cho ngõ Hình 2.15 Khối vi xửa lý Chương THIẾT KẾ 3.1 Kết nối phần cứng 3.1.1 Thống kê I/O Dựa vào sơ đồ nhóm em thống kê I/O ngõ vào ngõ vi sử lý: - Ngõ vào: PE0, PE1,PE2,PA0,PE4,PE5 kết nối với nút nhấn sóng RF Hình 3.1: Sơ đồ kết nối dây với mạch thu sóng RF - Ngõ ra: PB2,PB3,PB4,PB5: kết nối với mạch L298n + cấp nguồn cho module L298: 12v +c ác chân số PB2,PB3,PB4,PB5 mạch STM nối tương ứng với IN1,IN2,IN3 IN4 L298 + Chiều quay động điều khiển cách xuất đầu HIGH LOW chân IN +VD: chân IN1 chân OUTA.1, chân IN2 chân OUTA.2 Cấp nguồn dương vào IN1, cực âm IN2 => motor quay chiều(chiều 1) Cấp nguồn âm vào IN1, cực dương vào IN2 => motor quay chiều lại(chiều 2) Cực dương 12v cực âm 0v Giả sử hiệu điện 12v mạnh việc điều khiển động Như vậy, cần hạ điện xuống động bị yếu Và hiệu điện < = > động đào chiều Hình 3.2: Sơ đồ kết nối dây với mạch l298 PB6,PB7:và đèn trước đèn sau Hình 3.2: Sơ đồ kết nối dây đèn trước Hình 3.3: Sơ đồ kết nối dây đèn sau 3.2 Sơ đồ giải thật Hình 3.4: Sơ đồ giải thuật 3.3 Viết code cho hệ thống #include "main.h" void SystemClock_Config(void); static void MX_GPIO_Init(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); while (1) { // NUT SO DEN TRUOC if(HAL_GPIO_ReadPin (GPIOE, GPIO_PIN_4)==1) { HAL_Delay(100); HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6); } //NUT SO DEN SAU if(HAL_GPIO_ReadPin (GPIOE, GPIO_PIN_5)==1) { HAL_Delay(100); HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_7); } // NUT SO CHAY TOI else if(HAL_GPIO_ReadPin (GPIOE, GPIO_PIN_0)==1) { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET); } //NUT SO CHAY LUI else if(HAL_GPIO_ReadPin (GPIOE, GPIO_PIN_1)==1) { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET); } //NUT SO TRAI else if(HAL_GPIO_ReadPin (GPIOE, GPIO_PIN_2)==1) // quay trai { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET); } //NUT SO PHAI else if(HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_0)==1) // quay trai { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET); } else // dung { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET); } } } void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; HAL_RCC_PWR_CLK_ENABLE(); HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLT AGE_SCALE2); RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLM = 8; RCC_OscInitStruct.PLL.PLLN = 168; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; RCC_OscInitStruct.PLL.PLLQ = 4; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { Error_Handler(); } } /** * @brief GPIO Initialization Function * @param None * @retval None */ static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; /* GPIO Ports Clock Enable */ HAL_RCC_GPIOE_CLK_ENABLE(); HAL_RCC_GPIOH_CLK_ENABLE(); HAL_RCC_GPIOA_CLK_ENABLE(); HAL_RCC_GPIOB_CLK_ENABLE(); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOE, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_P IN_5, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_P IN_7, GPIO_PIN_RESET); /*Configure GPIO pins : PE2 PE3 PE4 PE5 */ GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_P IN_5; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLDOWN; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); /*Configure GPIO pin : PA0 */ GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLDOWN; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /*Configure GPIO pins : PB2 PB4 */ GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_P IN_7; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); } /* USER CODE BEGIN */ /* USER CODE END */ /** * @brief This function is executed in case of error occurrence * @retval None */ void Error_Handler(void) { /* USER CODE BEGIN Error_Handler_Debug */ /* User can add his own implementation to report the HAL error return state */ /* USER CODE END Error_Handler_Debug */ } #ifdef USE_FULL_ASSERT /** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred * @param file: pointer to the source file name * @param line: assert_param error line source number * @retval None */ void assert_failed(uint8_t *file, uint32_t line) { /* USER CODE BEGIN */ /* User can add his own implementation to report the file name and line number, tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* USER CODE END */ } #endif /* USE_FULL_ASSERT */ 3.4 Thử nghiệm mơ hình Em thử nghiệm phần mềm chạy yêu cầu Hình 3.5: thử nghiệm phần mềm Hình 3.6: thử nghiệm mơ hình 3.5 Kết thử nghiệm Phần cứng: Đã hoàn thành đạt kết mong muốn Phần mềm: Đã hoàn thành đạt kết mong muốn Hình 3.7: Bảng kết thí nghiệm Chương 4.KẾT LUẬN 4.1 Kết đạt Hình 4.1:kết đạt Đã mô đề tài theo yêu cầu đặt - Nhấn nút số xe điều khiển tới - Nhấn nút số xe điều khiển lùi lại - Nhấn nút số xe điều khiển quay trái - Nhấn nút số xe điều khiển quay phải - Nhấn nút số lần đèn trước sáng nhấn lần đèn tắt - Nhấn nút số lần đèn sau sáng nhấn lần đèn tắt 4.2 Hạn chế - Dây cịn dùng nguồn pin ngồi Dây dợ chưa lung tung Bánh xe đa hướng quẹo ko chuẩn 4.3 Hướng phát triển - Cần cải tiến lắp pin xe (nguồn ni 12v cho mạch thu sóng RF mạch L298n.) Cần phát triển thêm tính khác cảm biên va chạm ,còi Dậy gọn gàng Thay xe ba bánh thành bánh TÀI LIỆU THAM KHẢO - TÀI LIỆU 1: Đề tài: Điều khiển từ xa sóng RF - TaiLieu.VN TÀI LIỆU 2: Cách dùng Module điều khiển động L298N - cầu H để điều khiển động DC | Cộng đồng Arduino Việt Nam TÀI LIỆU 3:Làm xe Robot điều khiển RF sử dụng Arduino YouTube ... ĐẠI HỌC HỌC LẠC HỒNG KHOA CƠ ĐIỆN - ĐIỆN TỬ BỘ MÔN: VI ĐIỀU KHIỂN BÁO CÁO ĐỒ ÁN TÊN ĐỀ TÀI: Thiết kế xe điều khiển sóng RF sử dụng mạch STM32 Giảng viên hướng dẫn : NGÔ KIM LONG Sinh viên thực... Độ dày bánh xe: 28mm Hình 2.5: Bánh xe 2.2.3 Mạch điều khiển RF 315mhz kênh Với đề tài nhóm điều khiển xe tín hiệu xuất ngõ nên nhóm chúng em chọn điều khiển sóng RF kênh tích hợp với xe - Nguồn... xe ba bánh thành bánh TÀI LIỆU THAM KHẢO - TÀI LIỆU 1: Đề tài: Điều khiển từ xa sóng RF - TaiLieu.VN TÀI LIỆU 2: Cách dùng Module điều khiển động L298N - cầu H để điều khiển động DC | Cộng đồng

Ngày đăng: 08/02/2022, 13:47

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

Tài liệu liên quan