Bài tập lớn môn Hệ thống nhúng: Sử dụng vi điều khiển STM32F103C8T6 thiết kế đồng hồ đo điện áp, hiển thị giá trị lên led 7 thanh dải đo từ 1 - 12V, sử dụng 1 nút nhấn chuyển thang đo giữa V và mV
lượt xem 24
download
Nghiên cứu đề tài với mục đích để tìm hiểu thêm về ARM, làm quen với các thiết bị điện tử, cách lập trình và nâng cao hiểu biết cho bản thân. Mời các bạn cùng tham khảo!
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài tập lớn môn Hệ thống nhúng: Sử dụng vi điều khiển STM32F103C8T6 thiết kế đồng hồ đo điện áp, hiển thị giá trị lên led 7 thanh dải đo từ 1 - 12V, sử dụng 1 nút nhấn chuyển thang đo giữa V và mV
- BỘ THÔNG TIN VÀ TRUYỀN THÔNG HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG BÁO CÁO BÀI TẬP LỚN MÔN HỆ THỐNG NHÚNG Đề Tài: Sử dụng vi điều khiển STM32F103C8T6 thiết kế đồng hồ đo điện áp, hiển thị giá trị lên led 7 thanh dải đo từ 1 12V, sử dụng 1 nút nhấn chuyển thang đo giữa V và mV Giảng viên hướng dẫn : Thầy Nguyễn Ngọc Minh Nhóm môn học : 04 Nhóm bài tập lớn : 15 Sinh viên thực hiện : Nguyễn Đức Hiếu B18DCDT075 Thiều Quang Trường B18DCDT259 Nguyễn Việt Anh – B18DCDT011
- Học viện Công nghệ Bưu chính Viễn thông Khoa kỹ thuật Điện tử 1 2
- Học viện Công nghệ Bưu chính Viễn thông Khoa kỹ thuật Điện tử 1 MỤC LỤC 3
- Học viện Công nghệ Bưu chính Viễn thông Khoa kỹ thuật Điện tử 1 DANH MỤC HÌNH VẼ DANH MỤC BẢNG 4
- Học viện Công nghệ Bưu chính Viễn thông Khoa kỹ thuật Điện tử 1 LỜI NÓI ĐẦU Hiện nay, khoa học công nghệ ngày càng phát triển, vi điều khiển ARM đang ngày càng thông dụng và phát triển hơn. Trong đó STM32F1x là một loại rất phổ biến được sử dụng trong nhiều loại thiết bị, nó cũng cung cấp các phương tiện để liên kết với nhiều loại vi điều khiển khác. Dòng MCU STM32f1x do STMicroelectronics tạo ra bao gồm lõi xử lí ARM CortexM3 32 bit và hỗ trợ các ngoại vi thông dụng như I2C, SPI, RTC,… Ngôn ngữ lập trình vô cùng dễ sử dụng tương thích với ngôn ngữ C và thư viện rất phong phú và được chia sẻ miễn phí. Chính vì những lý do như vậy nên ARM hiện đang dần phổ biến và được phát triển ngày càng mạnh mẽ trên toàn thế giới. Trên cơ sở kiến thức đã học trong môn học: Kỹ thuật vi xử lý, hệ thống nhúng,… Cùng với những hiểu biết của mình về các thiết bị điện tử, nhóm em đã quyết định thực hiện đề tài: Sử dụng vi điều khiển STM32F103C8T6 thiết kế đồng hồ đo điện áp, hiển thị giá trị lên led 7 thanh dải đo từ 1 12V, sử dụng 1 nút nhấn chuyển thang đo giữa V và mV với mục đích để tìm hiểu thêm về ARM, làm quen với các thiết bị điện tử,cách lập trình và nâng cao hiểu biết cho bản thân. Trong quá trình thực hiện có lẽ khó có thể tránh khỏi những thiếu sót, hạn chế vì thế nhóm em rất mong có được sự góp ý và nhắc nhở từ thầy giáo để có thể hoàn thiện đề tài của mình. Em xin trân thành cảm ơn! 5
- Học viện Công nghệ Bưu chính Viễn thông Khoa kỹ thuật Điện tử 1 PHẦN 1 TỔNG QUAN I) Giới thiệu chung về board ARM STM32F103C8T6 V2 Board ARM STM32F103C8T6 là một trong những Kit cơ bản giành cho: kỹ sư, học sinh, sinh viên, người mới bắt đầu nghiên cứu về lập trình nhúng, Board mạch sử dụng vi điều khiển STM32F103C8T6 Arm CortexM3, Flash: 64 KB, SRAM: 20KB, hỗ trợ hầu hết các kết nối: SPI, USART, I2C, I2S, CAN… Là trợ thủ đắc lực trong việc lập trình và gỡ lỗi. Hình 1. : Board ARM STM32F103C8T6 Module: STM32 Smart V2.0 Vi điều khiển: STM32F103C8T6 Nhà sản xuất: STMicroelectronics Core: ARM CortexM3 Xung nhịp: 72 Mhz Flash: 64Kb SRAM: 24Kb Chip SPI Flash, W25X6, dung lượng 2Mb 6
- Học viện Công nghệ Bưu chính Viễn thông Khoa kỹ thuật Điện tử 1 Kết nối: SPI, UART, I2C, CAN,… RTC độ chính xác cao USB: 2.0, DMA II) Giới thiệu về Led 7 thanh anode chung Led 7 thanh hay còn được gọi là Led 7 đoạn, bao gồm 7 đoạn đèn Led được xếp lại với nhau thành hình chữ nhật. Khi các đoạn lập trình để chiếu sang thì sẽ hiển thị chữ số của hệ thập phân. Đôi khi có nhiều Led 7 thanh được nối với nhau để có thể hiển thị được các số lớn hơn 2 chữ số. Hình 1. : Hình ảnh Led 7 thanh anode chung Với các đoạn Led trong màn hình đều được nối với các chân kết nối để đưa ra ngoài. Các chân này được gán các kí tự từ a đến g, chúng đại diện cho từng Led riêng lẻ. Các chân được kết nối với nhau để tạo thành 1 chân chung. Chân pin chung hiển thị thường được sử dụng để xác định lạo màn hình Led 7 thanh đó là loại nào. Có 2 loại Led 7 thanh được sử dụng đó là Cathode chung và Anode chung. 7
- Học viện Công nghệ Bưu chính Viễn thông Khoa kỹ thuật Điện tử 1 Hình 1. : Cấu tạo Led 7 thanh Anode chung Bảng trang thái của Led 7 thanh Anode chung: Decimal Individual Segments Illuminated Digit a b c d e f g 0 0 0 0 0 0 0 1 1 1 0 0 1 1 1 1 2 0 0 1 0 0 1 0 3 0 0 0 0 1 1 0 4 1 0 0 1 0 1 0 5 0 1 0 0 1 0 0 6 0 1 0 0 0 0 0 7 0 0 0 1 1 1 1 8 0 0 0 0 0 0 0 9 0 0 0 1 1 0 0 Bảng : Bảng trạng thái của led 7 thanh anode chung Các phương pháp điều khiển Led 7 đoạn: 1. Kết nối các chân điều khiển của Led trực tiếp với port của vi điều khiển. 2. Dùng quét Led. 3. Vẫn sử dụng quét Led nhưng dùng IC chốt dữ liệu để tiết kiệm các chân của vi điều khiển. 8
- Học viện Công nghệ Bưu chính Viễn thông Khoa kỹ thuật Điện tử 1 9
- Học viện Công nghệ Bưu chính Viễn thông Khoa kỹ thuật Điện tử 1 PHẦN 2 SƠ ĐỒ NGUYÊN LÝ VÀ VIẾT CHƯƠNG TRÌNH I) Sơ đồ nguyên lý 1) Sơ đồ khối 2) Chức năng các khối Khối MCU: Có chức năng đọc giá trị điện áp và nút nhấn rồi gửi giá trị đo được qua Led 7 đoạn. Khối phân áp: Đo dải đo của vdk STM32F103C8T6 chỉ đo được trong khoảng 0 – 3.6V nên để mở rộng dải đo, ta phải qua một mạch phân áp. Khối nút nhấn: Có chức năng chuyển đổi hiển thị giữa V và mV. Khối hiển thị: Dùng Led 7 đoạn để hiển thị giá trị điện áp. 3) Sơ đồ kết nối phần cứng a) Khối mạch phân áp 10
- Học viện Công nghệ Bưu chính Viễn thông Khoa kỹ thuật Điện tử 1 Hình 2. : Sơ đồ khối mạch phân áp Điện áp cần đo được nối vào chân PA0 của vi điều khiển, do dải đo của ADC chỉ nằm trong khoảng 0 – 3.6V nên để đo được mức điện áp cao hơn, ta cần phải mắc chúng qua một mạch phân áp. Ta có công thức mạch phân áp: Từ yêu cầu đề bài ta có và . Giả sử ta tính được giá trị . Từ đó ta có công thức tính điện áp (1) b) Khối hiển thị Led 7 đoạn Bảng kết nối chân của Led 7 đoạn với board ARM: Board A B C D E F G DP 1 2 3 4 ARM Pin 7Seg Led PB PB PB1 PB2 PB3 PB4 PB5 PB7 PA1 PA2 PA3 PA4 Pin 0 6 Bảng : Bảng kết nối chân của Led 7 đoạn với board ARM c) Nút nhấn chuyển trạng thái 11
- Học viện Công nghệ Bưu chính Viễn thông Khoa kỹ thuật Điện tử 1 Hình 2. : Nút nhấn chuyển trạng thái Nút nhấn được nối với chân PC13 của vi điều khiển, tích cực ở mức thấp. d) Sơ đồ kết nối chung cho các khối Hình 2. : Sơ đồ kết nối chung 12
- Học viện Công nghệ Bưu chính Viễn thông Khoa kỹ thuật Điện tử 1 II) Viết chương trình C cho mạch 1) Cấu hình RCC Trên STM32F103 có 2 bộ giao động thạch anh ngoại: HSE (High Speed External): Bộ dao động ngoại tốc độ cao từ 416Mhz. Bộ dao động cấp cho CPU hoạt động. LSE (Low Speed External): Bộ dao động ngoại tốc độ thấp 32.768KHz. Bộ dao động này cấp cho bộ RTC có sẵn trên chip. HSI (High Speed Internal): Bộ giao động nội tốc độ cao 8MHz. Bộ này sẽ cung cấp cho CPU trọng trường hợp không có HSE. LSI (Low Speed Internal): Bộ này dung để cấp cho Watchdog Timer có tần số 40KHz. Hình 2. : Clock tree Cấu hình RCC sử dụng thạch anh nội (HSI) với tần số hoạt động lớn nhất là 64MHz 13
- Học viện Công nghệ Bưu chính Viễn thông Khoa kỹ thuật Điện tử 1 void Clock_Config(void) { /* RCC system reset */ RCC_DeInit(); /* HCLK = SYSCLK */ RCC_HCLKConfig(RCC_SYSCLK_Div1); /* PCLK2 = HCLK */ RCC_PCLK2Config(RCC_HCLK_Div1); /* PCLK1 = HCLK */ RCC_PCLK1Config(RCC_HCLK_Div1); /*enable HSI source clock*/ RCC_HSICmd(ENABLE); /* Wait till PLL is ready */ while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET){} /* Select HSI as system clock source */ RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI); /* Wait till HSI is used as system clock source */ while(RCC_GetSYSCLKSource() != 0x00) {} } 2) Cấu hình GPIO void GPIO_Config() { GPIO_InitTypeDef GPIO_InitStructure; /*enble clock for GPIOA,B*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA| RCC_APB2Periph_GPIOB, ENABLE); /*Configuration ADC pin*/ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_InitStructure.GPIO_Pin = ADC; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); /*Configuration controler pin*/ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Pin = LED1|LED2|LED3|LED4; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 14
- Học viện Công nghệ Bưu chính Viễn thông Khoa kỹ thuật Điện tử 1 GPIO_Init(GPIOA, &GPIO_InitStructure); /*Configuration LED pin*/ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Pin = LED7SEG_A|LED7SEG_B|LED7SEG_C| LED7SEG_D|LED7SEG_E|LED7SEG_F|LED7SEG_G|LED7SEG_DP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); } 3) Cấu hình ADC Trên STM32F103 có 2 bộ kênh ADC. Trong đó ADC1 cho phép đọc tín hiệu từ bên ngoài vào còn ADC2 đọc tín hiệu bên trong. Các kênh ADC1: Vị trí chân Các kênh ADC1 PA0 ADC0 PA1 ADC1 PA2 ADC2 PA3 ADC3 PA4 ADC4 PA5 ADC5 PA6 ADC6 15
- Học viện Công nghệ Bưu chính Viễn thông Khoa kỹ thuật Điện tử 1 PA7 ADC7 PB0 ADC8 PB1 ADC9 Bảng : Các kênh ADC1 Các đặc điểm chính của ADC: Độ phân giải 12 bit Ngắt được sinh ra sau khi kết thúc chuyển đổi Có 2 chế độ chuyển đổi là Single và Continuous Continuous mode và Discontinuous mode: Với continuous mode ADC sẽ tự động chuyển đổi lại khi chuyển đổi xong và ngược lại với discontinuous mode. Đối với chuyển đổi nhiều kênh cùng một lúc nên dùng discontinous mode như thế sẽ giảm thời gian đọc một kênh nhất định nào đó mà không phải đọc liên tục từ kênh 0n Vref: điện áp so sánh. Đối với chip 144 chân sẽ có chân input điện áp so sánh 2.4V≤ Vref ≤ 3.6V. Và phải có lọc cẩn thận để ADC hoạt động ổn định. Với chip 64 chân trở xuống chúng ta không cần quan tâm vì điện áp so sánh lấy ở trong chip và bằng VDD Điện áp input cho kênh ADC Vref ≤ Vin ≤ Vref+ Cấu hình ADC sử dụng chế độ quét liên tục: void ADC_Config() { RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 , ENABLE); ADC_InitTypeDef ADC_InitStructure; /*Configuration ADC1*/ ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = DISABLE; ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; 16
- Học viện Công nghệ Bưu chính Viễn thông Khoa kỹ thuật Điện tử 1 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel = 1; ADC_Init(ADC1, &ADC_InitStructure); ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5); /*enable ADC1*/ ADC_Cmd(ADC1, ENABLE); /*Start ADC convertion*/ ADC_SoftwareStartConvCmd(ADC1, ENABLE); } 4) Cấu hình ngắt ngoài NVIC Nested vectored interrupt controller là bộ vector ngắt lồng nhau. Nghĩa là chúng ta có thể sử dụng kết hợp nhiều ngắt trong một chương trình. Ngắt là một phần quan trọng và thiết yếu của chương trình. Nếu không có ngắt thì chương trình sẽ thực hiện theo 1 trình tự từ trên xuống dưới mà không có bất kì sự can thiệp nào. Điều đó là bất lợi khi có 1 tác động ngoài xảy ra, chương trình sẽ không xử lí kịp thời dẫn đến việc bỏ qua tác động đó. Ngắt ra đời để phục vụ cho các sự cố đó. Một số thông số ngắt chính của STM32F103: 16 mức ưu tiên có thể lập trình được Độ trễ thấp (xảy ra ngắt cực kì nhanh) Có quản lí năng lượng cho vector ngắt Các thanh ghi điều khiển quá trình ngắt Một số tính năng chính của ngắt ngoài: Kích hoạt độc lập và mặt nạ cho mỗi line sự kiện/ngắt. 17
- Học viện Công nghệ Bưu chính Viễn thông Khoa kỹ thuật Điện tử 1 Có bit trạng thái riêng cho mỗi line ngắt. Có thể có tối đa 20 sự kiện/ ngắt. Kiểm tra tín hiệu ngoài có độ rộng xung nhỏ hơn clock trên APB2. Hình 2. : Các kênh ngắt ngoài Cấu hình ngắt ngoài sử dụng kênh 13 có mức tích cực thấp: void EXTI_Configuration(void) { EXTI_InitTypeDef EXTI_InitStructure; // EXTI struct NVIC_InitTypeDef NVIC_InitStructure; // NVIC struct GPIO_InitTypeDef GPIO_InitStructure; //cap clock cho ngat ngoai va ngoai vi 18
- Học viện Công nghệ Bưu chính Viễn thông Khoa kỹ thuật Điện tử 1 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC| RCC_APB2Periph_AFIO, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 ; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOC, &GPIO_InitStructure); /* mapping */ GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13); /* Clear the the EXTI line interrupt pending bit */ EXTI_ClearITPendingBit(EXTI_Line13); /*EXTI line Configuration */ EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Line = EXTI_Line13; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /*NVIC Configuration*/ NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } 5) Đọc dữ liệu ADC Công thức điện áp ra của ADC: Từ công thức (1) ta tính ra được điện áp cần đo theo công thức: Hàm tính giá trị điện áp đo được: void Get_Value(){ sumadc = 0; for(int i = 0; i
- Học viện Công nghệ Bưu chính Viễn thông Khoa kỹ thuật Điện tử 1 value = ADC_GetConversionValue(ADC1); sumadc += value; Delay(1); } sumadc /= 10; voltage = sumadc*12.111/4095; } 6) Hàm quét Led Ở bài toán điều khiển Led 7 thanh chúng ta thường áp dụng theo cách nối mỗi con Led 7 thanh vào 8 chân data độc lập. Tuy nhiên việc này sẽ gây lãng phí số chân điều khiển Led và giới hạn số Led có thể điều khiển. Với số Led tăng lên đủ lơn số chân cũng cần tăng lên rất nhiều. Để giải quyết bài toán này có một kĩ thuật nêu ra là kĩ thuật “Quét Led”. Kỹ thuật quét Led thực hiện theo nguyên tắc một thời điểm chỉ bật một Led 7 thanh với dữ liệu nó cần hiển thị, các Led còn lại được tắt. Việc quét Led thực hiên luôn phiên sáng với các yêu cầu trên. Quá trình quét Led chuẩn được thực hiện theo các bước sau: Bước 1: Xuất ra mã cần hiển thị. Bước 2: Cấp nguồn cho Led muốn hiển thị. Bước 3: Trễ 1 khoảng thời gian để duy trì sáng. Bước 4: Cắt nguồn Led vừa hiển thị. Thực hiện những bước trên nhiều lần mỗi giây làm mắt ta có cảm giác rằng 4 Led đều đang được bật. Chương trình quét Led: void Quetled(uint32_t t) { int i = 100; GPIO_ResetBits(GPIOA, LED1); //LED1 = 0 GPIO_ResetBits(GPIOA, LED2); //LED2 = 0 GPIO_ResetBits(GPIOA, LED3); //LED3 = 0 GPIO_ResetBits(GPIOA, LED4); //LED4 = 0 while(i){ 20
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài tập lớn: Xây dựng Website bán hàng trực tuyến
22 p | 2037 | 317
-
Bài tập lớn môn Trắc địa đại cương
8 p | 1710 | 288
-
Bài tập lớn môn Lý thuyết ô tô: Tính toán sức kéo ô tô có hệ thống truyền lực cơ khí
33 p | 464 | 80
-
Bài tập lớn môn Trang bị điện ô tô: Hệ thống khởi động Toyota
23 p | 255 | 63
-
Bài tập lớn môn Công nghệ phần mềm: Quản lý hệ thống bán vé máy bay online
24 p | 209 | 37
-
Bài tập lớn môn Phân tích và thiết kế hệ thống thông tin: Quản lý hãng tour du lịch
101 p | 194 | 35
-
Bài tập lớn môn học Mô phỏng hệ thống truyền thông – D10VT
3 p | 473 | 35
-
Bài tập lớn môn: Mạng thông tin
27 p | 182 | 20
-
Bài tập lớn môn Tin học ứng dụng: Giải bài toán kết cấu xây dựng bằng phần mềm Sap 2000 v7.42
27 p | 162 | 20
-
Bài tập lớn môn Hệ thống hạ áp 1: Thiết kế hệ thống chiếu sáng cho phòng học (Nguyễn Hữu Đức)
15 p | 48 | 16
-
Đề cương bài tập lớn môn Các mạng truyền thông vô tuyến
3 p | 269 | 16
-
Bài tập lớn môn Hệ thống hạ áp 1: Thiết kế hệ thống chiếu sáng cho phòng học (Nguyễn Văn Thiện)
15 p | 31 | 14
-
Bài tập lớn môn Kiểm tra phần mềm của sinh viên trường Đại học Bách khoa TP HCM
87 p | 199 | 12
-
Bài tập lớn môn Hệ thống hạ áp 1: Thiết kế hệ thống chiếu sáng cho phòng học (Nguyễn Hữu Toàn)
15 p | 34 | 9
-
Bài tập lớn môn Hệ thống hạ áp 1: Thiết kế hệ thống chiếu sáng cho phòng học (Nguyễn Quang Anh)
15 p | 11 | 9
-
Bài tập lớn môn Kinh tế chính trị Mác-Lênin: Lý luận về giá trị hàng hóa và sự vận dụng của lý luận này để nâng cao hiệu quả kinh doanh của các doanh nghiệp trong nền kinh tế thị trường hiện nay
12 p | 29 | 8
-
Đề tài bài tập lớn môn Kiểm tra phần mềm năm 2011
13 p | 52 | 7
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn