1. Trang chủ
  2. » Giáo án - Bài giảng

BÀI GIẢNG VI ĐIỀU KHIỂN NÂNG CAO

40 193 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 40
Dung lượng 1,58 MB

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

Nội dung

- 2 chân XTAL1, XTAL2 các chân t ạo bộ dao động ngoài cho vi điều khiển, các chân này được nối với thạch anh hay sử dụng loại 4M, tụ gốm 22p.. -Khi PORTx được ghi giá trị 1 khi các chân

Trang 1

Bài giảng lớp VĐK nâng cao

Bài 1,2Giới thiệu chung :

1.Kiến trúc vi điều khiển:

AVR là họ vi điều khiển mới, với những tính năng rất mạnh đ ược tíchhợp trong chip của hãng Atmel theo công nghệ RISC, nó ngang hang với các

họ vi điều khiển khác cùng thời như PIC, Pisoc, nhưng đư ợc sử dụng phổbiến hơn

Do ra đời muộn hơn nên họ vi điều khiển AVR có nhiều tính năng

mới đáp ứng tối đa nhu cầu của ng ười sử dụng, nhất là những ai đã sử dụngqua các dòng vi điều khiển trước nó như họ 89xx sẽ có sự so sánh to àn diện

hơn về độ ổn định, khả năng tích hợp v à sự mềm dẻo trong việc lập tr ìnhAVR, đặc biệt là nó có bộ phần mềm lập trình vô cùng tiện dụng

Một số tính năng mới của họ AVR:

- Giao diện SPI đồng bộ

- Các đường dẫn vào/ra (I/O) lập trình được

- Giao tiếp I2C

- Bộ biến đổi ADC 10 bit

- Các chế độ tiết kiệm năng lượng như sleep, stand by vv

- Giao tiếp USART vv

2 Giới thiệu vi điều khiển Atmega16L:

Trang 2

Lựa chọn vi điều khiển Atmelga16L về tính năng có đầy đủ tính năngcủa họ AVR, về giá thành so với các loại khác thì giá thành là vừa phải khinghiên cứu và làm các công việc ứng dụng tới vi điều khiển.

- Giao tiếp SPI

- Giao diện I2C

- Có 8 kênh ADC 10 bit

- 1 bộ so sánh analog

- Có 4 kênh băm xung PWM

- 3 bộ timer/counter , 2 bộ timer/counter 0,2 ở chế độ 8 bit, 1 bộtimer/counter1 16 bit

- 1 bộ định thời Watchdog

- 1 bộ truyền nhận UART lập tr ình được

Cách sử dụng và tính năng các chân khi thi ết kế mạch:

- Vcc và GND 2 chân cấp nguồn cho vi điều khiển hoạt động

- Reset đây là chân reset c ứng khởi động lại mọi hoạt động của hệ thống

- 2 chân XTAL1, XTAL2 các chân t ạo bộ dao động ngoài cho vi điều khiển,

các chân này được nối với thạch anh (hay sử dụng loại 4M), tụ gốm (22p)

- Chân Vref thường nối lên 5v(Vcc), nhưng khi sử dụng bộ ADC thì chân

này được sử dụng làm điện thế so sánh, khi đó chân n ày phải cấp cho nóđiện áp cố định, có thể sử dụng diod zener:

5V DIODE BREAKDOWN

10K R

Vref

Hình 3.7 Cách nối chân Vref

- Chân Avcc thường được nối lên Vcc nhưng khi sử dụng bộ ADC

thì chân này được nối qua 1 cuộn cảm l ên Vcc với mục đích ổn

Trang 3

3 Phần mềm lập trình codevision:

Lựa chọn phần mềm : đây là phần mềm được sử dụng rất rộng dải bởi

nó được xây dựng trên nền ngôn ngữ lập trình C, phần mềm được viếtchuyên nghiệp hướng tới người sử dụng bởi sự đơn giản, mềm dẻo, sự hổ trợcao các thư viện có sẳn

4.Thiết lập cổng vào ra:

Sơ đ ồ bố trí chân của AVR ATMEGA16

Khi xem xét đến các cổng I/O của AVR thì ta phải xét tới 3 thanh ghi bit

Thực hiện việc trao đổi giữa VĐK AVR với b ên ngoài thì cần phải biết là

đang thực hiện xuất/nhập

Thanh ghi DDRx đảm nhận việc xuất/nhập của các chip AVR

-Các bit DDxnđể truy cập cho địa chỉ xuất nhập DDRx

-Các bit PORTxnđể truy cập tại địa chỉ xuất nhập PORTx.

-Các bit PINxnđể truy cập tại địa chỉ xuất nhập PINx

-BitDDxn trong thanh ghi DDRx dùng để điều khiển hướng dữ liệu của cácchân của cổng này.Khi ghi giá trị logic ‘0’ vào bất kì bit nào của thanh ghinày thì nó sẽ trở thành lối vào,còn ghi ‘1’ vào bit đó thì nó trở thành lối ra

Trang 4

-PINx là các cổng chỉ để đọc,các cổng này có thể đọc trạng thái logic của

PORTx.PINx không phải là thanh ghi,việc đọc PINx cho phép ta đọc giá trịlogic trên các chân của PORTx.chú ý PINx không phải là thanh ghi,việc đọc

PINxcho phép ta đọc giá trị logic trên các chân củaPORTx.

-Khi PORTx được ghi giá trị 1 khi các chân có cấu tạo nh ư cổng ra thì điện

trở kéo là chủ động(được nối với cổng).Ngắt điện trở kéo ra, PORTx được

ghi giá trị 0 hoặc các chân có dạng nh ư cổng ra.Các chân của cổng l à 3 trạngthái khi 1 điều kiện reset là tích cực thậm chí xung đồng hồ không hoạt

động

-NếuPORTxn được ghi giá trị logic ‘1’ khi các chân của cổng có dạn g như

chân ra ,các chân có giá trị ‘1’.Nếu PORTxn ghi giá trị ‘0’ khi các chân củacổng có dạng như chân ra thì các chân đó có giá trị ‘0’

Các cổng của AVR đều có thể đọc,ghi

Để thiết lập 1 cổng là cổng vào ,ra thì ta tác động tới các bit DDxn,

PORTxn,PINxn.ta có thể thiết lập để từng bit l àm cổng vào,ra cứ không chỉvới cổng,như vậy ta có thể sử lí tới từng bit,đây chính l à điểm mạnh của cácdòng Vi điều khiển 8 bit

Trang 5

Ta có thể sử dụng CodeWizardAVR để thiết lập cho cá c PORTxPinx.

Ví dụ như trên hình:các bit 0,1,2,4,7 của PORTA làm chân ra có trở kéo,còncác bit còn lại làm chân vào

Khi đã thiết lập xong thì các bit 0,1,2,4,7 sẽ có thể xuất dữ liệu ra còn các bit

còn lại có thể nhận dữ liệu vào

Trang 6

PORTA

Còn nếu ta thiết lập PORTA làm cổng vào và giá trị hiện thời của PORTA:

PORTA

Thì sau câu lệnh đọc giá trị từ PORTA: x=PINA;th ì x=0x55;

Khi thiết lập PORTA làm cổng ra thì khi reset giá trị của PORTA là

sử dụng được,ta có thể so sánh vấn đề n ày với dòng vi điều khiển AT8951

Nếu ở AT8951,ta thiết lập PORTx làm cổng vào nhưng ta lại sử dụng vớimục đích là cổng ra,thì PORTx sẽ bị hỏng qua vài lần cho kết quả đúng,và

do ta quên không thiết lập PORTx là cổng ra,câu lệnh cũng không khác n ên

ta không phát hiện ra.Khi ta thiết lập PORTx làm cổng vào nhưng lai sửdụng với mục đích cổng ra th ì do câu lệnh không khác nên ta cũng khôngphát hiện ra

Ví dụ:

PORT0=0xFF;(PORT0 là cổng vào)sau đó ta lại xuất dữ liệu ra

PORT0=0xAA;có thể ban đầu vẫn cho kết quả đúng nh ưng chắc chắn

PORT0 sẽ bị hỏng.

PORT0=0x00;(PORT0 là cổng ra)sau đó ta lại nhập dữ liệu v ào

x=PORT0;thì ta cũng không đọc được.

