Lưu đồ thuật toán và Chương trình

Một phần của tài liệu nghiên cứu xây dựng hệ thống đo - điều khiển nhiệt độ lưu trên thẻ nhớ sd dùng vi điều khiển 32bit (Trang 72 - 79)

72 Khởi tạo

SD, SPI, ADC

Tạo tập tin trên thẻ nhớ Đọc ADC Ghi giá trị vao thẻ nhớ Chuyển giá trị ADC -> t0C Start Lưu trữ Kết thúc ghi Chờ 10ms Y N Đóng tập tin Y N

Từ lưu đồ thuật toán ta có chương trinh chính: #include <stdio.h>

#include <stm32f10x_lib.h> // STM32F10x Library Definitions

#include "STM32_Init.h" // STM32 Initialization #include "tff.h"

#include "diskio.h" unsigned short int ADC_ConvertedValue; unsigned char Clock1s;

#ifndef f32

#define f32 float

#endif

unsigned short ADC_ConvertedValue; unsigned char Clock1s;

int ledLight = 0; int Alarm = 0;

#define LED ( 1 << 0 ) // PB0: LED D2 #define UP 0x0001

#define down 0x0002

/*--- Initialises the Analog/Digital converter

PC0 (ADC Channel10) is used as analog input

use DMA Channel1 for ADC1 (see DMA request mapping)

*---*/ void Delay(vu32 nCount) {

for(; nCount != 0; nCount--); }

void adc_Init (void) {

// GPIOA->CRL &= ~0x0000000F; // set PIN1 as analog input (see stm32_Init.c)

RCC->AHBENR |= (1<<0); // enable periperal clock for DMA

DMA1_Channel1->CMAR = (u32)&ADC_ConvertedValue;// set channel1 memory address

DMA1_Channel1->CPAR = (u32)&(ADC1->DR); // set channel1

peripheral address

DMA1_Channel1->CNDTR = 1; // transmit 1 word DMA1_Channel1->CCR = 0x000025A0; // configure DMA channel

DMA1_Channel1->CCR |= (1 << 0); // DMA Channel 1 enable RCC->APB2ENR |= (1<<9); // enable periperal clock for ADC1

ADC1->SQR1 = 0x00000000; // only one conversion

ADC1->SMPR2 = 0x00000005; // set sample time channel1 (55,5 cycles)

ADC1->SQR3 = 0x00000000; // set channel1 as 1st conversion

ADC1->CR1 = 0x00000100; // use independant mode, SCAN mode

ADC1->CR2 = 0x000E0103; // use data align right,

ADC1->CR2 |= 0x00500000; //

start SW conversion }

/*--- Systick Interrupt Handler

SysTick interrupt happens every 10 ms

*---*/ void SysTick_Handler (void) {

static unsigned long ticks; static unsigned long timetick; static unsigned char leds = 0x01; if (ticks++ >= 199) { ticks = 0; Clock1s = 1; } } // end SysTick_Handler void RTC_IRQHandler(void) { if (RTC->CRL & (1<<0) ) { RTC->CRL &= ~(1<<0); } if (RTC->CRL & (1<<1) ) { RTC->CRL &= ~(1<<1); // 74

} } // end TIM1_UP_IRQHandler /*---*\ | RTC Interrupt Handler | \*---*/ DWORD get_fattime () { } /*--- MAIN function *---*/ int main (void) {

FATFS fs; FIL F;

FRESULT fres; UINT bytesWritten;

const char filename[] = "data.txt"; char buf1[20] ;

int startwrite=0; long int AD_value; char sAd_value[10];

stm32_Init (); adc_Init();

while(1){

AD_value = ADC_ConvertedValue;

if(((GPIOA->IDR & UP) == 0 )) //kiem trra phim start { GPIOB->ODR &= ~ LED; //bat led

startwrite=1;

}

if((GPIOA->IDR & down) == 0 ) // kiem tra phim stop

{ GPIOB->ODR |= LED; // tat led

startwrite=0; break;

}

if(startwrite==1) //bat dau qua

