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

Chọn 1 hệ thống nhúng trong thực tế. Thuyết minh giải thích các tính năng và các thành phần của hệ thống nhúng đó.

17 22 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

Định dạng
Số trang 17
Dung lượng 205,09 KB

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

Nội dung

Các chân của port này có nhiều chức năng, các công dụng chuyển đổi có liên hệ với các đặc tính đặc biệt của 8951 Chân 18, 19 nối với thạch anh tạo thành mạch tạo dao động cho VĐK.. Bộ ch

Trang 1

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG

KHOA ĐIỆN TỬ I

BÀI TẬP LỚN MÔN HỌC

HỆ THỐNG NHÚNG

Sinh viên thực hiện:

Cao Tiến Đạt- B18DCDT043 Phan Quý Dương- B18DCDT035 Bùi Văn Công- B18DCDT021

Lê Văn Minh- B18DCDT154 Nhóm môn học: 01

Giảng viên hướng dẫn: Nguyễn Ngọc Minh

Hà Nội – 2021

Trang 2

I Phần 1 : Chọn 1 hệ thống nhúng trong thực tế Thuyết minh giải

thích các tính năng và các thành phần của hệ thống nhúng đó.

Hệ thống điều khiển cửa tự động

1 Vi điều khiển AT89C51:

Chức năng các chân của 8951:

- 8951 có tất cả 40 chân có chức năng như các đường xuất nhập Trong

đó có 24 chân có tác dụng kép (có nghĩa 1 chân có 2 chức năng), mỗi đường có thể hoạt động như đường xuất nhập hoặc như đường điều khiển hoặc là thành phần của các bus dữ liệu và bus địa chỉ

a.Các Port:

Port 0 :

- Port 0 là port có 2 chức năng ở các chân 32 – 39 của 8951 Trong các thiết kế cỡ nhỏ không dùng bộ nhớ mở rộng nó có chức năng như các đường IO Đối với các thiết kế cỡ lớn có bộ nhớ mở rộng, nó được kết hợp giữa bus địa chỉ và bus dữ liệu

Port 1:

- Port 1 là port IO trên các chân 1-8 Các chân được ký hiệu P1.0, P1.1, P1.2, … có thể dùng cho giao tiếp với các thiết bị ngoài nếu cần Port 1 không có chức năng khác, vì vậy chúng chỉ được dùng cho giao tiếp với các thiết bị bên ngoài

Trang 3

Port 2 :

- Port 2 là 1 port có tác dụng kép trên các chân 21 - 28 được dùng như các đường xuất nhập hoặc là byte cao của bus địa chỉ đối với các thiết bị dùng bộ nhớ mở rộng

Port 3:

- Port 3 là port có tác dụng kép trên các chân 10 - 17 Các chân của port này có nhiều chức năng, các công dụng chuyển đổi có liên hệ với các đặc tính đặc biệt của 8951

Chân 18, 19 nối với thạch anh tạo thành mạch tạo dao động cho VĐK

Tần số thạch anh thường dùng trong các ứng dụng là: 11.0592Mhz ( giao tiếp 20 với cổng com máy tính ) và 12Mhz tần số tối đa 24Mhz.Tần

số càng lớn VĐK xử lí càng nhanh

2 IC tạo ổn áp 7805( IC ổn áp 5v):

IC ổn áp 7805: Đầu vào >7V, đầu ra 5V 500mA Mạch ổn áp: cần cho VĐK vì nếu nguồn cho VĐK không ổn định thì sẽ treo VĐK, không chay đúng hoặc reset liên tục, thậm chí là chết chíp

3 Bộ chuyển đổi tương tự sang số ADC:

ADC0804 có chức năng như sau:

- CS (Chip select): Chân số 1, là chân chọn chip, đầu vào tích cực mức

Trang 4

thấp được sử dụng để kích hoạt Chip ADC0804 Để truy cập tới

ADC0804 thì

chân này phải được đặt ở mức thấp

- RD (Read): Chân số 2, là chân nhận tín hiệu vào tích cực ở mức thấp Các bộ chuyển đổi của 0804 sẽ chuyển đổi đầu vào tương tự thành số nhị phân và giữ nó ở một thanh ghi trong Chân RD được sử dụng để cho phép đưa dữ liệu đã được chyển đổi tới đầu ra của ADC0804 Khi CS = 0 nếu có một xung cao xuống thấp áp đến chân RD thì dữ liệu ra dạng số 8 bit được đưa tới tới các chân dữ liệu (DB0 – DB7)

- WR (Write): Chân số 3, đây là chân vào tích cực mức thấp được dùng báo cho ADC biết để bắt đầu quá trình chuyển đổi Nếu CS = 0 khi WR tạo ra xung cao xuống thấp thì bộ ADC0804 bắt đầu quá trình chuyển đổi giá trị đầuvào tương tự Vin thành số nhị phân 8 bit Khi việc chuyển đổi hoàn tất thì chân INTR được ADC hạ xuống thấp

- CLK IN và CLK R: CLK IN (chân số 4), là chân vào nối tới đồng hồ ngoài được sử dụng để tạo thời gian Tuy nhiên ADC0804 c ũng có một

bộ tạo xung đồng hồ riêng Để dùng đồng hồ riêng thì các chân CLK IN

và CLK R (chân số 19) được nối với một tụ điện và một điện trở Khi đó tần số được xác định bằng biểu thức:

F=Với R = 10 kΩ, C = 150 pF và tần số f = 606 kHz và thời gian

chuyển đổi là 110 µs

- Ngắt INTR (Interupt): Chân số 5, là chân ra tích cực mức thấp Bình

Trang 5

thường chân này ở trạng thái cao và khi việc chuyển đổi tương tự số hoàn tất thì nó chuyển xuống mức thấp để báo cho CPU biết là dữ liệu chuyển đổi sẵnsàng để lấy đi Sau khi INTR xuống thấp, cần đặt CS = 0 và gửi một xung cao xuống thấp tới chân RD để đưa dữ liệu ra

- Vin (+) và Vin (-): Chân số 6 và chân số 7, đây là 2 đầu vào tương tự

vi sai, trong đó Vin = Vin(+) – Vin(-) Thông thường Vin(-) được nối tới đất và Vin(+) được dùng làm đầu vào tương tự và sẽ được chuyển đổi về dạng số

- Vcc: Chân số 20, là chân nguồn nuôi +5V Chân này còn được dùng làm điện áp tham chiếu khi đầu vào Vref/2 để hở

- Vref/2: Chân số 9, là chân điện áp đầu vào được dùng làm điện áp

tham chiếu Nếu chân này hở thì điện áp đầu vào tương tự cho ADC0804 nằm trong dải 0 đến +5V Tuy nhiên, có nhiều ứng dụng mà đầu vào tương tự áp đến Vin khác với dải 0 đến +5V Chân Vref/2 được dùng để thực hiện các điện áp đầu ra khác 0 đến +5V

D0 – D7, chân số 18 – 11, là các chân ra dữ liệu số (D7 là bit cao nhất MSB và D0 là bit thấp nhất LSB) Các chân này được đệm ba trạng thái và dữ liệu đã được chuyển đổi chỉ được truy cập khi chân CS = 0 và chân RD đưa xuống mức thấp Để tính điện áp đầu ra ta tính theo công thức sau:

Dout = Vin / Kích thước bước

- Một số đặc tính kĩ thuật của ADC 0804

+ Không yêu cầu một giao diện logic nào để ghép nối với VXL

Trang 6

+ Thời gian chuyển đổi nhỏ hơn 100µs.

+ Có bộ dao động nội

- Nguyên lý hoạt động của ADC 0804:

ADC bắt đầu hoạt động khi chân CS và WR đồng thời ở mức thấp (

tích cực) Chân INTR được reset ở mức cao ( không tích cực ) Tín hiệu Analog ở các chân VIN+ và VIN- được đưa vào lấy mẫu và mã hóa trong

