Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 14 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
14
Dung lượng
1,47 MB
Nội dung
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN TỬ VIỄN THÔNG - BÀI THÍ NGHIỆM MƠN HỌC HỆ THỐNG NHÚNG VÀ THIẾT KẾ GIAO TIẾP NHÚNG Mã học phần : ET4361 Họ tên sinh viên : Phùng Huy Hoàng Mã số SV : 20172578 Lớp : 708421 Nhóm thí nghiệm :……………………… Ngày nộp báo cáo : 21/1/2022 HÀ NỘI, 2022 BÀI PHÁT TRIỂN DEVICE DRIVER CHO I2C PORT ĐIỀU KHIỂN ROBOT BẬC TỰ DO 1.1 Báo cáo kết thí nghiệm (Sinh viên mơ tả kịch bản, giải thích có kèm hình chụp) Kịch 1: Cánh tay robot gồm servo, thay đổi góc quay bên dưới, vị trí mong muốn cách vị trí ban đầu (90 độ) Kịch 2: Thay đổi góc quay servo bên trên, từ vị trí ban đầu servo di chuyển độ, tăng giảm dần đạt cực đại, đồng thời kết hợp với kịch để điều khiển lúc servo 1.2 Câu hỏi kiểm tra • Biên dịch chéo (cross-compile) gì? Tại cần phải biên dịch chéo mã nguồn nói trên? Biên dịch chéo là tạo thực thi mã cho tảng khác so với mà trình biên dịch chạy Mã nguồn nói biên dịch để chạy Raspberry Pi kiểu chip arm, máy tính thí nghiệm kiểu x86, để biên dịch mã nguồn máy tính thí nghiệm chạy raspberry pi ta cần biên dịch chéo • Bản chất file device_driver.ko nói là: a) file chương trình nhị phân (chọn đáp án a) b) file thư viện c) file đối tượng d) file liệu ● Giới thiệu ngắn gọn giao tiếp I2C? Mô tả bước truyền liệu qua giao tiếp I2C I2C giao thức giao tiếp nối tiếp đồng phát triển Philips Semiconductors, sử dụng để truyền nhận liệu IC với sử dụng hai đường truyền tín hiệu Các bước truyền liệu qua giao tiếp I2C là: • Bước 1: Thiết bị Master gửi xung Start cách kéo đường SDA, SCL từ mức xuống Bước 2: Master gửi bit địa tới Slave muốn giao tiếp với bit • Read/Write Bước 3: Slave so sánh địa vật lý với địa vừa gửi tới Nếu trùng khớp, Slave xác nhận cách kéo đường SDA xuống set bit ACK/NACK ‘0’ Nếu khơng trùng khớp SDA bit ACK/NACK mặc định ‘1’ • Bước 4: Thiết bị Master gửi nhận khung bit liệu Nếu Master gửi đến Slave bit Read/Write mức Ngược lại nhận bit mức • Bước 5: Nếu khung liệu truyền thành công, bit ACK/NACK set thành mức để báo hiệu cho Master tiếp tục Bước 6: Sau tất liệu gửi đến Slave thành cơng, Master phát tín hiệu Stop để báo cho Slave biết trình truyền kết thúc chuyển SCL, SDA từ mức lên mức • ● Nêu nguyên lý việc điều khiển động dựa vào độ rộng xung PWM Điều chế độ rộng xung (PWM) kỹ thuật mà độ rộng xung thay đổi giữ tần số không đổi Tùy thuộc vào loại động ta có chu kỳ quay khác nhau, ví dụ để điều khiển động servo SG90 trong khoảng quay từ -90 ° đến + 90 ° Chúng ta cần tạo dạng sóng PWM 50Hz với thay đổi chu kỳ nhiệm vụ từ ~ 0,5ms đến ~ 2,4ms • Chỉ rõ cơng việc mà Device Driver điều khiển giao tiếp I2C phải thực ? o Tạo giao tiếp I2C Raspberry Pi module động cơ o Cài đặt xung PWM o Cài đặt góc quay với kênh góc quay động cơ o Điều khiển xung PWM với góc quay tương ứng sang module động cơ BÀI KẾT NỐI RASPBERRY PI VỚI BOARD MAIX DOCK QUA GIAO TIẾP SPI 2.1 Báo cáo kết thí nghiệm (Sinh viên mơ tả kịch bản, giải thích có kèm hình chụp) Kịch 1: Sinh viên làm theo hướng dẫn thí nghiệm, biên dịch file bin nạp vào kit MAIX DOCK Kết hiển thị lên hình terminal Raspberry Pi Kịch 2: Sinh viên chỉnh sửa file code thư mục lcd_m thực biên dịch theo hướng dẫn Kịch 3: Sinh viên sau thực viết chương trình cho LCD, tùy biến nội dung hiển thị lên hình 2.2 Câu hỏi kiểm tra Giải thích khái niệm GPIO? GPIO chân tín hiệu kỹ thuật số mạch tích hợp mà hành vi (đầu vào đầu ra) điều khiển phần mềm ứng dụng GPIO cơ bản chân cấu hình làm đầu vào đầu Nếu cấu hình chân đầu ra, ghi (LOW) 3,3 / V (VDD) vào chân Khi cấu hình làm đầu vào, đọc tín hiệu chân GPIO giao diện tiêu chuẩn mà qua vi điều khiển giao tiếp với giới bên ngồi Nó sử dụng để đọc giá trị từ cảm biến analog kỹ thuật số, điều khiển đèn LED, điều khiển đồng hồ cho giao tiếp I2C Cách sử dụng/điều khiển qua chân GPIO? Các chân GPIO raspbery pi gồm 40 chân với chân thực đuợc chức với I2C, UART, SPI, PWM chân tín hiệu cho người sử dụng tùy ý lập trình Những chân cho phép Pi nhận tín hiệu gửi thiết bị kết nối với chân Điện áp từ 1.8V đến 3.3V đọc mức cao, thấp 1.8 mức thấp, theo tùy thuộc vào ý định sử dụng mà người dùng sử dụng chân GPIO So sánh ưu nhược điểm SPI so với I2C? Ưu điểm: SPI hỗ trợ truyền thông full-duplex tốc độ cao I2C chậm SPI tiết kiệm lượng I2C Nhược điểm: SPI yêu câù số lượng dây kết nối lớn (4 dây), I2C (2 dây) SPI hỗ trợ thíết bị bus SPI có khoảng cách truyền ngắn I2C Vẽ sơ đồ đấu nối chân cổng hai thiết bị truyền thông với cổng SPI Mô tả bước truyền liệu qua giao thức SPI Khi truyền liệu từ SPI Master sang SPI Slave: Tại cạnh lên xuống tín hiệu SCLK, SPI Master tạo điện áp mức cao thấp để biểu diễn đường MOSI SPI Master trì điện áp chu kỳ SCLK trước chuyển sang mức điện áp khác để gửi bit chu kỳ SCLK SPI Slave nhận liệu đường MOSI cách lấy mẫu (sample) điện áp đường dây Để thu liệu xác, SPI Slave phải lấy mẫu bit liệu khoảng thời gian từ SPI Master setup bit đến trước SPI Master setup bit Device Driver điều khiển cổng SPI phải thực cơng việc để kết nối thành công bo mạch ngoại vi MAIX Dock? Với thí nghiệm, bo Raspberry Pi đóng vai trị slave, MAIX Dock đóng vai trị master Hiện nay, raspberry Pi có chức master cho giao tiếp SPI nên sử dụng cấu hình GPIO cho chế slave Pi Các GPIO bo Pi thực chức thay cho chân SCLK, MOSI, MISO, SS tương ứng với chân 21, 19, 23, 13, sau nhận tín hiệu từ MAIX Dock chân GPIO thực chức slave BÀI PHÁT TRIỂN PHẦN MỀM NHÚNG THÔNG MINH VỚI KIT MAXI DOCK 3.1 Báo cáo kết thí nghiệm (Sinh viên mơ tả kịch bản, giải thích có kèm hình chụp) Kịch 1: Sinh viên chụp lại kết kiểm tra camera Kịch 2: Sinh viên chụp lại kết phát gương mặt để báo cáo Kịch 3: Sinh viên chụp lại thông báo có tự đề yêu cầu lên giao diện Terminal Raspberry Pi 3.2 Câu hỏi kiểm tra So sánh giao thức I2C, SPI UART (về số lượng chân cần kết nối, phương thức truyền, tốc độ truyền, số lượng thiết bị, phân ch ưu nhược điểm giao thức giao thức phù hợp với ứng dụng nào) Đặc điểm UART SPI I2C Sơ đồ kết nối đơn giản khác phức tạp đơn giản Số lượng dây dây (1 dây dây (số lượng truyền & dây nhận dây tăng số thiết liệu) bị tăng) Chế độ truyền Full duplex (Không phân biệt master-slave) Full duplex (Một Half duplex master & nhiều slave) (Nhiều master & nhiều slave) Tốc độ truyền Truyền không đồng (Tốc độ tự đặt, tối đa khoảng 460kbps) Truyền đồng Truyền đồng (Tốc độ khoảng bộ(Hỗ trợ tốc độ 10Mbps đến 20Mbps) 100kps, 400kps, 3.4Mbps, 1Mbps) Khoảng cách 12m lý thuyết Số lượng thiết bị thiết bị, giao tiếp 1-1 số lượng hạn chế, lên đến 127 thiết giao tiếp chân bị, giao tiếp địa chọn chip Ứng dụng UART thường sử dụng vi điều khiển cho u cầu xác chúng có sẵn thiết bị dùng nhiều Các chuyển đổi (ADC DAC) kiến trúc điều khiển, Các loại nhớ (SD SMBus (System Card , MMC , Management Bus), EEPROM , Flash) PMBus (Power Các loại IC thời gian Management Bus), bo mạch dây bo mạch liên lạc khác giao tiếp không dây, thiết bị GPS, mô-đun Bluetooth thực Các loại cảm biến (nhiệt độ, áp suất…) số loại khác như: trộn tín hiệu, LCD, Graphic LCD, video game controlle IPMI (Intelligent Platform Management Interface), DDC (Display Data Channel) ATCA (Advanced Telecom Computing Architecture) Thuật toán nhận dạng khuôn mặt thực đâu? Tại bo mạch chủ RP4 hay khách (MAIX DOCK) hay bo? Thực MAIX DOCK Dữ liệu truyền thông qua lại với bo mạch Pi gồm gì? Gồm tin xác nhận nhận diện khuôn mặt Trong thí nghiệm, để truyền liệu từ MAIX DOCK sang Raspberry Pi cần thực công đoạn gì? • Thực kết nối dây cho giao tiếp UART thiết bị • Thực chương trình gửi tin bên MAIX DOCK • Thực chương trình nhận tin bên RP4 Mơ tả vắn tắt đoạn mã chương trình Python xử lý nội dung video Nêu rõ công việc mà cac hàm thực """ Khai báo thư viện cần thiết cho thí nghiệm """ import sensor, image, lcd, time import KPU as kpu import gc, sys from fpioa_manager import fm """ Sinh viên thực cấu hình kết nối chân cho giao tiếp UART cài đặt chân 10 chân TX, chân 11 RX """ fm.register(pin_tx, fm.fpioa.UART1_TX, force=True) fm.register(pin_rx, fm.fpioa.UART1_RX, force=True) from machine import UART """ Điền tham số baudrate tương ứng với kết nối UART uart = machine.UART(uart,baudrate,bits,parity,stop,timeout, read_buf_len) * uart Số UART, sử dụng UART định, hồn thành cách nhấn phím tab machine.UART * baudrate: Tốc độ truyền UART (9600) * bits: Độ rộng liệu UART, hỗ trợ 5/6/7/8(cổng nối tiếp mặc định sử dụng REPL (UARTHS) hỗ trợ chế độ bit), mặc định * parity: Parity bit, hỗ trợ None, machine.UART.PARITY_ODD, machine.UART.PARITY_EVEN(các cổng nối tiếp mặc định (UARTHS) sử dụng REPL hỗ trợ None), mặc định None * stop: Stop bit, hỗ trợ 1, 1.5, 2, mặc định * timeout: Thời gian chờ nhận cổng nối tiếp * read_buf_len: đệm nhận cổng nối tiếp, cổng nối tiếp nhận liệu thông qua ngắt, bộ đệm đầy tự động ngừng nhận liệu * """ uart_A = UART(UART.UART1, baudrate, bits, 1, 0, timeout=1000, read_buf_len=4096) time.sleep_ms(100) # wait uart ready """ Sinh viên thực lập trình hiển thị lcd """ def lcd_show_except(e): import uio err_str = uio.StringIO() sys.print_exception(e, err_str) err_str = err_str.getvalue() """ Điền kích thước ảnh w x h """ img = image.Image(size=(w,h)) img.draw_string(0, 10, err_str, scale=1, color=(0xff,0x00,0x00)) lcd.display(img) def main(model_addr=0x300000, lcd_rotation=0, sensor_hmirror=False, sensor_vflip=False): try: sensor.reset() except Exception as e: raise Exception("sensor reset fail, please check hardware connection, or hardware damaged! err: {}".format(e)) sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.set_hmirror(sensor_hmirror) sensor.set_vflip(sensor_vflip) sensor.set_vflip(1) sensor.run(1) """ Sinh viên khởi tạo thông số liên quan đến hiển thị lcd * lcd.init() Khởi tạo LCD hiển thị hình * lcd.rotation() Đặt LCD hướng hình * lcd.clear() Xóa hình LCD thành màu đen màu định """ lcd.init(type=1) lcd.rotation(lcd_rotation) lcd.clear(lcd.WHITE) """ kpu.init_yolo2 (task, 0.5, 0.3, 5, anchor) args đầu vào: * kpu_net: kpu net obj * threshold: prop gate * nms_value: box_iou gate * anchor_num: anchor number * anchor: anchor args """ anchors = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025) try: task = None task = kpu.load(model_addr) kpu.init_yolo2(task, 0.5, 0.3, 5, anchors) # threshold: [0,1], nms_value: [0, 1] while(True): img = sensor.snapshot() t = time.ticks_ms() objects = kpu.run_yolo2(task, img) t = time.ticks_ms() - t if objects: for obj in objects: """ Thay đổi tin gửi từ kit maix tới raspberry pi theo yêu cầu hướng dẫn """ img.draw_rectangle(obj.rect()) uart_A.write(b'Da phat hien guong mat sinh vien Phung Huy Hoang - 20172578 - Khoa K62\n') break """ Sinh viên yêu cầu hiển thị hình lcd kit maix thơng tin số lần nhận diện khuôn mặt """ img.draw_string(0, 200, "t:%dms" %(t), scale=2) lcd.display(img) except Exception as e: raise e finally: if not task is None: kpu.deinit(task) ... BÀI PHÁT TRIỂN DEVICE DRIVER CHO I2C PORT ĐIỀU KHIỂN ROBOT BẬC TỰ DO 1.1 Báo cáo kết thí nghiệm (Sinh viên mơ tả kịch bản, giải thích có kèm hình chụp) Kịch 1: Cánh tay robot gồm servo,... tiếp I2C I2C giao thức giao tiếp nối tiếp đồng phát triển Philips Semiconductors, sử dụng để truyền nhận liệu IC với sử dụng hai đường truyền tín hiệu Các bước truyền liệu qua giao tiếp I2C là:... 50Hz với thay đổi chu kỳ nhiệm vụ từ ~ 0,5ms đến ~ 2, 4ms • Chỉ rõ cơng việc mà Device Driver điều khiển giao tiếp I2C phải thực ? o Tạo giao tiếp I2C Raspberry Pi module động cơ o Cài đặt xung PWM