1. Trang chủ
  2. » Giáo Dục - Đào Tạo

HỆ THỐNG NHÚNG Thực hiện ADC hiện thị lên led 7 thanh và đọc giá trị các kênh

19 67 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 19
Dung lượng 1,57 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Với mong muốn làm rõ các kiến thức đã học và giới thiệu các ứng dụng cơ bản của hệ thống nhúng, nhóm chúng em đưa ra mô hình thiết kế 2 kênh ADC đọc giá trị của 2 cảm biến hoặc 2 biến tr

Trang 1

KỸ THUẬT ĐIỆN – ĐIỆN TỬ 1

***

BÁO CÁO BÀI TẬP

HỆ THỐNG NHÚNG

Thực hiện ADC hiện thị lên led 7 thanh và

đọc giá trị các kênh

Giảng viên: TS Nguyễn Ngọc Minh

Sinh viên nhóm 01

Đặng Văn Hưng

Đỗ Xuân Lộc Nguyễn Hữu Hùng Phạm Văn Thưởng

- B18DCDT100

- B18DCDT139

- B18DCDT092

- B18DCDT251

Hà Nội, 2021

Trang 2

Mục lục

LỜI NÓI ĐẦU 2

I Giới thiệu đề tài 3

II Sơ đồ nguyên lý 3

III Linh kiện sử dụng 4

1 STM32F103C8T6 4

2 Module led 7 thanh 4 số TM1637 6

3 Nút nhấn 7

4 Biến trở volume 8

IV Nguyên lý hoạt động 8

1 Hiển thị cho led 7 đoạn 9

2 Lập trình trong ADC trong STM32 11

a) Khởi tạo biến cấu hình cho ADC và GPIO 11

b) Cấp clock và cấu hình input ADC là PA4 PA5 12

c) Cấu hình cho DMA và đọc giá trị từ DMA 12

d) Button cấu hình theo sơ đồ sau 12

e) Kết quả 13

VI Tài liệu tham khảo 17

LỜI CẢM ƠN 18

Trang 3

LỜI NÓI ĐẦU

Ngày nay, các hệ thống nhúng trở nên phổ biến và đóng vai trò quan trọng trong đời sống con người Ví dụ quanh ta có rất nhiều sản phẩm nhúng như lò vi sóng, nồi cơm điện, điều hòa, điện thoại di động, ô tô, máy bay, tàu thủy, các đầu đo, cơ cấu chấp hành thông minh, robot v.v ta có thể thấy hiện nay hệ thống nhúng có mặt ở mọi lúc mọi nơi trong cuộc sống của chúng ta

Qua môn học hệ thống nhúng, chúng em đã hiểu thêm về các hệ thống nhúng trong thực tế, về đặc điểm, tính ưu việt cũng như tính ứng dụng của chúng đối với con người Với mong muốn làm rõ các kiến thức đã học và giới thiệu các ứng dụng cơ bản của hệ thống nhúng, nhóm chúng em đưa ra mô hình thiết kế 2 kênh ADC đọc giá trị của 2 cảm biến hoặc 2 biến trở và hiển thị lên 4 con led 7 thanh và có nút nhấn chọn cảm biến hiển thị – một sản phẩm rất quen thuộc và cần thiết trong đời sống

Do thời gian thực hiện và kiến thức còn hạn chế nên còn nhiều sai sót

trong quá trình thực hiện đề tài, rất mong được sự bổ sung đóng góp của các

thầy cô và các bạn Chúng em xin chân thành cảm ơn các thầy cô trong khoa

điện tử, cảm ơn thầy Minh đã tận tình hướng dẫn và giúp đỡ chúng em thực

hoàn thành đề tài này

Trang 4

I Giới thiệu đề tài

Hiểu rõ về cách hoạt động của ADC được ứng dụng rất nhiều như

đo nhiệt độ, đọc giá trị điện áp, cường độ dòng điện, đọc phím nhấn, đọc giá trị biến trở, bảo vệ động cơ…, ADC có số bit càng cao tức là độ phân giải của bộ ADC càng lớn

Sử dụng ADC của STM32F103R6 để đọc giá trị của biến trở sau đó hiển thị lên LED7thanh Thay đổi giá trị của ADC bằng cách thay đổi vị trí của con trỏ ở biến trở

Làm rõ về ADC trên STM32F103R6, lập trình giao tiếp với led 7 thanh

II Sơ đồ nguyên lý

