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

26 44 0
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

Đ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

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Ộ 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 Viễn thơng Khoa kỹ thuật Điện tử Học viện Cơng nghệ Bưu Viễn thơng MỤC LỤC Khoa kỹ thuật Điện tử Học viện Công nghệ Bưu Viễn thơng DANH MỤC HÌNH VẼ DANH MỤC BẢNG Khoa kỹ thuật Điện tử Học viện Cơng nghệ Bưu Viễn thơng Khoa kỹ thuật Điện tử 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 Cortex­M3 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 tồ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 q 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ể hồn thiện đề tài của mình Em xin trân thành cảm ơn! Học viện Cơng nghệ Bưu Viễn thông Khoa kỹ thuật Điện tử 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 Cortex­M3, 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:  ST­Microelectronics Core:  ARM Cortex­M3 Xung nhịp:  72 Mhz Flash:  64Kb SRAM:  24Kb Chip SPI Flash, W25X6, dung lượng 2Mb Học viện Cơng nghệ Bưu Viễn thơng Khoa kỹ thuật Điện tử 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   ngồ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 Học viện Cơng nghệ Bưu Viễn thơng Khoa kỹ thuật Điện tử Hình 1. : Cấu tạo Led 7 thanh Anode chung Bảng trang thái của Led 7 thanh Anode chung: Individual Segments Illuminated Decimal  Digit a 0 0 0 0 b 0 0 1 0 c 0 0 0 0 d 0 0 1 e 1 1 f 1 1 0 0 g 1 0 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: 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 Dùng quét Led 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 Học viện Công nghệ Bưu Viễn thơng Khoa kỹ thuật Điện tử Học viện Cơng nghệ Bưu Viễn thơng Khoa kỹ thuật Điện tử 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     vdk   STM32F103C8T6     đo     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 Viễn thơng Khoa kỹ thuật Điện tử 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 Viễn thơng Khoa kỹ thuật Điện tử 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ừ 4­16Mhz. 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 Viễn thơng Khoa kỹ thuật Điện tử 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 Viễn thơng Khoa kỹ thuật Điện tử 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 ngồi vào cịn ADC2 đọc tín hiệu bên trong Các kênh ADC1: 15 Vị trí chân Các kênh ADC1 PA0 ADC0 PA1 ADC1 PA2 ADC2 PA3 ADC3 PA4 ADC4 PA5 ADC5 PA6 ADC6 Học viện Cơng nghệ Bưu Viễn thơng Khoa kỹ thuật Điện tử 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 0­n 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 Viễn thông Khoa kỹ thuật Điện tử   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 ngồ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 ngồ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 q trình ngắt Một số tính năng chính của ngắt ngồ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 Viễn thơng Khoa kỹ thuật Điện tử 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 ngồi có độ rộng xung nhỏ hơn clock trên APB2 Hình 2. : Các kênh ngắt ngồi Cấu hình ngắt ngồ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 Viễn thơng Khoa kỹ thuật Điện tử 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

Ngày đăng: 08/02/2022, 14:07

Từ khóa liên quan

Mục lục

  • DANH MỤC HÌNH VẼ

  • DANH MỤC BẢNG

  • PHẦN 1

    • I) Giới thiệu chung về board ARM STM32F103C8T6 V2

    • II) Giới thiệu về Led 7 thanh anode chung

    • PHẦN 2

      • I) Sơ đồ nguyên lý

        • 1) Sơ đồ khối

        • 2) Chức năng các khối

        • 3) Sơ đồ kết nối phần cứng

          • a) Khối mạch phân áp

          • b) Khối hiển thị Led 7 đoạn

          • c) Nút nhấn chuyển trạng thái

          • d) Sơ đồ kết nối chung cho các khối

          • II) Viết chương trình C cho mạch

            • 1) Cấu hình RCC

            • 2) Cấu hình GPIO

            • 3) Cấu hình ADC

            • 4) Cấu hình ngắt ngoài

            • 5) Đọc dữ liệu ADC

            • 6) Hàm quét Led

            • 7) Chương trình chính

            • 8) Chương trình ngắt ngoài

            • III) Mô phỏng hoạt động của mạch

            • PHẦN 3

              • 1) Những điều đề tài làm được

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

Tài liệu liên quan