BÁO CÁO BÀI TẬP LỚN Môn: Thiết kế Hệ thống nhúng

35 164 1
BÁO CÁO BÀI TẬP LỚN Môn: Thiết kế Hệ thống nhúng

Đ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ÁO CÁO BÀI TẬP LỚN Môn: Thiết kế Hệ thống nhúng Đề tài: Lập trình Vi điều khiển STM32 giao tiếp với Modul DS1307 và cảm biến đo dòng ACS712 hiển thị thông số lên LCD , truyền thông số lên máy tính. Cài đặt bộ lập lịch từ máy tính. Yêu cầu cụ thể:  Lập trình theo bộ lập lịch kiểu đếm tick và thực hiện các task theo lập lịch đó.  Áp dụng FreeRTOS để lập trình. Mục lục Phần 1: Thông tin nhóm......................................................................................... 2 Phần 2: Yêu cầu bài tập lớn.................................................................................... 3 Phần 3: Giới thiệu về phần cứng ............................................................................ 4 3.1 Giới thiệu nguyên lý các Modul phần cứng ................................................... 4 3.2 Các ngoại vi của STM32................................................................................. 9 3.3 Sơ đồ ghép nối giữa STM32 với phần cứng................................................. 23 3.4 Lưu đồ thuật toán giao tiếp giữa STM32 và module phần cứng.................. 23 Phần 4: Thiết kế phần mềm ................................................................................. 25 4.1 Phân tích xử lý đảm bảo tính thời gian thực ............................................... 25 4.2 Thiết kế bộ lập lịch ...................................................................................... 25 4.3 Phân tích lập trình đa nhiệm ....................................................................... 26 Phần 5: Kết quả và đánh giá................................................................................. 30 5.1 Các kết quả đạt được.................................................................................. 30 5.2 Phân tích và đánh giá kết quả ..................................................................... 34 5.3 Thống kê công việc và đánh giá đóng góp................................................... 34

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI -VIỆN ĐIỆN BỘ MÔN: KỸ THUẬT ĐO VÀ TIN HỌC CÔNG NGHIỆP BÁO CÁO BÀI TẬP LỚN Môn: Thiết kế Hệ thống nhúng Giáo viên hướng dẫn: Ths Lê Công Cường Mã lớp: 129086 – EE4251 Hà Nội, 2/2022 Mục lục Phần 1: Thơng tin nhóm Phần 2: Yêu cầu tập lớn Phần 3: Giới thiệu phần cứng 3.1 Giới thiệu nguyên lý Modul phần cứng 3.2 Các ngoại vi STM32 3.3 Sơ đồ ghép nối STM32 với phần cứng 23 3.4 Lưu đồ thuật toán giao tiếp STM32 module phần cứng 23 Phần 4: Thiết kế phần mềm 25 4.1 Phân tích xử lý đảm bảo tính thời gian thực 25 4.2 Thiết kế lập lịch 25 4.3 Phân tích lập trình đa nhiệm 26 Phần 5: Kết đánh giá 30 5.1 Các kết đạt 30 5.2 Phân tích đánh giá kết 34 5.3 Thống kê cơng việc đánh giá đóng góp 34 Phần 1: Thông tin nhóm Danh sách thành viên nhóm: STT Họ Tên Trần Công Dũng Trần Trọng Dũng Đinh Văn Hưng Trần Công Vinh MSSV 20181430 20181431 20181515 20181846 Phần 2: Yêu cầu tập lớn Đề tài: Lập trình Vi điều khiển STM32 giao tiếp với Modul DS1307 cảm biến đo dòng ACS712 hiển thị thông số lên LCD , truyền thông số lên máy tính Cài đặt lập lịch từ máy tính u cầu cụ thể:  Lập trình theo lập lịch kiểu đếm tick thực task theo lập lịch  Áp dụng FreeRTOS để lập trình Phần 3: Giới thiệu phần cứng 3.1 Giới thiệu nguyên lý Modul phần cứng Cảm biến dòng điện ACS-712 1.1 Giới thiệu Cảm biến dòng điện ACS712 IC cảm biến dịng tuyến tính dựa hiệu ứng Hall ACS xuất tín hiệu analog, Vout biến đổi tuyến tính theo thay đổi dòng điện 𝐼𝑖𝑛 lấy mẫu thứ cấp DC (hoặc AC), phạm vi cho Tụ (Cf theo sơ đồ) dùng với mục đích chống nhiễu có giá trị tùy thuộc vào mục đích sử dụng Hiệu ứng Hall hiệu ứng vật lý thực áp dụng từ trường vng góc lên làm kim loại hay chất bán dẫn hay chất dẫn điện nói chung (thanh Hall) có dịng điện chạy qua Lúc người ta nhận hiệu điện (hiệu Hall) sinh hai mặt đối diện Hall Tỷ số hiệu Hall dòng điện chạy qua Hall gọi điện trở Hall, đặc trưng cho vật liệu làm nên Hall Hiệu ứng khám phá Edwin Herbert Hall vào năm 1879 Công thức liên hệ hiệu Hall, dòng điện từ trường là: VH = (IB)/(den) Với VH hiệu Hall, I cường độ dòng điện, B cường độ từ trường, d độ dày Hall, e điện tích hạt mang điện chuyển động Hall, n mật độ hạt Hall 1.2 Sơ đồ chân thông số kĩ thuật Thông số kĩ thuật:         Thời gian chuyển đổi ngắn: 5µs Điện trở dây dẫn 1.2mΩ Nguồn vận hành đơn 5V Độ nhạy đầu cao từ 63-190mV/A Nhiệt độ hoạt động: -40 - 85℃ Điện áp cách ly tối đa: 2100V(RMS) Tín hiệu Analog đầu có độ nhiễu thấp Dễ dàng kết nối với vi điều khiển 1.3 Cách sử dụng a Đo dòng điện DC Khi đo DC phải mắc tải nối tiếp Ip+ Ip- chiều, dòng điện từ Ip+ đến Ip- để Vout mức điện 2.5 - 5V tương ứng dòng - 5A, mắc ngược Vout điện 2.5V đến 0V tương ứng với 0A đến -5A Cấp nguồn 5v cho module chưa có dịng Ip (chưa có tải mắc nối tiếp với domino), Vout=2.5v Khi dịng Ip( dịng tải) 5A Vout=5v, Vout tuyến tính với dòng Ip , khoản 2.5V đến 5V tương ứng với dòng đến 5A b Đo dòng điện AC Khi đo dòng điện AC, dòng điện AC khơng có chiều nên khơng cần quan tâm chiều Cấp nguồn 5v cho module chưa có dịng Ip (chưa có tải mắc nối tiếp với domino) , Vout=2.5v có dịng xoay chiều Ip(dịng AC) dịng xoay chiều độ lớn thay đổi liên tục theo hàm sin, nên điện Vout điện xoay chiều hình sin có độ lớn tuyến tính với dịng điện AC , đến 5V(thế xoay chiều xoay chiều) tương ứng với -5A đến 5A (dòng xoay chiều) Modul thời gian thực DS1307 2.1 Giới thiệu IC thời gian thực (RTC) DS1307 có chức cung cấp thơng tin thời gian (thời gian thực): giờ, phút, giây, thứ, ngày tháng, năm cách xác thiết bị bị tắt (ngắt điện ngoài) Giao tiếp với vi điều khiển thông qua chuẩn I2C, đóng vai trị slave kết nối đến bus I2C Có thể đếm thời gian theo định dạng 24 12 với thị AM/PM Ngồi bên chíp có dị phát nguồn tự động chuyển sang sử dụng nguồn pin dự phịng Một số tính bật IC RTC DS1307 đề cập  Lưu trữ cung cấp thông tin thời gian thực: ngày, tháng, năm, giờ, phút, giây,…  Khả thiết lập ngày đến năm 2100  Tiêu thụ điện thấp: dòng tiêu thụ 500nA hoạt động pin  Tự động chuyển sang nguồn pin trường hợp điện  Đồng hồ 24 12 với báo AM/PM  Sử dụng chuẩn giao tiếp I2C RTC DS1307 có sẵn dạng module, bao gồm tất thành phần cần thiết pin, đầu nối, điện trở kéo lên tinh thể thạch anh 2.2 Sơ đồ chân thông số kĩ thuật: Chân Tên Chức X1 X2 VBAT GND Chân nối đất SDA Chân liệu nối tiếp (Serial Data) Đây chân liệu vào/ra giao thức I2C Chân cần đưa lên nguồn 5V thông qua điện trở 10kΩ SCL Chân đầu vào xung đồng hồ nối tiếp (Serial Clock) Đây chân ngõ vào xung nhịp giao thức I2C Chân phải kéo đến 5V thông qua điện trở 10kΩ Đây chân kết nối với thạch anh tần số 32.768 KHz để kích hoạt dao động nội Chân kết với cực dương pin Lithium 3V để cấp nguồn nuôi dự phịng 7 SQW/OUT Ngõ xuất xung vng, tần số lập trình để thay đổi từ 1Hz, 4Khz, 8Khz, 32Khz Nếu không sử dụng, chân thả VCC Chân cấp nguồn chính, khoảng 5VDC Nếu VCC khơng có mà VBAT có DS1307 hoạt động bình thường khơng ghi đọc liệu Thông số kĩ thuật:        IC chính: RTC DS1307 + EEPROM AT24C32 Nguồn cung cấp: 5VDC Giao tiếp: I2C Lưu trữ cung cấp thông tin thời gian thực: ngày, tháng, năm, giờ, phút, giây, Có pin backup trì thời gian trường hợp khơng cấp nguồn Có ngõ tần số 1Hz Kích thước: 27 x 28 x 8.4mm Màn hình LCD Khối hiển thị LCD 2x16 (2 dòng, 16 cột) Chức chân LCD 1602: - Chân số - VSS : chân nối đất cho LCD nối với GND mạch điều khiển - Chân số - VDD : chân cấp nguồn cho LCD, nối với VCC=5V mạch điều khiển - Chân số - VEE : điều chỉnh độ tương phản LCD, sử dụng biến trở 10K - Chân số - RS : chân chọn ghi, nối với logic "0" logic "1": + Logic “0”: Bus DB0 - DB7 nối với ghi lệnh IR LCD (ở chế độ “ghi” - write) nối với đếm địa LCD (ở chế độ “đọc” - read) + Logic “1”: Bus DB0 - DB7 nối với ghi liệu DR bên LCD 10 - Chân số - R/W : chân chọn chế độ đọc/ghi (Read/Write), nối với logic “0” để ghi nối với logic “1” đọc - Chân số - E : chân cho phép (Enable) Sau tín hiệu đặt lên bus DB0-DB7, lệnh chấp nhận có xung cho phép chân sau: + Ở chế độ ghi: Dữ liệu bus LCD chuyển vào ghi bên phát xung (high-to-low transition) tín hiệu chân E + Ở chế độ đọc: Dữ liệu LCD xuất DB0-DB7 phát cạnh lên (low-to-high transition) chân E LCD giữ bus đến chân E xuống mức thấp - Chân số đến 14 - D0 đến D7: đường bus liệu dùng để trao đổi thơng tin với MCU Có chế độ sử dụng đường bus là: Chế độ bit (dữ liệu truyền đường, với bit MSB bit DB7) Chế độ bit (dữ liệu truyền đường từ DB4 tới DB7, bit MSB DB7) - Chân số 15 - A : nguồn dương cho đèn - Chân số 16 - K : nguồn âm cho đèn Chỉ dùng LCD để hiển thị (Write) nên chân RW nối mass Các ngoại vi STM32 cần sử dụng 3.2 Các ngoại vi STM32 ADC STM32 1.1 Cơ sở lý thuyết ADC – Analog to digital Converter chuyển đổi tín hiệu tương tự sang tín hiệu số.Đây phần quan trọng vi điều khiển – hệ thống nhúng ADC ứng dụng nhiều đo nhiệt độ, đọc giá trị điện áp, cường độ dòng  Partity Bit: Bit chẵn lẻ cho phép người nhận đảm bảo liệu liệu thu thập có hay khơng Trên thực tế, bit không sử dụng rộng rãi nên không bắt buộc  Data frame: Các bit liệu bao gồm liệu thực truyền từ người gửi đến người nhận Độ dài khung liệu nằm khoảng & Nếu bit chẵn lẻ khơng sử dụng chiều dài khung liệu dài bit 3.2 UART STM32 STM32 có UART với nhiều mode hoạt động, với nhiều UART ta sử dụng nhiều ứng dụng với chip điều khiển so với STM8S Một số tính bật sau:  Đầy đủ tính giao tiếp khơng đồng  Điều chỉnh baud rate lập trình tốc độ tối đa lên đến 4.5Mb/s  Độ dài lập trình bit  Cấu hình bit stop hỗ trợ  Có chân clock muốn chuyển giao tiếp thành đồng  Cấu hình sử dụng dây dây  Có DMA muốn đẩy cao thời gian truyền nhận Bit cho phép truyền nhận riêng biệt 3.3 Một số ghi quan trọng   USART_SR – Status register  TXE : bit báo có data truyền hay khơng, =0 tức data rỗng, truyền, =1 data truyền  RXNE: bit báo data nhận hay chưa =1: nhận, =0 chưa nhận nhận chưa xong  TC : cờ báo nhận data data vừa truyền xong  USART_DR – Data register 20 Thanh ghi chứa Data nhận Data truyền gồm 9bit Và phụ thuộc vào trạng thái truyền nhận định data truyền data nhận  USART_BRR – Baud rate register Thanh ghi chứa giá trị tốc độ baund cài đặt DIV_Mantissa[11:0] thành phần trước dấu “,” DIV_Freaction[3:0] thành phần sau dấu phẩy tốc độ baud quy đổi theo bảng sau:  USART_CRx – Control register         UE: bit cho phép UART hoạt động M: độ dài data hay bit WAKE: phương pháp đáng thức UART Idle line Address Mask PCE : cho phép không cho phép parity PS: chọn loại Parity chẵn lẻ PEIE: cho phép ngắt PE hay không ngắt TXEIE: cho phép ngắt truyền hay không TCIE: cho phép ngắt truyền/nhận xong hay không 21  RXNEIE: cho phép ngắt nhận hay không  TE: cho phép truyền hay không  RE: cho phép nhận hay không  RWU : cho phép thức tỉnh hay không nhận dc data từ bên  USART_GTPR – Guard time and prescaler register Thanh ghi quan tâm đến PSC[7:0] bit cho phép chia clock UART từ clock hệ thống để từ chia tốc độ baud cho hợp lý 22 3.3 Sơ đồ ghép nối STM32 với phần cứng 3.4 Lưu đồ thuật toán giao tiếp STM32 module phần cứng  STM32 giao tiếp với Modul DS-1307  STM 32 giao tiếp với ACS-712 23  STM32 giao tiếp với LCD 24 Phần 4: Thiết kế phần mềm 4.1 Phân tích xử lý đảm bảo tính thời gian thực Để đảm bảo tính thời gian thực Task, Task cần đảm bảo thời gian thực thi giới hạn định Căn vào thông số Modun phần cứng yêu cầu tính chất phép đo, nhóm lựa chọn thơng số chu kì, deadline cho Task sau:  Task 1: (Đo đòng điện ACS712 + hiển thị lên LCD) Việc đo dịng điện xử lý tín hiệu ADC nhiều thời gian nên chọn chu kì 𝑇2 có thời gian lớn  Chọn 𝑇1 = 50, 𝐷1 = 50, 𝐶1 =10  Task 2: (Đo thời gian thực DS1307 + Hiển thị LCD) Việc đo thời gian thực cần thực liên tục nên chọn chu kì T ngắn  Chọn 𝑇2 = 10, 𝐷2 = 10, 𝐶2 =5  Task 3: (Truyền tin UART) Chu kì truyền tin xác định thỏa mãn điều kiện liệu Task lại xử lý gửi đến Task3 thời gian không cần thiết phải nhỏ  Chọn 𝑇3 = 200, 𝐷3 = 100 , 𝐶3 =10  Task 4: Xử lý liệu ngắt cài đặt lập lịch  Chọn 𝑇4 = 100, 𝐷4 = 100 , 𝐶4 =10 Trong đó:  T chu task  C thời gian thực thi chương trình task  D deadline muộn để thực task Các thơng số có đơn vị mili giây (ms) 4.2 Thiết kế lập lịch Dựa vào thông số Task trên, nhóm chúng em tính tốn thiết kế lập lịch sau: 25 P bội số f vàP BCNN T task => Tính P = 200 Các task bắt đầu kết thúc frame: f≥ Ci với task i Giữa thời gian bắt đầu deadline task frame: 2f – ƯCLN(Ti,f) ≤Di với task i Mỗi task thực nhiều frame f: F≤Ti với task i  Chọn f = 10 để thỏa mãn 4.3 Phân tích lập trình đa nhiệm  Tạo Task cài đặt mức ưu tiên cho Task: /* USER CODE BEGIN RTOS_THREADS */ xTaskCreate(DS1307Task, "Task1", 526, NULL,2, &DS1307Handle); xTaskCreate(ADCTask, "Task2", 128, NULL, 3, &ADCHandle); xTaskCreate(DisplayTask, "Task3", 526, NULL, 1, &DisplayHandle);l /* add threads, */ /* USER CODE END RTOS_THREADS */ 26 Trong Task (ADC) có mức ưu tiên cao nhất, sau Task2 (ADC) cuối Task3 (UART)  Lập trình Task: Task1: DS1307 + LCD Nhiệm vụ: đọc liệu từ Modul thời gian thực hiển thị lên LCD Dữ liệu đưa vào hàng đợi (Task3) để truyền UART lên máy tính void DS1307Task(void*Param) { char ptr[15]; /* Infinite loop */ while(1) { osMutexWait(myMutex01Handle, osWaitForever); time = DS1307_GetTime(&ds1307); sprintf (ptr, "%02d:%02d:%02d",time.hour,time.minute,time.second); lcd_put_cur(0, 0); lcd_send_string (ptr); sprintf (ptr, "%02d-%02d-%04d",time.date,time.month,time.year); lcd_put_cur(1, 0); lcd_send_string (ptr); osMutexRelease(myMutex01Handle); osDelay(10); } } Task 2: ACS712 + LCD Nhiệm vụ: Nhận liệu từ cảm biến đo dịng, xử lý tín hiệu ADC hiển thị kết lên LCD Dữ liệu đưa vào hàng đợi (Task3) để truyền UART lên máy tính void ADCTask(void* Param) { uint32_t ADC_data = 356 ; uint32_t var =0; float amlpe ; char ptr[5]; while(1) { 27 osMutexWait(myMutex01Handle, osWaitForever); HAL_ADC_Start(&hadc1); var = HAL_ADC_GetValue(&hadc1); amlpe = (0.012*var - 25); sprintf (ptr, "%10d mA",var); lcd_put_cur(0, 9); lcd_send_string (ptr); xQueueSend(DataADCqueneHandle, &ADC_data, portMAX_DELAY); HAL_ADC_Stop(&hadc1); osMutexRelease(myMutex01Handle); osDelay(20); } } Task 3: UART Nhiệm vụ: Truyền liệu từ hàng đợi lên máy tính thơng qua UART void DisplayTask(void* Param) { DS1307_TIME* data_time ; uint32_t adc_data = 0;; while(1) { data_time = &time ; xQueueReceive(DataDS1307queneHandle, &data_time, portMAX_DELAY); xQueueReceive(DataADCqueneHandle, &adc_data, portMAX_DELAY); printf("\r\nThoi gian hien tai : %d:%d:%d | %d/%d/%d\r",data_time>hour,data_time->minute,data_time->second,data_time->date,data_time->month,data_time>year); printf("\n Dong dien tieu thu la %d\n",adc_data) ; osDelay(200); } } Task 4: (trong File code) Nhiện vụ: Xử lý liệu ngắt cài đặt lập lịch 28  Lập trình chế Mutex: Do Task1, Task2 sử dụng chung đường bus I2C để giao tiếp với STM32 để Task thực thi không bị gián đoạn ta sử dụng chế Mutex để chiếm quyền cho Task osMutexDef(myMutex01); myMutex01Handle = osMutexCreate(osMutex(myMutex01));  Lập trình hàng đợi Queue: Task3 (UART) sử dụng để truyền tin lên máy tính gồm liệu đo từ Task1 Task2 nên ta sử dụng chế hàng đợi để truyền tin nhằm tránh xung đột đường truyền có cổng UART * USER CODE BEGIN RTOS_QUEUES */ /* add queues, */ DataDS1307queneHandle = xQueueCreate(2,sizeof(DS1307_TIME)); DataADCqueneHandle = xQueueCreate(2,sizeof(uint32_t)) ; /* USER CODE END RTOS_QUEUES */  Chế độ Sleepmode: Trong trình hoạt động xuất khoảng thời gian mà STM32 không thực Task Vì vậy, nhóm em lập trình cho vi điều khiển vào chế độ ngủ để tiếc kiệm lượng khoảng thời gian Phần Code: vApplicationIdleHook() { WFI(); }; 29 Phần 5: Kết đánh giá 5.1 Các kết đạt  Phần lập lịch Kết lập lịch 30  Phần nhúng FreeRTOS Sử dụng phần mềm SEGGER để theo dõi hoạt động Task Quá trình hoạt động Task Nhận xét:  ADCTask với mức ưu tiên cao nên thực thi trước  Tiếp theo DS1307 DisplayTask 31 Quá trình hoạt động Mutex Nhận xét: ADCTask DS1307Task dùng chung bus I2C Trong trình hoạt động DS1307Task, ADCTask đến chu kì hoạt động nhờ có Mutex, ADCTask dù có mức ưu tiên cao khơng ngắt DS1307Task Do đó, DS1307Task hoạt động liền mạch 32 Dòng điện tiêu thụ trạng thái: Chế độ hoạt động bình thường Chế độ Sleep 33 5.2 Phân tích đánh giá kết Các kết đạt thực với mục tiêu đề ra:  Các module hoạt động ổn định, giao tiếp tương đối tốt với STM32  Về phần đa nhiệm, Task hoạt động với ổn định với thời gian mà lập lịch đặt  Cơ chế Mutex hàng đợi Queue thực tốt vai trò hoạt động chương trình  Chế độ Sleep hoạt động tốt Dịng tiêu thụ có giảm so với chế độ hoạt động bình thường 5.3 Thống kê cơng việc đánh giá đóng góp STT Thành viên Trần Công Dũng Đánh giá 10 MSSV Đóng góp 20181430 Thiết kế lập lịch Lập trình lập lịch Trần Trọng Dũng 20181431 Lập trình FreeRTOS Test phần cứng Đinh Văn Hưng 20181515 Lập lập lich Lập trình ngoại vị Trần Cơng Vinh 20181846 Viết báo cáo Lập trình lập lịch 9.5 Link: https://husteduvnmy.sharepoint.com/:f:/g/personal/vinh_tc181846_sis_hust_edu_vn/EvU85AH4C WtFrECt4luvi6IBoZ-7N_mUcN88PbsvnEjtbg?e=Pwv7bj 34 ... Phần 4: Thiết kế phần mềm 25 4.1 Phân tích xử lý đảm bảo tính thời gian thực 25 4.2 Thiết kế lập lịch 25 4.3 Phân tích lập trình đa nhiệm 26 Phần 5: Kết đánh... chứa cờ báo trạng thái như:  STRT : báo channel bắt đầu chuyển đổi giá trị ADC hay chưa  JSTRT : báo channel bắt đầu chuyển đổi có tín hiệu bên ngồi điều khiển hay chưa  JEOC: báo kết thúc...  AF: báo tín hiệu ACK bị lỗi hay khơng  TxE : báo buffer truyền có trống hay khơng  RxE : báo buffer nhận có trống hay khơng  STOPF : cờ báo có kiểm tra q trình stop hay khơng  BTF: báo truyền

Ngày đăng: 27/02/2023, 20:52

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

Tài liệu liên quan