Mạch nguyên lý mô phỏng bằng fritzing

H/a: Mạch nguyên lý mô phỏng bằng fritzing

III Linh kiện sử dụng

Trang 5

1 STM32F103C8T6

STM32 là một trong những dòng chip phổ biến của ST với nhiều họ thông dụng như F0,F1,F2,F3,F4… Stm32f103 thuộc họ F1 với lõi là ARM

COTEX M3 STM32F103 là vi điều khiển 32 bit, tốc độ tối đa là 72Mhz Giá thành cũng khá rẻ so với các loại vi điều khiển có chức năng tương tự Mạch nạp cũng như công cụ lập trình khá đa dạng và dễ sử dụng

 Cấu hình chi tiết :

 ARM 32-bit Cortex M3 với clock max là 72Mhz

 Bộ nhớ:

o 64 kbytes bộ nhớ Flash(bộ nhớ lập trình)

o 20kbytes SRAM

 Clock, reset và quản lý nguồn

o Điện áp hoạt động 2.0V -> 3.6V

o Power on reset(POR), Power down reset(PDR) và programmable voltage detector (PVD)

o Sử dụng thạch anh ngoài từ 4Mhz -> 20Mhz

o Thạch anh nội dùng dao động RC ở mode 8Mhz hoặc 40khz

o Sử dụng thạch anh ngoài 32.768khz được sử dụng cho RTC

Trang 6

 Trong trường hợp điện áp thấp:

o Có các mode :ngủ, ngừng hoạt động hoặc hoạt động ở chế độ chờ

o Cấp nguồn ở chân Vbat bằng pin để hoạt động bộ RTC và sử dụng lưu trữ data khi mất nguồn cấp chính

 2 bộ ADC 12 bit với 9 kênh cho mỗi bộ

o Khoảng giá trị chuyển đổi từ 0 – 3.6V

o Lấy mẫu nhiều kênh hoặc 1 kênh

o Có cảm biến nhiệt độ nội

 DMA: bộ chuyển đổi này giúp tăng tốc độ xử lý do không có sự can thiệp quá sâu của CPU

o 7 kênh DMA

o Hỗ trợ DMA cho ADC, I2C, SPI, UART

 7 timer

o 3 timer 16 bit hỗ trợ các mode IC/OC/PWM

o 1 timer 16 bit hỗ trợ để điều khiển động cơ với các mode bảo vệ như ngắt input, dead-time

o 2 watdog timer dùng để bảo vệ và kiểm tra lỗi

o 1 sysTick timer 24 bit đếm xuống dùng cho các ứng dụng như hàm Delay…

 Hỗ trợ 9 kênh giao tiếp bao gồm:

o 2 bộ I2C(SMBus/PMBus)

o 3 bộ USART(ISO 7816 interface, LIN, IrDA capability, modem control)

o 2 SPIs (18 Mbit/s)

o 1 bộ CAN interface (2.0B Active)

o USB 2.0 full-speed interface

 Kiểm tra lỗi CRC và 96-bit ID

Trang 7

2 Module led 7 thanh 4 số TM1637

Led 7 thanh 4 số là một trong những led 7 thanh được dùng nhiều trong các mô hình điện tử, các thiết bị cần hiển thị thông số: điện áp vào, điện áp ra

Led 7 đoạn 4 số có 4 chân với kích thước nhỏ gọn, màu hiển thị dễ dàng cho việc lắp đặt trên các mạch điện tử

 Thông số kỹ thuật

- 4 số

- Số chân: 4 chân

 Thứ tự chân và cách kết nối với Arduino:

- VCC : nối với chân 5V

- GND : nối với chân GND

- CLK và DIO gắn vào chân digital

Trang 8

3 Nút nhấn

Nút ấn là một loại công tắc đơn giản điều khiển hoạt động của máy hoặc một số loại quá trình Hầu hết, các nút nhấn là nhựa hoặc kim loại Hình dạng của nút ấn có thể phù hợp với ngón tay hoặc bàn tay để sử dụng dễ dàng Tất cả phụ thuộc vào thiết kế cá nhân Nút ấn có 2 loại chính là nút nhấn thường mở hoặc nút nhấn thường đóng

Trang 9

4 Biến trở volume

Biến trở là các thiết bị có điện trở thuần có thể biến đổi được theo ý

muốn Chúng có thể được sử dụng trong các mạch điện để điều chỉnh hoạt động của mạch điện

