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

báo cáo bài tập lớn môn đo lường điều khiển bằng máy tính chủ đề stm32f103c8t6

11 0 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề STM32F103C8T6
Tác giả Nguyễn Thế Toàn
Người hướng dẫn NGUYỄN HOÀNG GIÁP
Trường học ĐẠI HỌC QUỐC GIA TPHCM
Chuyên ngành ĐO LƯỜNG ĐIỀU KHIỂN BẰNG MÁY TÍNH
Thể loại BÁO CÁO BÀI TẬP LỚN
Năm xuất bản 2024
Thành phố Thành Phố Hồ Chí Minh
Định dạng
Số trang 11
Dung lượng 718,95 KB

Nội dung

ĐẠI HỌC QUỐC GIA TPHCMTRƯỜNG ĐẠI HỌC BÁCH KHOABÁO CÁO BÀI TẬP LỚNMÔN: ĐO LƯỜNG ĐIỀU KHIỂN BẰNG MÁY TÍNHCHỦ ĐỀ: STM32F103C8T6GVHD: NGUYỄN HOÀNG GIÁP... Tạo giao diện C# kết nối cổng UARTS

Trang 1

ĐẠI HỌC QUỐC GIA TPHCM

TRƯỜNG ĐẠI HỌC BÁCH KHOA

🙦🙦🙦

BÁO CÁO BÀI TẬP LỚN

MÔN: ĐO LƯỜNG ĐIỀU KHIỂN BẰNG MÁY TÍNH

CHỦ ĐỀ: STM32F103C8T6

GVHD: NGUYỄN HOÀNG GIÁP

Trang 2

MỤC LỤC

1 Tạo giao diện C# kết nối cổng UART 3

2 Sử dụng Ngắt UART dùng để bật tắt LED 3

a Kết nối phần cứng 3

b Giải thích code 4

3 Sử giá trị cảm biến (LM35) chuyển đổi ADC 5

a.Kết nối phần cứng 5

b.Giải thích code 6

4 I2C dùng EEPROM AT24C256 7

5 Giao tiếp SPI với MAX7219 (8 led 7 đoạn) 7

a.Kết nối phần cứng 7

b Giải thích code 7

6 Dùng Opto đóng ngắt 12v 9

a Kết nối phần cứng 9

b Giải thích code 9

Trang 3

Tạo giao diện C# kết nối cổng UART

Sử dụng Ngắt UART dùng để bật tắt LED

a Kết nối phần cứng

Sử dụng dụng UART1 để truyền nhận dữ liệu

Chân PA0,PA2 làm chân GPIO_Output

Trang 4

b Giải thích code

// KHAI BAO BIEN//

uint8_t uartRxData;

volatile uint8_t uartRxFlag = 0;

//GỌI HÀM NGẮ$T UART//

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {

if (huart->Instance == USART1)

{

uartRxFlag = 1;

//NẾ$U LÀ UART1 THÌ CHO CỜ LẾN1//

}

}

HAL_UART_Receive_IT(&huart1, (uint8_t*)RX_DATA,1);

//CHỜ NHẬN DỮ LIỆU TỪ UART//

//TIẾ$N VÀO HÀM WHILE//

while (1)

{

if (uartRxFlag)

//kiểIm tra cờ, khi có dữ liệu từ uart cờ này sẽ đặt lển 1//

{

switch (uartRxData)

//kiểIm tra giá trị cuIa uart đểI thực hiện 1 số$ lệnh dưới//

{

case '1':

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, 1);

break;

case '4':

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, 0);

case '2':

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, 1);

break;

case '5':

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, 0);

break;

default:

// nể$u ko có case phù hợp thì default giúp ko xaIy ra hành

Trang 5

động nào khác //

break;

}

uartRxFlag = 0;

// sau khi xưI lí dữ liệu cờ sẽ xóa vểf 0//

HAL_UART_Receive_IT(&huart1, &uartRxData, 1);

//chờ nhận dữ liệu uart tiể$p theo//

}

Sử giá trị cảm biến (LM35) chuyển đổi ADC

a.Kết nối phần cứng

- Sử dụng ADC1 (PA1) : Chuyển tín hiệu analog thành digital

- Chuyển đổi ADC thành điện áp:

Giá trị ADC được nhân 3.3 (điện áp tham chiếu), sau đó chia cho 4095 giá trị tối đa của ADC, tương ứng với điện áp tham chiếu

Tính nhiệt độ bằng cách *100 do LM35 có độ nhạy 10mV/ độ C, điện áp tương ứng 1 độ

là 0.1V hoặc 10mV

Trang 6

b.Giải thích code

// khai báo biể$ n //

float temperature ;

uint16_t adc_value ;

// chuyểI n đốI i ADC thành voltage//