Còn ở AVR,khi muốn nhập dữ liệu vào thì phải thiết lập PORTx là cổng vào

và dùng câu lệnh:

X=PINx;//không dùng x=PORTx

Trang 7

Thực hành lập trình:

Chúng ta tiếp tục chương trình với các bài thực hành:

Thiết lập chương trình nháy LED

5VCC R_470

D3

LED chan VDK

Thiết lập chương trình như sau: Theo sơ đồ nguyên lý như hình vẽ cácchân của vi điều khiển được nối với đèn LED qua 1 trở kéo lên 5v chúng tathiết lập chương trình cho đèn LED nháy liên tục ở các tần số khác nhau

{

// Declare your local variables here

// Input/Output Ports initialization

// Port A initialization

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out

// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out

// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0

// Place your code here

// cho tat ca cac LED deu sang

PORTA=0x00;

PORTB=0x00;

PORTC=0x00;

Trang 8

PORTD=0x00;

delay_ms(300);// delay 300ms, thoi gian de lay co the thay doi

// tat toan bo cac LED

Như vậy trong đoạn chương trình trên nếu chúng ta dưa thời gian delay dưới

dạng biến số có thể thay đổi được tg , ta sẽ thấy thời gian đóng ngắt củaLED sẽ thay đổidelay_ms(tg).

Trước hết ta khai báo biến tgnhư sau:

unsigned char tg; khai báo biến tg dạng nguyên từ 0->255

/*****************************************************

This program was produced by the

CodeWizardAVR V1.24.6 Professional

Automatic Program Generator

© Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l.

Chip type : ATmega16L

Program type : Application

Clock frequency : 8.000000 MHz

Memory model : Small

External SRAM size : 0

Data Stack size : 256

*****************************************************/

//************* bai tap giao tiep voi phim bam*******************

//***************************************************************

/*

noi dung bai tap la thet lap phim bam o PINA

kiem tra cac phim bam de lua chon chuong trinh

*/

Trang 9

#include <delay.h>

unsigned char tg; // bien thoi gian la tg co the thay doi

// Declare your global variables here

// Phan main thiet lap cac thanh ghi sau khi khoi tao chuong trinh

void main(void)

{

// Declare your local variables here

// Input/Output Ports initialization

// Port A initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTA=0x00;

DDRA=0x00; // thiet lap PORTA lam dau vao

// Clock source: System Clock

// Clock value: Timer 0 Stopped

// Mode: Normal top=FFh

// OC0 output: Disconnected

Trang 10

// Clock value: Timer 1 Stopped

// Mode: Normal top=FFFFh

// OC1A output: Discon.

// OC1B output: Discon.

// Noise Canceler: Off

// Input Capture on Falling Edge

// Timer 1 Overflow Interrupt: Off

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

// Clock source: System Clock

// Clock value: Timer 2 Stopped

// Mode: Normal top=FFh

// OC2 output: Disconnected

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

SFIOR=0x00;

tg=50; // gan bien tg=50 ban dau

Trang 11

// Place your code here

while(!PINA.0) // lenh kiem tra ne u PINA.0=0

Trang 12

Bài 3:Giới thiệu bộ biến đổi ADC, bộ nhớ EEPROM nội AVR :

+ADC cho LM35 và biến trở -> hiển thị LCD.+Các biến EEPROM nội AVR-> hiển thị LCD

Chức năng của LCD trong mạch Robocon củng như trong hầu hếtcác mạch (các bộ điều khiển khác) hầu như chủ yếu đảm nhân vai tròhiển thị các thông số , các thông tin mà chúng ta muốn nhập vào haycác thông tin sử lý mà bộ điều khiển đang hoạt động đựoc hiển thị ramàn hình , giúp chúng ta giao tiếp gần hơn với quá trình hoạt đôngcủa hệ thống

loại LCD mà chúng ta sử dụng là loại SD-DM1602A , loại nàyhiện nay được Trung Quốc sản xuất đây là LCD 2 dòng mổi dòng 16

kí tự , nó có 16 chân như hình vẽ:

Trong đó chúng ta có thể thấy 2 chân 1,2 được cấp nguồn cho LCDhoạt động , chân thứ 3 (chân VSS) được nối vào đầu ra của biến trởdùng để điều chỉnh độ tương phản (phải điều chỉnh VSS hợp lý thìLCD mới hiển thị được) 2 chân 15,16 đây là 2 chân cấp nguồn dung

để bật đèn của LCD từ chân 4->14 là các chân điều khiển được nối

với vi điều khiển , các chân 4,5,6 được nối với vi điều khiển để điềukhiển LCD hoạt động , các chân còn lại là các chân Data dung đểtruyền nhận dữ liệu chúng ta có thể truyền Data 8 bit một hoặc 4 bitmột , như trong mạch của chúng ta truyền Data dưới dạng 4 bit mộtviệc truyền dưới dạng 4bit hoặc 8 bit phải được thiết lập cả phần cúng

và phần mềm

bien tro

LCD

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

PB2

PB5(MOSI)

VCC

PB1 GND

Trang 13

Để sử dụng tính năng ADC của Atmega 16L chúng ta cần phải

thiết kế phần cứng của Vi điều khiển như sau :

Chân AVCC chân này bình thường khi thiết kế mạch chúng ta đưa lên5vcc nhưng khi trong mạch có sử dụng các kênh ADC của phần cứngthì chúng ta phải nối chân này lên 5vcc qua 1 cuộn cảm nhằm mục

đích cấp nguồn ổn định cho các kênh (đầu vào) của bộ biến đổi ,

Chân AREF chân này cần cấp 1 giá trị điện áp ổn định được sửdụng làm điện áp tham chiếu , chính vì vậy điện áp cấp vào chân nàycần ổn định vì khi nó thay đổi làm giá trị ADC ở các kênh thu được bịtrôi (thay đổi ) không ổn định với 1 giá trị đầu vào chúng ta có côngthức tính như sau:

ADCx=(V_INT*1024)/ AREF

chỉ dựa vào công thức chúng ta củng có thể thấy giá trị ADCx tỉ lệthuận với điện áp vào V_INT(đây chính là V_OUT của Sensor)

Giá trị ADC thu được từ các kênh được lưu vào 2 thanh ghi ADCH và

ADCL khi sử dụng chúng ta phải đọc giá trị từ các thanh ghi này, khi sửdụng ở ché độ 8 bít thì chỉ lưu vào thanh ghi ADCL

Bộ nhớ EEPROM để có thể lưu được giá trị của nó khi RESET

chương trình hoặc khi tắt nguồn

Ví dụ :

eeprom unsigned char VA_T;

eeprom unsigned char VB_T;

eeprom unsigned char TG_T;

chúng ta thực hiẹn quá trình khởi tạo ADC và LCD như sau:

Hinh1,2

Trang 14

Hình 3,4

Hình 5,6

Trang 15

Giao diện chương trình

Hình 7

Như vậy trong bài này chúng ta sử dụng PORTA làm đầu vào, 8 chân

của PORTA sử dụng làm 8 kênh đầu vào ADC

Giá trị Analog thu được từ LM35, biến trở ta đưa vào các chân

PINA.0,PINA.1 tương ứng với các kênh 0,1 cua bộ biến đổi ADC

Đọc giá trị ADC từ thanh ghi ADCH,ADCL nh ư sau : m=adc_data[x]

x chính là dịa chỉ kênh đầu vào(0->7)

Các lệnh chính khi sử dụng, điều khiển LCD như :

Trang 16

Thuật toán in ra số liệu dưới dạng giá trị nguyên như sau:

void lcd_putnum(unsigned char d)

đầu tiên chúng ta viết chương trình hiển thị số liệu dưới dạng char

void lcd_putnum(unsigned char d)

Trang 17

lcd_putsf("bai tap ADC");

lcd_gotoxy(5,1);

delay_ms(100);

};

Bài toán thứ 2 chúng ta cần giải quyết đó là sử dụng các biến dưới dạng bộ

nhớ EEPROM như sau:

Khai báo biến 2 biến tg1,tg2 như sau:

eeprom unsigned char tg1=10;

Trang 18

Bài 4 Giao tiếp I2C: RTC với DS1307 v à 24Cxx.

Việc giao tiếp theo chuẩn I2C sẽ trở nên đơn giản hơn với AVR

Hình 4.1

Trang 19

Hình 4.3

Giao diện chương trình chính

Hình 4.4

Trang 20

Sau khi thiết lập chương trình xong chúng ta viết thêm đoạn chương trìnhhiển LCD như sau:

void lcd_putnum(unsigned char d)

lcd_putchar(48+i); //

}

rtc_set_time(9,10,11) ;// hàm đặt thời gian

chúng ta còn có 1 hàm nữa là hàm đoc thời gian

Trang 21

Chúng ta thiết lập I2C với 24cxx:

Hinh4.5

Hinh4.6

Trang 22

Viết các hàm đọc và ghi EEROM :

//=========================================

=========

unsigned char eeprom_read(unsigned int address);

void eeprom_write(unsigned int address, unsigned char data);

//=========================================

=========

/* read a byte from the EEPROM */

unsigned char eeprom_read(unsigned int address)

Trang 23

/* write a byte to the EEPROM */

void eeprom_write(unsigned int address, unsigned char data)

for(i=0; i<100; i++) eeprom_write(i,i);

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

Trang 24

Bài 5,6 Giao tiếp qua cổng RS232 , giao tiếp VB với th ư viện MSCOMM

Giao tiếp theo chuẩn RS232 là chuẩn giao tiếp nối tiếp dung định dạngkhông đồng bộ, được sử dụng khá phổ biến trong việc kết nối với máy tính

và các thiết bị ngoại vi khác MSComm là 1 điều khiển dung trong truyềnthông nối tiếp, các tính chất của MSComm được dung để thiết lập giao tiếpvới các ngoại vi qua cổng RS232 , MSComm được hổ trợ cho cả VB và VC, nhưng đối với VB thì nó trở nên đơn giản hơn

Các thiết lập và lập trình:

- thiết lập với codevision:

o

Gao diện chính

Trang 25

Chúng ta có 2 hàm cơ bản mà phần mềm đã khởi tạo đó là hàm

putchar() và hàm getchar()

Sau khi khởi tạo xung chúng ta có thể viết chương trình truyền vànhận như sau:

Khai báo biến s: unsigned char s

Sau đó trong chương trình chúng ta thực hiện các lệnh truyền và nhậncác dữ liệu như sau:

Trang 26

Và chúng ta có thể truyền và nhận giá trị sau khi đã nạp chương trình.

- Cách xây dựng giao diện giao tiếp với máy tính thông qua cổng RS232 và sử dụng thư viện MSComm như sau:

Giao diện chương trình:

Trang 27

Trên thanh công cụ ta xây dựng giao diện :

Sau đó xây dựng các thuộc tính:

Trang 28

Viết chương trình cho các thuộc tính như sau: Private Sub Form_Load()

Private Sub Truyen_Click()

Trang 29

Bài 7,8 Gới thiệu các loại động c ơ:

- Động cơ DC, động cơ bước

- Mạch điều khiẻn và lập trình

- Động cơ DC thường có rất nhiều loại khác nhau về công suất, kiểu dáng và

cấu tạo như có các loại động cơ công suất lớn ứng dụng trong các công việc

chịu tải lớn, hay các loại động cơ có hay không có hộp giảm tốc tuỳ thao

ứng dụng cụ thể mà chúng ta có cách lựa chọn động cơ cho hợp lí

- Động cơ Bước(Step motor)

II NGUYÊN LÝ ĐIỀU KHIỂN CÁC LOẠI ĐỘNG CƠ BƯỚC.

2.1 Động cơ bước nam châm vĩnh cửu PM.

S3 S2

L4

L3

L2 L1

S1

S3 S2

L4

L3

L2 L1

Hình 2.1 Nguyên lý hoạt động của độngcơ PM

Để đơn giản ta xét động cơ PM có hai cặp cuộn pha Hai cặp cuộn pha được lắp

đối xứng qua rotor Cực tính của các cuộn đối xứng là giống nhau Sơ đồ nối dây các

cuộn pha đuợc chỉ ra như hình vẽ.

Ngày đăng: 05/09/2019, 11:21

TỪ KHÓA LIÊN QUAN

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

w