Điện trở của thiết bị có thể được thay đổi bằng cách thay đổi chiều dài của dây dẫn điện trong thiết bị, hoặc bằng các tác động khác như nhiệt độ thay đổi, ánh sáng hoặc bức xạ điện từ,

Nguyên lý hoạt động chủ yếu của biến trở là các dây dẫn được tách rời dài ngắn khác nhau Trên các thiết bị sẽ có vi mạch điều khiển hay các núm vặn Khi thực hiện điều khiển các núm vặn các mạch kín sẽ thay đổi chiều dài dây dẫn khiến điện trở trong mạch thay đổi

Thực tế việc thiết kế mạch điện tử luôn có một khoảng sai số, nên khi

thực hiện điều chỉnh mạch điện người ta phải dùng biến trở, lúc này biến trở

có vai trò phân áp, phân dòng trong mạch

IV Nguyên lý hoạt động

Để hiểu được nguyên lý hoạt động của mạch, trước tiên phải hiểu rõ ADC

là gì, lập trình ADC trong STM32F103F6

ADC là Analog to Digital Converter là bộ chuyển đổi tín hiệu tương tự sang tín hiệu số Được ứng dụng rất nhiều như đo nhiệt độ, đọc giá trị điện

Trang 10

áp, cường độ dòng điện, đọc phím nhấn, đọc giá trị biến trở, bảo vệ động

cơ…, ADC có số bit càng cao tức là độ phân giải của bộ ADC càng lớn

ADC trong STM32F103R6 là bộ ADC có 12 bit, tức giá trị đọc về trong khoảng 0 đến 2^12 = 4096

1 Hiển thị cho led 7 đoạn.

Để có thể hiển thị thì phải xây dựng thư viện riêng, ta cần xây dựng các giao thức cần thiết

Các giao tiếp ta cần giao diện nối tiếp 2 dây CLK, DIO

Dữ liệu của bộ vi xử lý nhận ra giao tiếp với TM1637 bằng giao diện bus hai dây (Lưu ý: Phương thức giao tiếp hoàn toàn không bằng với giao thức bus 12C vì không có địa chỉ phụ) Khi dữ liệu được đưa vào, tín hiệu DIO không được thay đổi đối với CLK mức cao và tín hiệu DIO sẽ thay đổi đối với tín hiệu CLK mức thấp Khi CLK là mức cao và DIO thay đổi từ mức cao xuống mức thấp, đầu vào dữ liệu sẽ bắt đầu Khi CLK là mức cao và

DIO thay đổi từ mức thấp lên mức cao, đầu vào dữ liệu kết thúc Truyền dữ liệu TM1637 mang tín hiệu trả lời ACK

Trang 11

Điều kiện bắt đầu đạt được bằng cách hạ thấp dòng DIO trong khi dòng đồng hồ ở trạng thái cao, sau đó điều kiện dừng được hạ xuống

Để truyền dữ liệu đúng, một tín hiệu trả lời ACK được tạo bên trong chip

để hạ chân DIO ở mức không đạt của xung nhịp thứ 8 Dây giao diện DIO được phát hành vào cuối của xung clock thứ 9

Có 4 loại gói

Về hiển thị lên led ta nói đến gói Control display là lệnh điều khiển hiển thị chốt dữ liệu được lưu trữ trong các thanh ghi bên trong bằng cách thiết lập B3 B0 B1, và B2 được sử dụng để hiển thị độ sáng màn hình Màn hình có thể được tắt bằng cách đặt lại B3

Khi lệnh điều khiển màn hình được thực thi, dữ liệu được lưu trữ trong thanh ghi bên trong sẽ được chốt và xuất hiện ở các chân phân đoạn

Trang 12

Ví dụ thanh ghi có giá trị 0x06 (00000110), khi gói hiển thị điều khiển được nhận và B3 được kích hoạt các chân phân đoạn sẽ có mức logic sau, và theo sơ đồ mạch số 1 sẽ hiển thị ở chữ số đầu tiên

2 Lập trình trong ADC trong STM32

a) Khởi tạo biến cấu hình cho ADC và GPIO

b) Cấp clock và cấu hình input ADC là PA4 PA5

Trang 13

c) Cấu hình cho DMA và đọc giá trị từ DMA

d) Button cấu hình theo sơ đồ sau

Trang 14

e) Kết quả

// Includes -*/

#include "stm32f10x.h"

#include <stdio.h>

#define ARRAYSIZE 8*4

#define ADC1_DR ((uint32_t)0x4001244C)