trinh ghi {

AD_value=((AD_value*330)/4096); f_mount(0, &fs)

fres = f_open (&F, filename, FA_READ | FA_WRITE |

FA_CREATE_ALWAYS); sprintf(buf1,"%2.2f,",AD_value);

fres = f_write (&F, buf1, strlen (buf1) , &bytesWritten); f_sync (&F); } } f_close (&F); f_mount(0, NULL); Delay(2000000); } 76

KẾT LUẬN

Sau ba tháng miệt mài nghiên cứu cùng với những nỗ lực không biết mệt mỏi, em đã hoàn thành đồ án: “Nghiên cứu xây dựng hệ thống đo - điều khiển nhiệt độ lưu trên thẻ nhớ SD dùng vi điều khiển 32bit” đúng thời hạn. Do chip vi điều khiển 32bit là một công nghệ mới, lần đầu tiên em được tiếp xúc nên khi nghiên cứu tìm hiểu em gặp rất nhiều khó khăn. Vì thế trong thời gian ngắn với khối lượng công việc lớn (hình thành ý tưởng, chọn lựa linh kiện, vẽ mạch, lập trình….) dù em đã cố gắng nhưng đồ án không thể tránh khỏi những thiếu sót. Em mong nhận được những ý kiến đóng góp và sự chỉ bảo tận tình của các thầy cô để giúp em nâng cao kiến thức và có cái nhìn sâu hơn, toàn diện hơn.

Đồ án có tính thực tiễn cao, được ứng dụng nhiều trong công nghiệp cũng như trong sinh hoạt: ứng dụng trong các lò ấp trứng, trong công nghiệp chế biến thực phẩm, trong công nghiệp luyện kim…

Kết quả thử nghiệm trên thực tế cho thấy nhiệt độ đo được gần sát với nhiệt độ môi trường,.. những hạn chế này nguyên nhân một phần do các yếu tố: quán tính nhiệt cao, độ phân giải của cảm biến chưa cao, chưa có chế độ chống nhiễu hợp lý…

Hướng phát triển của đồ án sau này có thể sử dụng nhiều kênh khác nhau của ADC để đo nhiệt độ của các bộ phận khác nhau của một hệ thống nhiệt…

Em xin gửi lời cảm ơn chân thành đến các thầy, cô trong khoa Kỹ

Thuật Điều Khiển, đặc biệt là sự hướng dẫn nhiệt tình của thầy giáo Nguyễn Văn Xuân đã giúp đỡ tạo điều kiện để em hoàn thành đồ án.

TÀI LIỆU THAM KHẢO * Tài liệu tiếng Việt:

Kỹ thuật lập trình Văn Thế Minh - Nhà xuất bản giáo dục

Cấu trúc lập trình họ 8051 Nguyễn Tăng Cường - Học viện kỹ thuật quân sự. • Các trang web: www.dientuvietnam.net www.alldatasheet.com www.st.com www.arm.vn 78

MỤC LỤC

LỜI NÓI ĐẦU...1

Chương 1 CÁC PHƯƠNG PHÁP ĐO NHIỆT ĐỘ...2

1.1. Các phương pháp đo và điều khiển nhiệt độ ...2

1.2. Các phương pháp điều khiển nhiệt độ ...8

Chương 2 TỔNG QUAN VỀ ARM...16

2.1. Lịch sử phát triển của ARM...17

2.2. ARM Cortex...18

2.3. Bộ xử lý Cortex và đơn vị xử lý trung tâm Cortex...20

2.4. Kiến trúc hệ thống ARM Cortex...27

2.5. Vi điều khiển ARM Cortex STM32F103 RD...31

2.6. Thẻ nhớ SD...42

Chương 3 THIẾT KẾ MẠCH ĐO VÀ CHƯƠNG TRÌNH ĐO...54

3.1. Sơ đồ khối...54

3.2. Sơ đồ mach nguyên lý...71

3.3. Lưu đồ thuật toán và Chương trình...72

KẾT LUẬN...77

TÀI LIỆU THAM KHẢO...78

Một phần của tài liệu nghiên cứu xây dựng hệ thống đo - điều khiển nhiệt độ lưu trên thẻ nhớ sd dùng vi điều khiển 32bit (Trang 72 - 79)

Tải bản đầy đủ (DOC)

(87 trang)
w