8 xung clock nối của 0804 Sau đó chân INTR được chuyển xuống mức thấp (tích cực ) báo hiệu cho VDK quá trình chuyển đổi ADC đã hoàn tất VDK đưa tín hiệu mức thấp vào chân RD của 0804 để lấy dữ liệu ra ( chân RD và CS có thể được nôí đất ) Quá trình chuyển đổi tiếp theo lại bắt đầu khi CS và WR nhận được tín hiệu ở mức thấp ( từ VĐK )

4 Cảm biến:

Hồng ngoại có bản chất là sóng điện từ nằm ngoài vùng ánh sáng nhìn thấy, có bước sóng lớn hơn bước sóng của tia đỏ (λ > 760 nm) Sóng hồng ngoại được tạo ra dễ dàng bằng cách tạo dao động cho diode phát hồng ngoại chuyên dụng Do đó hồng ngoại được ứng dụng trong nhiều lĩnh vực Tia hồng ngoại với bản chất sóng điện từ nên có thể phản xạ khi gặp

bề mặt vật thể

5 Mạch cầu H:

Mạch cầu H là một mạch điện giúp đảo chiều dòng điện qua một đối

Trang 7

tượng Đối tượng là động có DC mà chúng ta cần điều khiển, mục đích điều khiển là cho phép dòng điện qua đối tượng theo chiều A đến B hoặc

B đến A, từ đó giúp đổi chiều quay của động cơ

6 Động cơ 1 chiều:

Tác dụng của động cơ là: thực hiện lực kéo để đóng, mở cửa theo một chương trình được lập trình sẵn

7 Máy biến áp:

Do sử dụng nhiều mức điện áp để cung cấp cho các thiết bị hoạt động nên ta cần có máy biến áp

II Phần 2:

Đồng hồ bấm giờ sử dụng timer hiển thị led 7 thanh

Có 3 nút nhấn tương ứng 3 chế độ: stop, start, rs - 4 led

1 Code:

#include "stm32f10x.h" // Device header

#include "stm32f10x_gpio.h" // Keil::Device:StdPeriph

Drivers:GPIO

#include "stm32f10x_rcc.h" // Keil::Device:StdPeriph

Drivers:RCC

#include "stm32f10x_tim.h" // Keil::Device:StdPeriph

Drivers:TIM

#include "stdio.h"

Trang 8

unsigned int Cnt = 0;

unsigned int Sec = 0;

unsigned int Led7_Font[10]=

{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};// Ma Anode chung

int Flag = 0;

int Stop_New = 1, Stop_Old = 1;

int Start_New = 1, Start_Old = 1;

int Rst_New = 1, Rst_Old = 1;

void SEG_Config(void);// cau hinh chan du lieu: a,b,c,d, ,dp

void SEG_control(void); // cau hinh chan dieu khien

void SEG_Disp(void);

void timer_Init(void);

void Delay_ms(unsigned int _time);

void Button_Config(void);

void Button_Stop(void);

void Button_Start(void);

Trang 9

int main(){

SEG_Config();

SEG_control();

Button_Config();

timer_Init();

TIM_ITConfig(TIM2, TIM_IT_Update, DISABLE); TIM_Cmd(TIM2,DISABLE);

while(1){

SEG_Disp();

}

}

void Delay_ms(unsigned int _time){

volatile unsigned int i,j;

for(i = 0; i < _time; i++){

for(j = 0; j < 601; j++){}

}

}

Trang 10

// cau hinh chan ma hoa led

void SEG_Config(void){

GPIO_InitTypeDef seg_init;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

seg_init.GPIO_Mode = GPIO_Mode_Out_PP;

seg_init.GPIO_Speed = GPIO_Speed_50MHz;

seg_init.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_Init(GPIOA,&seg_init);

GPIOA->ODR = 0xff;

}