volatile uint16_t ADC_values[ARRAYSIZE];

volatile uint32_t status = 0;

void ADCInit(void);

void DMAInit(void);

int main(void){

uint8_t index;

ADCInit();

DMAInit();

//Enable DMA1 Channel transfer

Trang 15

DMA_Cmd(DMA1_Channel1, ENABLE);

//Start ADC1 Software Conversion

ADC_SoftwareStartConvCmd(ADC1, ENABLE);

//wait for DMA complete

while (!status){};

ADC_SoftwareStartConvCmd(ADC1, DISABLE);

//print averages

/*for(index = 0; index<8; index++)

{ printf("ch%d = %d ",index, ADC_values[index]);

}*/

for(index = 0; index<8; index++){

printf("\r\n ADC value on ch%d = %d\r\n",

index, (uint16_t)((ADC_values[index]+ADC_values[index+8]

+ADC_values[index+16]+ADC_values[index+24])/4));

}

while (1)

{

//interrupts does the job

}

}

void ADCInit(void){

// Enable ADC1 and

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 |

RCC_APB2Periph_GPIOA, ENABLE);

GPIO_InitTypeDef GPIO_InitStructure; //Variable used to setup the

GPIO pins

//==Configure ADC pins (PA0 -> Channel 0 to PA7 -> Channel 7) as

analog inputs==

GPIO_StructInit(&GPIO_InitStructure); // Reset init structure, if not it can cause issues

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1|

GPIO_Pin_2| GPIO_Pin_3| GPIO_Pin_4| GPIO_Pin_5| GPIO_Pin_6|

GPIO_Pin_7;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;

GPIO_Init(GPIOA, &GPIO_InitStructure);

ADC_InitTypeDef ADC_InitStructure;

//ADC1 configuration

ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;

//We will convert multiple channels

ADC_InitStructure.ADC_ScanConvMode = ENABLE;

Trang 16

//select continuous conversion mode

ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//!

//select no external triggering

ADC_InitStructure.ADC_ExternalTrigConv =

ADC_ExternalTrigConv_None;

//right 12-bit data alignment in ADC data register

ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

//8 channels conversion

ADC_InitStructure.ADC_NbrOfChannel = 8;

//load structure values to control and status registers

ADC_Init(ADC1, &ADC_InitStructure);

//wake up temperature sensor

//ADC_TempSensorVrefintCmd(ENABLE);

//configure each channel

ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1,

ADC_SampleTime_41Cycles5);

ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2,

ADC_SampleTime_41Cycles5);

ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 3,

ADC_SampleTime_41Cycles5);

ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 4,

ADC_SampleTime_41Cycles5);

ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 5,

ADC_SampleTime_41Cycles5);

ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 6,

ADC_SampleTime_41Cycles5);

ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 7,

ADC_SampleTime_41Cycles5);

ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 8,

ADC_SampleTime_41Cycles5);

//Enable ADC1

ADC_Cmd(ADC1, ENABLE);

//enable DMA for ADC

ADC_DMACmd(ADC1, ENABLE);

//Enable ADC1 reset calibration register

ADC_ResetCalibration(ADC1);

//Check the end of ADC1 reset calibration register

while(ADC_GetResetCalibrationStatus(ADC1));

//Start ADC1 calibration

ADC_StartCalibration(ADC1);

//Check the end of ADC1 calibration

while(ADC_GetCalibrationStatus(ADC1));

}

void DMAInit(void){

Trang 17

//enable DMA1 clock

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

//create DMA structure

DMA_InitTypeDef DMA_InitStructure;

//reset DMA1 channe1 to default values;

DMA_DeInit(DMA1_Channel1);

//channel will be used for memory to memory transfer

DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;

//setting normal mode (non circular)

DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;

//medium priority

DMA_InitStructure.DMA_Priority = DMA_Priority_High;

//source and destination data size word=32bit

DMA_InitStructure.DMA_PeripheralDataSize =

DMA_PeripheralDataSize_HalfWord;

DMA_InitStructure.DMA_MemoryDataSize =

DMA_MemoryDataSize_HalfWord;

//automatic memory destination increment enable

DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;

//source address increment disable

DMA_InitStructure.DMA_PeripheralInc =

DMA_PeripheralInc_Disable;

//Location assigned to peripheral register will be source

DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;

//chunk of data to be transfered

DMA_InitStructure.DMA_BufferSize = ARRAYSIZE;

//source and destination start addresses

DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ADC_values; //send values to DMA registers

DMA_Init(DMA1_Channel1, &DMA_InitStructure);

// Enable DMA1 Channel Transfer Complete interrupt

DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE);

