1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

22 0 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 22
Dung lượng 596,12 KB

Nội dung

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 dải đo từ - 12V, sử dụng nút nhấn chuyển thang đo 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 tập lớn : 15 Sinh viên thực : 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ử MỤC LỤC DANH MỤC HÌNH VẼ DANH MỤC BẢNG PHẦN I) Giới thiệu chung board ARM STM32F103C8T6 V2 II) Giới thiệu Led anode chung .5 PHẦN I) Sơ đồ nguyên lý 1) Sơ đồ khối 2) Chức khối 3) Sơ đồ kết nối phần cứng II) Viết chương trình C cho mạch 11 1) Cấu hình RCC .11 2) Cấu hình GPIO 12 3) Cấu hình ADC .13 4) Cấu hình ngắt ngồi .14 5) Đọc liệu ADC 16 6) Hàm quét Led 17 7) Chương trình 18 8) Chương trình ngắt ngồi 18 III) Mô hoạt động mạch 19 PHẦN 21 1) Những điều đề tài làm 21 2) Những khó khăn gặp phải 21 TÀI LIỆU THAM KHẢO 22 Học viện Cơng nghệ Bưu Viễn thơng Khoa kỹ thuật Điện tử DANH MỤC HÌNH VẼ Hình 1: Board ARM STM32F103C8T6 Hình 2: Hình ảnh Led anode chung Hình 3: Cấu tạo Led Anode chung Hình 1: Sơ đồ khối mạch phân áp Hình 2: Nút nhấn chuyển trạng thái .10 Hình 3: Sơ đồ kết nối chung 10 Hình 4: Clock tree 11 Hình 5: Các kênh ngắt ngồi 15 Hình 6: Mạch trước nhấn nút 19 Hình 7: Mạch sau nhấn nút 20 DANH MỤC BẢNG Bảng 1: Bảng trạng thái led anode chung Bảng 2: Bảng kết nối chân Led đoạn với board ARM Bảng 3: Các kênh ADC1 13 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 phát triển, vi điều khiển ARM ngày thơng dụng phát triển Trong STM32F1x loại phổ biến sử dụng nhiều loại thiết bị, cung cấp 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 STMicroelectronics tạo bao gồm lõi xử lí ARM Cortex-M3 32 bit hỗ trợ ngoại vi thông dụng I2C, SPI, RTC,… Ngôn ngữ lập trình vơ dễ sử dụng tương thích với ngôn ngữ C thư viện phong phú chia sẻ miễn phí Chính lý nên ARM dần phổ biến phát triển ngày mạnh mẽ toàn giới Trên sở kiến thức học môn học: Kỹ thuật vi xử lý, hệ thống nhúng, … Cùng với hiểu biết thiết bị điện tử, nhóm em định thực đề 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 dải đo từ - 12V, sử dụng nút nhấn chuyển thang đo V mV với mục đích để tìm hiểu thêm ARM, làm quen với thiết bị điện tử,cách lập trình nâng cao hiểu biết cho thân Trong q trình thực có lẽ khó tránh khỏi thiếu sót, hạn chế nhóm em mong có góp ý nhắc nhở từ thầy giáo để hồn thiện đề tài 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 TỔNG QUAN I) Giới thiệu chung board ARM STM32F103C8T6 V2 Board ARM STM32F103C8T6 Kit giành cho:  kỹ sư, học sinh, sinh viên, người bắt đầu nghiên cứu 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 kết nối: SPI, USART, I2C, I2S, CAN…  Là trợ thủ đắc lực việc lập trình 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 Kết nối: SPI, UART, I2C, CAN,… RTC độ xác cao USB: 2.0, DMA II) Giới thiệu Led anode chung Học viện Cơng nghệ Bưu Viễn thơng Khoa kỹ thuật Điện tử Led hay gọi Led đoạn, bao gồm đoạn đèn Led xếp lại với thành hình chữ nhật Khi đoạn lập trình để chiếu sang hiển thị chữ số hệ thập phân Đôi có nhiều Led nối với để hiển thị số lớn chữ số Hình 2: Hình ảnh Led anode chung Với đoạn Led hình nối với chân kết nối để đưa ngồi Các chân gán kí tự từ a đến g, chúng đại diện cho Led riêng lẻ Các chân kết nối với để tạo thành chân chung Chân pin chung hiển thị thường sử dụng để xác định lạo hình Led loại Có loại Led sử dụng Cathode chung Anode chung Hình 3: Cấu tạo Led Anode chung Bảng trang thái Led Anode chung: Học viện Cơng nghệ Bưu Viễn thông Decimal Digit Khoa kỹ thuật Điện tử Individual Segments Illuminated a 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 1: Bảng trạng thái led anode chung Các phương pháp điều khiển Led đoạn: Kết nối chân điều khiển Led trực tiếp với port vi điều khiển Dùng quét Led Vẫn sử dụng quét Led dùng IC chốt liệu để tiết kiệm chân 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ử PHẦN SƠ ĐỒ NGUYÊN LÝ VÀ VIẾT CHƯƠNG TRÌNH I) Sơ đồ nguyên lý 1) Sơ đồ khối Khối mạch phân áp BOARD ARM V2 (Khối MCU) Nút nhấn chuyển trạng thái Khối hiển thị Led đoạn 2) Chức khối  Khối MCU: Có chức đọc giá trị điện áp nút nhấn gửi giá trị đo qua Led đoạn  Khối phân áp: Đo dải đo vdk STM32F103C8T6 đo khoảng – 3.6V nên để mở rộng dải đo, ta phải qua mạch phân áp  Khối nút nhấn: Có chức chuyển đổi hiển thị V mV  Khối hiển thị: Dùng Led đ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 Học viện Công nghệ Bưu Viễn thơng Khoa kỹ thuật Điện tử Hình 1: Sơ đồ khối mạch phân áp Điện áp cần đo nối vào chân PA0 vi điều khiển, dải đo ADC nằm khoảng – 3.6V nên để đo mức điện áp cao hơn, ta cần phải mắc chúng qua mạch phân áp Ta có cơng thức mạch phân áp: V ADC = R2 × V đo R1 + R2 Từ yêu cầu đề ta có V đo =12 V V ADC =3.3 V Giả sử R2=10 k Ohm ta tính giá trị R1=26.7 k Ohm max max Từ ta có cơng thức tính điện áp (1) V đo=3.67 × V ADC b) Khối hiển thị Led đoạn Bảng kết nối chân Led đoạn với board ARM: Board ARM Pin A B C 7-Seg Led PB0 PB1 PB2 Pin D PB E F G PB4 PB5 PB6 DP PB PA1 PA2 PA3 PA4 Bảng 2: Bảng kết nối chân Led đoạn với board ARM c) Nút nhấn chuyển trạng thái 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 nối với chân PC13 vi điều khiển, tích cực mức thấp d) Sơ đồ kết nối chung cho khối Hình 3: Sơ đồ kết nối chung II) Viết chương trình C cho mạch 10 Học viện Cơng nghệ Bưu Viễn thơng Khoa kỹ thuật Điện tử 1) Cấu hình RCC Trên STM32F103 có 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 cấp cho RTC có sẵn chip  HSI (High Speed Internal): Bộ giao động nội tốc độ cao 8MHz Bộ cung cấp cho CPU trọng trường hợp khơng có HSE  LSI (Low Speed Internal): Bộ dung để cấp cho Watchdog Timer có tần số 40KHz Hình 4: 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 64MHz void Clock_Config(void) { /* RCC system reset */ RCC_DeInit(); /* HCLK = SYSCLK */ RCC_HCLKConfig(RCC_SYSCLK_Div1); /* PCLK2 = HCLK */ 11 Học viện Cơng nghệ Bưu Viễn thông Khoa kỹ thuật Điện tử 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; 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); } 12 Học viện Công nghệ Bưu Viễn thơng Khoa kỹ thuật Điện tử 3) Cấu hình ADC Trên STM32F103 có 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 Các kênh ADC1: Vị trí chân PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 PB0 PB1 Các kênh ADC1 ADC0 ADC1 ADC2 ADC3 ADC4 ADC5 ADC6 ADC7 ADC8 ADC9 Bảng 3: Các kênh ADC1 Các đặc điểm ADC:     Độ phân giải 12 bit Ngắt sinh sau kết thúc chuyển đổi Có chế độ chuyển đổi Single Continuous Continuous mode Discontinuous mode: Với continuous mode ADC tự động chuyển đổi lại chuyển đổi xong ngược lại với discontinuous mode Đối với chuyển đổi nhiều kênh lúc nên dùng discontinous mode giảm thời gian đọc kênh định 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 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 khơng cần quan tâm điện áp so sánh lấy chip 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); 13 Học viện Cơng nghệ Bưu Viễn thơng Khoa kỹ thuật Điện tử ADC_InitTypeDef ADC_InitStructure; /*Configuration ADC1*/ ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = DISABLE; ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; 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 vector ngắt lồng Nghĩa sử dụng kết hợp nhiều ngắt chương trình Ngắt phần quan trọng thiết yếu chương trình Nếu khơng có ngắt chương trình thực theo trình tự từ xuống mà khơng có can thiệp Điều bất lợi có tác động ngồi xảy ra, chương trình khơng xử lí kịp thời dẫn đến việc bỏ qua tác động Ngắt đời để phục vụ cho cố Một số thơng số ngắt STM32F103:  16 mức ưu tiên lập trình  Độ trễ thấp (xảy ngắt nhanh)  Có quản lí lượng cho vector ngắt  Các ghi điều khiển trình ngắt Một số tính ngắt ngồi: 14 Học viện Cơng nghệ Bưu Viễn thơng Khoa kỹ thuật Điện tử  Kích hoạt độc lập mặt nạ cho line kiện/ngắt  Có bit trạng thái riêng cho line ngắt  Có thể có tối đa 20 kiện/ ngắt  Kiểm tra tín hiệu ngồi có độ rộng xung nhỏ clock APB2 Hình 5: 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 NVIC_InitTypeDef GPIO_InitTypeDef EXTI_InitStructure; // EXTI struct NVIC_InitStructure; // NVIC struct GPIO_InitStructure; //cap clock cho ngat ngoai va ngoai vi RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC| 15 Học viện Cơng nghệ Bưu Viễn thông Khoa kỹ thuật Điện tử 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 liệu ADC Công thức điện áp ADC: V ADC = ADC value × 3.3 4095 Từ cơng thức (1) ta tính điện áp cần đo theo cơng thức: V đo= 12.111 × ADC value 4095 Hàm tính giá trị điện áp đo được: void Get_Value(){ sumadc = 0; for(int i = 0; i

Ngày đăng: 26/04/2023, 19:41

TÀI LIỆU CÙNG NGƯỜI DÙNG

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN

w