Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 26 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
26
Dung lượng
866,17 KB
Nội dung
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN TỬ - VIỄN THƠNG ~~~~~ ~~~~~ Báo cáo mơn học Kỹ thuật vi xử lý Đề tài: THIẾT KẾ MẠCH CẢNH BÁO LÙI XE CHO Ô TÔ Giảng viên hướng dẫn: PGS.TS Hoàng Mạnh Thắng Sinh viên thực hiện: Vũ Đức Kiên MSSV: 20182620 Phan Tiến Bảo Duy MSSV: 20182466 Vũ Thị Thanh MSSV: 20182786 Hà Nội, 07/2021 MỤC LỤC LỜI NÓI ĐẦU CHƯƠNG .3 CƠ SỞ LÝ THUYẾT 1.1 Tổng quan vi xử lí lõi ARM ARM Cortex-M3 1.2 Tổng quan vi điều khiển STM32 STM32F103C8T6 1.3 Lập trình cho STM32 1.4 Về HC-SR04 .8 1.5 Về Motor servo CHƯƠNG .11 PHÂN TÍCH THIẾT KẾ HỆ THỐNG .11 2.1 Mô tả hoạt động hệ thống .11 2.2 Yêu cầu hệ thống .11 a Yêu cầu chung 11 b Module HC-SR04 11 c Motor servo .12 CHƯƠNG .13 MÔ PHỎNG VÀ XÂY DỰNG HỆ THỐNG THỰC NGHIỆM 13 3.1 Sơ đồ khối hệ thống 13 3.2 Những linh kiện sử dụng 14 3.3 Lưu đồ thuật toán 15 3.4 Viết chương trình code cho vi điều khiển STM32F103C8T6 16 3.5 Kết thực nghiệm đánh giá 25 LỜI NÓI ĐẦU Trong xu phát triển nay, với bùng nổ ngành cơng nghệ thơng tin, điện tử, tự động hóa, … Đã làm cho đời sống người ngày hồn thiện Các thiết bị tự động hóa ngày xâm lấn vào sản xuất chí vào sống sinh hoạt hàng ngày người Ví dụ tơ có hàng ngàn thiết bị hỗ trợ người lái Là sinh viên khoa Điện tử Viễn thông Đại học Bách Khoa Hà Nội, kiến thức học, nhóm em mạnh dạn chọn “Thiết kế cảnh báo lùi đỗ xe cho ô tô” làm đề tài cho tập lớn Trong trình thực tập lớn mình, hướng dẫn thầy Hoàng Mạnh Thắng, chúng em cố gắng để hoàn thiện cách tốt Nhưng với kiến thức hiểu biết có hạn nên khơng tránh khỏi thiếu sót mong thầy bạn đóng góp ý kiến đề tài em hoàn thiện CHƯƠNG CƠ SỞ LÝ THUYẾT 1.1 Tổng quan vi xử lí lõi ARM ARM Cortex-M3 - Kiến trúc ARM là kiến trúc dạng RISC cho vi xử lý, cấu hình cho môi trường khác nhau. Arm Holdings phát triển kiến trúc cấp phép cho công ty khác Các công ty thiết kế sản phẩm riêng họ bao gồm SoC (System on Chip) module hệ thống SoM (System on Module) kết hợp với ngoại vi nhớ - Vi xử lý lõi ARM Cortex dựa cấu hình kiến trúc ARMv7 Cấu hình A: cho ứng dụng Application, yêu cầu cao chạy hệ điều hành mở phức tạp Linux, Android… Cấu hình R: cho ứng dụng thời gian thực Real Time Cấu hình M: cho ứng dụng vi điều khiển Microcontroller - Bộ vi xử lý ARM Cortex-M3 vi xử lý ARM dựa kiến trúc ARMv7-M thiết kế đặc biệt để đạt hiệu suất cao ứng dụng nhúng cần tiết kiệm lượng chi phí, chẳng hạn vi điều khiển, hệ thống ô tô, hệ thống kiểm sốt cơng nghiệp hệ thống mạng khơng dây Thêm vào việc lập trình đơn giản hóa đáng kể giúp kiến trúc ARM trở thành lựa chọn tốt cho ứng dụng đơn giản Hình 1.1: Cấu trúc vi xử lí ARM Cortex-M3 - Lõi ARM Cortex có cấu trúc đường ống gồm tầng: Instruction Fetch, Instruction Decode Instruction Execute Khi gặp lệnh nhánh, tầng decode chứa thị nạp lệnh suy đốn dẫn đến việc thực thi nhanh Bộ xử lý nạp lệnh dự định rẽ nhánh giai đoạn giải mã Sau đó, giai đoạn thực thi, việc rẽ nhánh giải vi xử lý phân tích xem đâu lệnh thực thi Nếu việc rẽ nhánh khơng chọn lệnh sẵn sàng Cịn việc rẽ nhánh chọn lệnh rẽ nhánh sẵn sàng lập tức, hạn chế thời gian rỗi chu kỳ - Lõi Cortex-M3 chứa giải mã cho tập lệnh Thumb truyền thống Thumb-2 mới, phân chia logic ALU (arithmetic logic unit) tiên tiến hỗ trợ nhân chia phần cứng, điều khiển logic, giao tiếp với thành phần khác xử lý - Bộ vi xử lý Cortex-M3 vi xử lý 32-bit, với độ rộng đường dẫn liệu 32 bit, dải ghi giao tiếp nhớ Có 13 ghi đa dụng, hai trỏ ngăn xếp, ghi liên kết, đếm chương trình số ghi đặc biệt có ghi trạng thái chương trình 1.2 Tổng quan vi điều khiển STM32 STM32F103C8T6 - STM32 dòng chip phổ biến ST với nhiều họ thông dụng F0, F1, F2, F3, F4… Stm32f103 thuộc họ F1 với lõi ARM COTEX M3 STM32F103 vi điều khiển 32 bit, tốc độ tối đa 72Mhz Giá thành rẻ so với loại vi điều khiển có chức tương tự Mạch nạp công cụ lập trình đa dạng dễ sử dụng - Một số ứng dụng chính: dùng cho driver để điều khiển ứng dụng, điều khiển ứng dụng thông thường, thiết bị cầm tay thuốc, máy tính thiết bị ngoại vi chơi game, GPS bản, ứng dụng cơng nghiệp, thiết bị lập trình PLC, biến tần, máy in, máy quét, hệ thống cảnh báo, thiết bị liên lạc nội bộ… Cấu hình chi tiết vi điều khiển STM32F103C8T6 ARM 32-bit Cortex M3 với clock max 72Mhz Bộ nhớ: o 64 kbytes nhớ Flash (bộ nhớ lập trình) o 20kbytes SRAM Clock, reset quản lý nguồn o o Điện áp hoạt động 2.0V -> 3.6V Power on reset(POR), Power down reset(PDR) programmable voltage detector (PVD) o Sử dụng thạch anh từ 4Mhz -> 20Mhz o Thạch anh nội dùng dao động RC mode 8Mhz 40khz o Sử dụng thạch anh 32.768khz sử dụng cho RTC Trong trường hợp điện áp thấp: o Có mode: ngủ, ngừng hoạt động hoạt động chế độ chờ Cấp nguồn chân Vbat pin để hoạt động RTC sử dụng lưu trữ data nguồn cấp ADC 12 bit với kênh cho o o Khoảng giá trị chuyển đổi từ – 3.6V o Lấy mẫu nhiều kênh kênh o Có cảm biến nhiệt độ nội DMA: chuyển đổi giúp tăng tốc độ xử lý can thiệp sâu CPU o kênh DMA o Hỗ trợ DMA cho ADC, I2C, SPI, UART timer o o o timer 16 bit hỗ trợ mode IC/OC/PWM timer 16 bit hỗ trợ để điều khiển động với mode bảo vệ ngắt input, dead-time… watdog timer dùng để bảo vệ kiểm tra lỗi sysTick timer 24 bit đếm xuống dùng cho ứng dụng hàm Delay… Hỗ trợ kênh giao tiếp bao gồm: o o o I2C(SMBus/PMBus) USART (ISO 7816 interface, LIN, IrDA capability, modem control) o SPIs (18 Mbit/s) o CAN interface (2.0B Active) o USB 2.0 full-speed interface Kiểm tra lỗi CRC 96-bit ID Hình 1.2: Sơ đồ chân kit STM32F103C8T6 1.3 Lập trình cho STM32 - STMicroelectronics giới thiệu cơng cụ có tên STM32CubeMX ,tạo code theo thiết bị ngoại vi board STM32 chọn Vì vậy, khơng cần phải lo lắng việc code hóa cho trình điều khiển thiết bị ngoại vi Hơn code tạo sử dụng Keil uVision để chỉnh sửa theo yêu cầu Và cuối cùng, code ghi vào STM32 lập trình ST-Link từ STMicroelectronics - Công cụ STM32CubeMX phần STMicroelectronics STMCube Công cụ phần mềm giúp cho việc phát triển dễ dàng cách giảm giai đoạn phát triển, thời gian chi phí STM32Cube bao gồm STM32CubeMX cơng cụ cấu hình phần mềm đồ họa cho phép tạo code C cách sử dụng trình hướng dẫn đồ họa Code sử dụng môi trường phát triển khác keil uVision, GCC, IAR, v.v Bạn tải xuống cơng cụ từ liên kết sau STM32CubeMX có tính sau: Chân gỡ lỗi Trợ giúp thiết lập xung Một nguồn Một tiện ích thực cấu hình ngoại vi MCU chân GPIO, USART, v.v Một tiện ích thực cấu hình ngoại vi MCU cho ngăn xếp phần mềm trung gian USB, TCP / IP, v.v - Keil C phần mềm hỗ trợ người dung việc lập trình dịng vi điều khiển khác Keil C giúp người dung soạn thảo biên dịch chương trình C hay Assembly thành ngôn ngữ máy để nạp vào vi điều khiển giúp tương tác vi điều khiển người lập trình - Quy trình cấu hình CubeMX: Hình 1.3: Cấu hình CubeMX - Sau lập trình nâng cao KeilC: Hình 1.3: Lập trình nâng cao cho STM32 KeilC 1.4 Về HC-SR04 - Cảm biến HC-SR04 sử dụng sóng siêu âm đo khoảng cách khoảng từ -> 300cm, với độ xác gần phụ thuộc vào cách lập trình Hình 1.4: HC-SR04 - Để đo khoảng cách, ta phát xung ngắn (10us) từ chân Trig, sau cảm biến tạo xung HIGH chân Echo nhận lại sóng phản xạ chân Chiều rộng xung với thời gian sóng siêu âm phát từ cảm biến quay trở lại - Tốc độ âm khơng khí 340m/s, tương đương 29,412 us/cm Khi tính thời gian, ta chia cho số để tính khoảng cách - Thơng số kỹ thuật cảm biến siêu âm HC-SR04: + Điện áp 5V DC + Dòng hoạt động < 2Ma + Mức cao: 5V, mức thấp: 0V + Góc quét tối đa: 15 độ + Khoảng cách đo: 2cm- 450cm(± 0.3 cm) 1.5 Về Motor servo -Trong kỹ thuật điều khiển, Servo gọi tắt động Servo Nó thiết bị tự động có cảm biến phản hồi để điều chỉnh hành động Servo phận hệ thống điều khiển, cung cấp lực chuyển động cần thiết cho thiết bị máy móc vận hành Với cơng nghệ Driver Servo cịn biết đến tương tự Driver máy tính Động RC Servo động có tốc độ thấp, mơ-men xoắn cao, có nhiều kích cỡ khác Khơng giống động DC Stepper, Động RC Servo thường khơng xoay góc 360 độ Thay vào đó, bị giới hạn phạm vi 180, 270 90 độ Một tín hiệu điều khiển gửi đến servo để điều chỉnh trục góc mong muốn Hình 1.5: Motor Servo SG90 -Cách điều khiển servo PWM -Trong động Analog Servo, tín hiệu PWM có cho kỳ 20ms sử dụng để điều khiển động 2.1 Mô tả hoạt động hệ thống Hệ thống hoạt động dựa kết hợp Module đo khoảng cách song siêu âm HC-SR04, Motor servo MCU STM32 Module HC-SR04 gắn vào servo để tạo góc quét nhỏ, HC-SR04 đo khoảng cách đến vật cản 200ms Hình 2.1: Minh hoạ cấu trúc kết hợp servo HC-SR04 MCU STM32 đọc khoảng cách đến vật cản, khoảng cách đến vật cản < 20cm đèn báo động sáng để cảnh báo cho người lái xe 2.2 Yêu cầu hệ thống a Yêu cầu chung - Đo khoảng cách với sai số ± 2cm - Phát đèn cảnh báo gần vật cản gần (< 20cm) - Hoạt động liên tục ổn định b Module HC-SR04 Yêu cầu chức - Module đo có chức đọc đo khoảng cách tới vật cản thông qua cảm biến 11 - Giao tiếp với STM32 tín hiệu số Yêu cầu phi chức - Hoạt động ổn định, xác - Sản phẩm nhỏ gọn, dễ sử dụng - Hệ thống chạy ổn định c Motor servo Yêu cầu chức - Điều khiển xung pwm - Quét liên tục góc khoảng 50 độ Yêu cầu phi chức - Hoạt động ổn định, xác CHƯƠNG MƠ PHỎNG VÀ XÂY DỰNG HỆ THỐNG THỰC NGHIỆM 12 3.1 Sơ đồ khối hệ thống Hình 3.1: Sơ đồ khối hệ thống Khối vi điều khiển (MCU) có chức điều khiển hoạt động mạch phát xung điều khiển servo, phát nhận tín hiệu từ HCSR04, bật tắt LED cảnh báo Led báo sử dụng Led red siêu sáng HC-SR04 đọc gửi liệu khoảng cách cho khối MCU Servo nhận tín hiệu từ MCU để quét liên tục góc 35 độ 3.2 Những linh kiện sử dụng 13 Linh kiện sử dụng Thông số kỹ thuật Kit STM32F103C8T6 Module HC-SR04 Motor Servo SG-90 - Điện áp hoạt động: 5VDC - Dịng tiêu thụ: 10~40mA - Tín hiệu giao tiếp: TTL - Chân tín hiệu: Echo, Trigger - Góc qt: on) { Difference = off-on; } else if (on > off) { Difference = (0xffff - on) + off; } Distance = Difference * 0343/2; //chia cho tốc độ âm Is_First_Captured = 0; // đặt trạng thái truyền sóng // đổi chế độ chụp sườn dương HAL_TIM_SET_CAPTUREPOLARITY(htim, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_RISING); HAL_TIM_IC_Stop_IT(&htim2, TIM_CHANNEL_1); // tắt ngắt input capture } } } // hàm đo giá trị khoảng cách void HCSR04_Read (void) { // truyền xung độ rộng us vào chân TRIG HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET); delay(1); // wait for 10 us HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET); // bật ngắt input capture 17 HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1); } int main(void) { HAL_Init(); SystemClock_Config(); // khởi động clock hệ thống // khởi động timer Timer MX_GPIO_Init(); MX_TIM2_Init(); MX_TIM3_Init(); MX_TIM1_Init(); HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); // khởi động tạo xung pwm HAL_TIM_IC_Start_IT(&htim1, TIM_CHANNEL_1); // khởi động hàm delay while (1) { // điều khiển servo chongoc= chongoc%8; HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, gocquay[chongoc]); HCSR04_Read(); // cảnh báo if(Distance