float convertToTemperature (uint16_t adc_value ) {

// V = Vref * (ADC_value / 4095))//

float voltage float ) adc_value 3.3f 4095.0f;

return voltage 100.0f;

}

void Tem ( void )

{

HAL_ADC_Start(&hadc1);

if (HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY) == HAL_OK)

//DOC GIA TRI ADC//

adc_value HAL_ADC_GetValue(&hadc1);

//CHUYEN GIA TRI ADC THANH NHIET DO//

temperature convertToTemperature ( adc_value );

//GIA TRI NHIET DO QUA UART//

}

}

while (1)

{

Tem ();

char uart_data [50];

Trang 7

sprintf( uart_data , "%.2f\r\n" , temperature );

HAL_UART_Transmit(&huart1, uint8_t*) uart_data , strlen( uart_data ),

HAL_MAX_DELAY);

HAL_Delay(1000);

}

I2C dùng EEPROM AT24C256

a.Kết nối phần cứng

b.Giải thích code

// KHỞ II TẠO BIẾ$N //

#define EEPROM_ADDRESS 0xA0

uint8_t writeData [10] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // D? li?u c?n ghi

uint8_t readData [10]; // D? li?u d?c du?c

Trang 8

//DÙNG I2C ĐẾI TRO I TỚI ĐỊA CHII CUIA EEPROM//

void EEPROM_Write (uint16_t address, uint8_t* data , uint16_t dataSize ) {

HAL_I2C_Mem_Write(&hi2c1, EEPROM_ADDRESS , address, I2C_MEMADD_SIZE_16BIT,

data , dataSize , HAL_MAX_DELAY);

}

void EEPROM_Read (uint16_t address, uint8_t* data , uint16_t dataSize ) {

HAL_I2C_Mem_Read(&hi2c1, EEPROM_ADDRESS , address, I2C_MEMADD_SIZE_16BIT,

data , dataSize , HAL_MAX_DELAY);

}

// GỌI LẠI HÀM//

EEPROM_Write (0, writeData , 10);

EEPROM_Read (0, readData , 10);

Giao tiếp SPI với MAX7219 (8 led 7 đoạn)

a.Kết nối phần cứng

- Sử dụng SPI2 để giao tiếp với MAX7219

- SPI2 chế độ Transmit Only Master

- Chân PB15 SP2_MOSI : Master out với chân Data của Max7219

- Chân PB13 SPI2_SCK : đồng bộ Clock với chân CLK của Max7219

-Chân PB12 là chân để kích chân CS của Max7219

Trang 9

b Giải thích code

// khai báo biể$ n//

#define DECODEMODE 0x09

#define INTENSITY 0x0A

#define SCANLIMIT 0x0B

#define SHUTDOWN 0x0C

#define DISPLAYTEST 0x0F

void SPI_Send (uint8_t data ) {

// CHO DEN KHI SPI KHONG BAN//

while ( HAL_SPI_GET_FLAG(&hspi2, SPI_FLAG_TXE) == RESET) {}

// GUI DU LIEU QUA SPI//

HAL_SPI_Transmit(&hspi2, data , 1, HAL_MAX_DELAY);

}

// MAX7219 hoạt động khi có một xung cạnh xuố$ ng kích vào chân CS//

// tro I xuố$ ng địa chỉ I và data câf n truy cập

void ADDR_DATA uint8_t data1 , uint8_t data2 ) {

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, 0)

SPI_Send ( data1 );

SPI_Send ( data2 );

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, 1);

Trang 10

ADDR_DATA ( SCANLIMIT ,0x07); // HIẾI N THỊ 8 LED

ADDR_DATA ( SHUTDOWN ,0x01); // SÁNG TOÀN BỘ KHI KÍCH

ADDR_DATA ( DISPLAYTEST ,0x00); // CHẾ$ ĐỘ TEST MÀN HÌNH

}

// HIẾI N THỊ SỐ$ 11 TRONG HÀM INT MAIN()//

MAX7129_INIT ();

ADDR_DATA (0X01,0X01);

ADDR_DATA (0X02,0X01);

ADDR_DATA (0X03,0X00);

ADDR_DATA (0X04,0X00);

ADDR_DATA (0X05,0X00);

ADDR_DATA (0X06,0X00);

ADDR_DATA (0X07,0X00);

ADDR_DATA (0X08,0X00);

Dùng Opto đóng ngắt 12v

a Kết nối phần cứng

- Sử dụng chân PA4, ngắt uart để kích cho

b Giải thích code

while (1)

{/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */

Trang 11

if (uartRxFlag)

{

switch (uartRxData) {

case '3':

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, 1);

break ;

case '6':

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, 0);

break ; }

}

Ngày đăng: 07/08/2024, 20:08

w