// cau hinh chan dieu khien

void SEG_control(void){

GPIO_InitTypeDef seg_control;

Trang 11

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

seg_control.GPIO_Mode = GPIO_Mode_Out_PP;

seg_control.GPIO_Speed = GPIO_Speed_50MHz;

seg_control.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 |

GPIO_Pin_14 | GPIO_Pin_15;

GPIO_Init(GPIOB,&seg_control);

}

void Button_Config(void){

GPIO_InitTypeDef button;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);

button.GPIO_Mode = GPIO_Mode_IPU;

button.GPIO_Speed = GPIO_Speed_50MHz;

button.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5; GPIO_Init(GPIOB,&button);

GPIO_Write(GPIOB, 0xff);

Trang 12

void Button_Start(void){

Start_Old = Start_New;

Start_New = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_3); if(Start_Old == 1 && Start_New == 0){

TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); TIM_Cmd(TIM2,ENABLE);

}

}

void Button_Stop(void){

Stop_Old = Stop_New;

Stop_New = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_4); if(Stop_Old == 1 && Stop_New == 0){

TIM_ITConfig(TIM2, TIM_IT_Update, DISABLE); TIM_Cmd(TIM2,DISABLE);

}

Trang 13

void Button_Rst(void){

Rst_Old = Rst_New;

Rst_New = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_5); if(Rst_Old == 1 && Rst_New == 0){

Cnt = 0;

Sec = 0;

TIM_ITConfig(TIM2, TIM_IT_Update, DISABLE); TIM_Cmd(TIM2,DISABLE);

}

}

void SEG_Disp(void){

Button_Stop();

Button_Start();

Button_Rst();

if(Cnt==100){

Sec++;

Trang 14

if(Sec==60){

Sec = 0;

Cnt = 0;

}

Cnt = 0;

}

// hien thi hang don vi cua tich tac

GPIO_ResetBits(GPIOB, GPIO_Pin_15); GPIO_Write(GPIOA,Led7_Font[Cnt%10]); Delay_ms(1);

GPIO_SetBits(GPIOB, GPIO_Pin_15);

// hien thi hang chuc vi cua tich tac

GPIO_ResetBits(GPIOB, GPIO_Pin_14); GPIO_Write(GPIOA,Led7_Font[Cnt/10]); Delay_ms(1);

GPIO_SetBits(GPIOB, GPIO_Pin_14);

// hien thi hang don vi cua giay

Trang 15

GPIO_ResetBits(GPIOB, GPIO_Pin_13);

GPIO_Write(GPIOA,Led7_Font[Sec%10]);

GPIO_WriteBit(GPIOA,GPIO_Pin_7,Bit_RESET); Delay_ms(1);

GPIO_SetBits(GPIOB, GPIO_Pin_13);

// hien thi hang chuc vi cua giay

GPIO_ResetBits(GPIOB, GPIO_Pin_12);

GPIO_Write(GPIOA,Led7_Font[Sec/10]);

Delay_ms(1);

GPIO_SetBits(GPIOB, GPIO_Pin_12);

}

/*

function: 10ms

*/

void timer_Init(void){

TIM_TimeBaseInitTypeDef timer_init;

Trang 16

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

timer_init.TIM_CounterMode = TIM_CounterMode_Up; timer_init.TIM_Period = 1000 - 1;

timer_init.TIM_Prescaler = 80- 1;

timer_init.TIM_RepetitionCounter = 0;

TIM_TimeBaseInit(TIM2,&timer_init);

TIM_ClearFlag(TIM2,TIM_FLAG_Update);

NVIC_EnableIRQ(TIM2_IRQn);

}

void TIM2_IRQHandler(){

if(TIM_GetITStatus(TIM2, TIM_IT_Update)!=RESET){

Cnt++;

}

TIM_ClearITPendingBit(TIM2,TIM_IT_Update);

}

2 Mô phỏng:

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

TỪ KHÓA LIÊN QUAN

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