DMA_Cmd(DMA1_Channel1, ENABLE); //Enable the DMA1 -

Channel1

NVIC_InitTypeDef NVIC_InitStructure;

//Enable DMA1 channel IRQ Channel */

NVIC_EnableIRQ(DMA1_Channel1_IRQn);

}

V Ứng dụng và hướng phát triển

Mạch chuyển đổi tương tự ra số hay ADC (viết tắt tiếng Anh: Analog-to-Digital Converter) là hệ thống mạch thực hiện chuyển đổi một tín hiệu

Trang 18

analog (tín hiệu tương tự) liên tục, ví dụ như tín hiệu âm thanh thanh

micro, hay tín hiệu ánh sáng trong máy ảnh kỹ thuật số, thành tín hiệu

số.Một hệ thống ADC có thể bao gồm một bộ phận phần cứng (như một

bộ tính toán độc lập) làm nhiệm vụ chuyển đổi tín hiệu analog (dưới dạng điện áp hay dòng điện) thành các giá trị số (digital) đại diện cho cường độ điện áp hay tín hiệu đó Thông thường, tín hiệu số ngõ ra (digital output) mang dạng nhị phân bù 2 tỉ lệ với giá trị ngõ vào, nhưng cũng có một số khả năng khác

Có một số kiến trúc ADC đang được sử dụng Do sự phức tạp của kiến trúc và yêu cầu về độ chính xác, phần lớn các hệ thống ADC đều được sản xuất bên trong mạch tích hợp (IC) Tại ngõ vào chính của ADC trong chip có thể có phần tử Multiplexer, cho ra ADC đa ngõ vào hay ADC đa kênh Trước đây giá thành ADC cao, nên đã bố trí 8 đến 64 ngõ vào Hiện nay xuất hiện các chip chỉ bố trí 1, 2 hoặc 4 ngõ vào

Ngoài ra lập trình ADC còn có thể ứng dụng thực tế cho một số lĩnh vực như:

- Đo đạc trong vật lý, hóa học, sinh học, y học, đo lường điện,

- Âm nhạc, hình ảnh, truyền hình truyền thông,

- Thông tin liên lạc, thiết bị dân sinh, chip chỉ bố trí 1, 2 hoặc 4 ngõ vào

VI Tài liệu tham khảo

- Bài tập được tham khảo từ nhiều nguồn khác nhau:

https://deviot.vn/tutorials/stm32f1.23165131/adc-voi-stm32.73721443

https://khuenguyencreator.com/lap-trinh-stm32-doc-adc-mot-kenh/

https://tapit.vn/chuc-nang-adc-su-dung-vi-dieu-khien-stm32f103c8t6/

https://sinhviendien.com/2021/07/03/bai-08-lap-trinh-adc-smt32/

https://vi.wikipedia.org/wiki/ADC#C%C3%A1c_nh%C3%B3m

Ngày đăng: 07/02/2022, 15:40

HÌNH ẢNH LIÊN QUAN

• Cấu hình chi tiết : - HỆ THỐNG NHÚNG Thực hiện ADC hiện thị lên led 7 thanh và  đọc giá trị các kênh
u hình chi tiết : (Trang 5)
Khi lệnh điều khiển màn hình được thực thi, dữ liệu được lưu trữ trong thanh ghi bên trong sẽ được chốt và xuất hiện ở các chân phân đoạn. - HỆ THỐNG NHÚNG Thực hiện ADC hiện thị lên led 7 thanh và  đọc giá trị các kênh
hi lệnh điều khiển màn hình được thực thi, dữ liệu được lưu trữ trong thanh ghi bên trong sẽ được chốt và xuất hiện ở các chân phân đoạn (Trang 11)
a) Khởi tạo biến cấu hình cho ADC và GPIO - HỆ THỐNG NHÚNG Thực hiện ADC hiện thị lên led 7 thanh và  đọc giá trị các kênh
a Khởi tạo biến cấu hình cho ADC và GPIO (Trang 12)
c) Cấu hình cho DMA và đọc giá trị từ DMA - HỆ THỐNG NHÚNG Thực hiện ADC hiện thị lên led 7 thanh và  đọc giá trị các kênh
c Cấu hình cho DMA và đọc giá trị từ DMA (Trang 13)

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w