2.5.1 Vi điều khiển AVR
AVR là họ vi điều khiển 8 bit theo công nghệ mới, với những tính năng rất mạnh được tích hợp trong chip của hãng Atmel theo công nghệ RISC, AVR mạnh ngang hàng với các họ vi điều khiển 8 bit khác như PIC, PISOC. Ngoài ra, 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, so với họ 8051, 89xx thì nó độ ổn định, khả năng tích hợp, sự mềm dẻo trong việc lập trình và tiện lợi hơn.
a.Tính năng 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 kênh băm xung PWM.
- Các chế độ tiết kiệm năng lượng như Sleep, Stand by..vv. - Bộ định thời Watchdog.
- 3 bộ Timer/Counter 8 bit. - 1 bộ Timer/Counter 16 bit. - 1 bộ so sánh Analog. - Bộ nhớ EEPROM. - Giao tiếp USART,...
b.Cấu trúc bộ nhớ AVR
AVR có cấu trúc Harvard, trong đó đường truyền cho bộ nhớ dữ liệu (Data memory bus) và đường truyền cho bộ nhớ chương trình (Program memory bus) được tách riêng. Data memory bus chỉ có 8 bit và được kết nối với hầu hết các thiết bị ngoại vi, với tệp thanh ghi (Register file). Trong khi đó đường truyền cho bộ nhớ chương trình có độ rộng 16 bits và chỉ phục vụ cho thanh ghi lệnh (Instruction registers).
Hình 2.21 Cấu trúc bộ nhớ của AVR
Bộ nhớ chương trình (Program memory): Là bộ nhớ Flash lập trình được, hay còn gọi là Application section. Thực chất, Application section bao gồm 2 phần: phần chứa các mã lệnh cho hoạt động của Chip (Instruction) và phần chứa các Vector ngắt (Interrupt vectors). Các Vector ngắt nằm ở phần đầu của Application section (từ địa chỉ 0x0000) và dài đến bao nhiêu tùy thuộc vào loại chip. Phần chứa instruction nằm liền sau đó, chương trình viết cho chip phải được nạp vào phần này.
Bộ nhớ dữ liệu (Data memory): Chứa các thanh ghi quan trọng nhất của chip, việc lập trình cho Chip phần lớn là truy cập bộ nhớ này. Bộ nhớ dữ liệu trên các Chip AVR có độ lớn khác nhau tùy theo mỗi Chip, tuy nhiên về cơ bản phần bộ nhớ này được chia thành 5 phần:
Hình 2.22 Thanh ghi 8 bit
+ Phần 1: Là phần đầu tiên trong bộ nhớ dữ liệu, phần này bao gồm 32 thanh ghi có tên gọi là Register file, hay đơn giản là các thanh ghi. Tất cả các thanh ghi này đều là các thanh ghi 8 bits .
Hình 2.23 Register file
Tất cả các Chip trong họ AVR đều bao gồm 32 thanh ghi Register file có địa chỉ tuyệt đối từ 0x0000 đến 0x001F. Mỗi thanh ghi có thể chứa giá trị dương từ 0 đến 255 hoặc các giá trị có dấu từ -128 đến 127 hoặc mã ASCII của một ký tự nào đó. Các thanh ghi này được đặt tên theo thứ tự là R0 đến R31. Chúng được chia thành 2 phần, phần 1 bao gồm các thanh ghi từ R0 đến R15 và phần 2 là các thanh ghi R16 đến R31.
Tất cả 32 thanh ghi Register file đều có đặc điểm chung sau: Được truy cập trực tiếp trong các lệnh. Các toán tử, phép toán thực hiện trên các thanh ghi này chỉ cần 1 chu kỳ xung Clock. Register file được kết nối trực tiếp với bộ xử lí trung tâm (CPU) của chip. Và chúng là nguồn chứa các số hạng trong các phép toán và cũng là đích chứa kết quả trả lại của phép toán.
Tóm lại 32 thanh ghi Register file của AVR được xem là một phần của CPU, vì thế chúng được CPU sử dụng trực tiếp và nhanh chóng, để gọi các thanh ghi này, chúng ta không cần gọi địa chỉ mà chỉ cần gọi trực tiếp tên của chúng. Register file thường được sử dụng như các toán hạng của các phép toán trong lúc lập trình.
+ Phần 2: RAM tĩnh, nội (Internal SRAM), là vùng không gian cho chứa các biến (tạm thời hoặc toàn cục) trong lúc thực thi chương trình, vùng này tương tự các
thanh RAM trong máy tính nhưng có dung lượng khá nhỏ (khoảng vài Kb, tùy thuộc vào loại chip).
+ Phần 3: RAM ngoại (External SRAM), các Chip AVR cho phép người sử dụng gắn thêm các bộ nhớ ngoài để chứa biến, vùng này thực chất chỉ tồn tại khi nào người sử dụng gắn thêm bộ nhớ ngoài vào chip.
+ Phần 4: EEPROM (Electrically ereasable programmable ROM) là một phần quan trọng của các Chip AVR mới, vì là ROM nên bộ nhớ này không bị xóa ngay cả khi không cung cấp nguồn nuôi cho chip, rất thích hợp cho các ứng dụng lưu trữ dữ liệu. Bộ nhớ EEPROM được tách riêng và có địa chỉ tính từ 0x0000.
c. Cách thức hoạt động của Vi điều khiển AVR
Cấu trúc bên trong của một AVR. Ta thấy rằng 32 thanh ghi Register file được nối trực tiếp với ALU bằng 2 line. Vì thế mà ALU có thể truy suất trực tiếp tới 2 thanh ghi Register file trong cùng một chu kỳ xung Clock.
Các lệnh được chứa trong bộ nhớ chương trình Flash memory dưới dạng các thanh ghi 16 bit. Bộ nhớ chương trình được truy cập trong mỗi chu kỳ xung clock và mỗi lệnh chứa trong bộ nhớ chương trình được đưa vào trong thanh ghi lệnh Instruction register.
Các thanh ghi lệnh tác động và lựa chọn Register file cũng như RAM cho ALU thực thi. Trong lúc thực thi chương trình, địa chỉ của dòng lệnh đang thực thi được quyết định bởi một bộ đếm chương trình PC (Program counter). Đó chính là cách thức hoạt động của AVR.
AVR có ưu điểm là hầu hết các lệnh đều được thực thi trong 1 chu kỳ xung Clock, vì vậy có thể nguồn Clock lớn nhất cho AVR có thể nhỏ hơn một số vi điều khiển khác như PIC nhưng thời gian thực thi vẫn nhanh hơn.
Hình 2.24 Cấu trúc bên trong của AVR
d.Cổng vào ra của Vi điều khiển AVR
Cổng vào ra là một trong số các phương tiện để Vi điều khiển giao tiếp với các thiết bị ngoại vi. Mỗi chip có số cổng vào ra khác nhau. Các cổng vào ra của vi điều khiển AVR đều là cổng vào ra hai chiều có thể định hướng được. Tất cả các chân của cổng đều được nối với điện trở kéo lên, ta có thể cho phép hay không cho phép điện trở này hoạt động.
Mỗi một cổng vào ra của vi điều khiển được liên kết với ba thanh ghi PORTx, DDRx, PINx. Ba thanh ghi này sẽ được phối hợp với nhau để điều khiển hoạt động của cổng.
Hình 2.25 Cấu trúc chân trong PORT của Vi điều khiển AVR
Thanh ghi DDRx: Đây là thanh ghi 8 bit có thể đọc ghi, có chức năng điều khiển hướng của cổng (là lối ra hay lối vào). Khi một bit của thanh ghi này được set
lên 1 thì có nghĩa một chân tương ứng với nó được thiết lập là ngõ ra. Ngược lại nếu 1 bit của thanh ghi DDRx là 0 thì chân tương ứng với nó được thiết lập là ngõ vào.
Hình 2.26 Thanh ghi DDRA
Thanh ghi PORTx: Đây là thanh ghi 8 bit có thể đọc ghi, đây là thanh ghi dữ liệu của PORTx. Nếu một bit của thanh ghi này được thiết lập là 1 thì điện trở treo ở chân tương ứng của nó được kích hoạt, ngược lại nếu nếu bit này được thiết lập là 0 thì điện trở treo ở chân tương ứng sẽ không được kích hoạt, cổng ở trạng thái cao trở.
Hình 2.27 Thanh ghi PORTA
Thanh ghi PINx: Đây là thanh ghi chỉ đọc chứ không ghi, đây là địa chỉ trong bộ nhớ I/O kết nối trực tiếp các chân của cổng. Khi ta đọc PORTx tức là ta đọc dữ liệu được chốt trong PORTx, còn khi ta đọc PINx thì giá trị logic hiện thời ở chân của cổng tương ứng được đọc.
Hình 2.28 Thanh ghi PINA
Bảng 2.1 Cấu hình các chân của cổng
PORTxn là bit thứ n của thanh ghi PORTx.
Dấu “x” ở cột thứ 3 là để chỉ giá trị logic là tùy ý.
e. Bộ định thời Timer/counter của AVR
Trong mỗi chip của họ AVR được tích hợp số bộ định thời khác nhau. Có hai loại bộ định thời là bộ định thời 8 bit và bộ định thời 16 bit.
Hình Sơ đồ khối bộ Timer/Counter 8bit
Các thanh ghi có trong một bộ Timer (ở đây ta chọn bộ Timer 0 làm ví dụ): Thanh ghi TCCR0: Là thanh ghi điều khiển bộ Timer/Counter0, thanh ghi điều khiển này gồm 8 bit: FOC0, WGM00, COM01, COM00, WGM01, CS02, CS01, CS00 như hình vẽ:
Hình 2.30 Thanh ghi TCCR0
+ Bit 3 (WGM01) và bit 6 (WGM00) là các bit chọn chế độ hoạt động của Timer.
Bảng 2.2: Bảng chọn chế độ hoạt động của Timer
+ Bit 4 (COM00) và bit 5 (COM01) là các bít lựa chọn chế độ so sánh kết hợp. Nó điều khiển các ngõ ra so sánh ở pin OC0. Nếu một hoặc cả hai bit COM00 và COM01 bằng 1 thì ngõ ra OC0 thực hiện chức năng nhập dữ liệu từ các pin I/O kết nối với nó.
Bảng 2.3: Chế độ so sánh không PWM
+ Bit 2 (CS02) bit 1 (CS01) và bit 0 (CS00) là các bit chọn nguồn xung để sử dụng cho bộ Timer hoạt động.
Thanh ghi TCNT0: Giá trị của thanh ghi này tăng giảm một đơn vị sau mỗi chu kỳ xung Clock. Thay đổi giá trị thanh TCNT0 khi đang hoạt động sẽ kéo theo những lỗi khi so sánh giữa hai thanh ghi TCNT0 và OCR0.
Hình 2.31 Thanh ghi TCNT0
Thanh ghi OCR0: Thanh ghi OCR0 chứa một giá trị 8 bit, giá trị này được so sánh liên tục với giá trị của thanh ghi Counter TCNT0. Phép so sánh này có thể được sử dụng để tạo ra hành động ngắt ở ngõ ra hay tạo xung ở ngõ ra tại chân OC0.
Hình 2.32 Thanh ghi 0CR0
Thanh ghi TIMSK (Timer/Counter Interrupt Mask Register): Là thanh ghi mặt nạ ngắt.
Hình 2.33 Thanh ghi mặt nạ ngắt
+ Bít 1 (OCIE0): Khi bít này được thiết lập lên bằng 1 thì cho phép một ngắt so sánh.
+ Bít 0 (TOIE0): Khi bít này được thiết lập lên bằng 1 thì cho phép một ngắt tràn. Thanh ghi cờ ngắt TIFR (Timer/Counter interrupt flag register):
+ Bit 1 (OCF0): Bit này được set lên mức 1 khi xảy ra sự so sánh khớp giữa thanh ghi TCCN0 và thanh ghi 0CR0. Cờ OCF0 sẽ được tự động xóa đi khi ngắt tương ứng được thực thi.
+ Bit 0 (TOV0): Được set lên mức 1 khi bộ định thời tràn và nó được xóa khi ngắt tương ứng được thực thi.
f. Các chế độ hoạt động của bộ Timer
Chế độ hoạt động thường: Đây là chế độ hoạt động đơn giản nhất của Timer. Bộ đếm sẽ liên tục đếm tăng lên cho đến khi vượt quá giá trị lớn nhất TOP và sau đó sẽ được khởi động lại tại giá trị BOTTOM. Trong các hoạt động thông thường thì cờ tràn sẽ được thiết lập khi giá trị trong Timer đạt giá trị không và không bị xoá đi. Tuy nhiên nếu mà ngắt tràn được chấp nhận thì cờ ngắt sẽ tự động bị xoá khi ngắt được thực hiện. Giá trị trong Timer có thể được viết vào bất cứ lúc nào.
Chế độ so sánh: Đây là chế độ mà giá trị trong Timer luôn được so sánh với giá trị trong thanh ghi ORC. Khi giá trị trong Timer bằng giá trị trong thanh ghi ORC thì giá trị trong Timer sẽ bị xoá đi. Giá trị trong ORC đóng vai trò là giá trị TOP cho bộ đếm. Chế độ này cũng cho phép tạo ra tần số so sánh ở đầu ra. Tuy nhiên trong chế độ này nếu giá trị mới ghi vào thanh ghi ORC mà nhỏ hơn giá trị tức thời của bộ đếm thì thì một so sánh sẽ bị lỡ, khi đó bộ đếm sẽ đếm đến giá trị lớn nhất sau đó rơi xuống giá trị 0 trước khi so sánh tiếp theo xuất hiện.
Robot được trang bị vi điều khiển ATmega16.
Hình 2.36 ATmega 16 2.5.2 Thiết kế board mạch điều khiển
2.5.2.1 Mạch vi điều khiển
Linh kiện :
1. Vi điều khiển AT16.
2. 2 tụ bi 18p. 3. Thạch anh 11,0592MHz. 4. Nút nhấn. 5. Pin cắm. 6. Tụ hóa 4,7uF. 7. Diode. 8. LM 7805. 9. Tụ hóa 2200uF/50V. 10.Tụ hóa 1100uF/50V.
Hình 2.38 Sơ đồ mạch in Vi điều khiển
2.5.2.2 Mạch công suất và đảo chiều động cơ
Theo mạch thì nguồn 12V từ acquy cấp cho động cơ. Phần công suất để điều khiển động cơ là linh kiện Mosfet IRF540. Theo thiết kế mạch có phần cách ly giữa khối Vi điều khiển và công suất. Sử dụng opto quang để nhận tín hiệu điều khiển từ Atmega, đồng thời kích đóng mở IRF 540. Phần đảo chiều động cơ ta sử dụng relay12 (VDPDT).
Các chế độ hoạt động của mạch như sau :
1. Chế độ thuận: tín hiệu điều chế độ rộng xung PWM từ vi điều khiển kích chân 1 của opto, chân 3 và chân 4 của opto thông nhau dẫn kích mở IRF từ chân số 1, chân 2 và chân 3 thông nhau động cơ quay thuận.
2. Chế độ đảo: tín hiệu điện áp từ vi điều khiển kích chân 1 của opto, chân 3 và chân 4 thông nhau dẫn kích mở Transistor C1815
Hình 2.40 Sơ đồ mạch in khối công suất và đảo chiều 2.5.2.2.1 Linh kiện IRF540
Động cơ giúp cho robot di chuyển có dòng tiêu thụ tối đa là 2A, yêu cầu hoạt động chính xác và công suất đủ để robot di chuyển linh hoạt. Sử dụng MOSFET-N là IRF 540 là nhiệm vụ đóng mở động cơ.
Hình 2.41 Mô tả IRF 540
Như vậy, IRF540 có thể tải được dòng lớn 33A đủ để đáp ứng cho động cơ, điện trở giữa cực nguồn (S) và cực máng (D) khi mở rất nhỏ 44 (mΩ) nên sụt áp trên hai cực DS cũng nhỏ cỡ 1V. Thêm vào đó, trong IRF đã có sẵn một diode Schottky để bảo vệ dòng ngược từ S sang D mà có thể làm hỏng MOSFET. IRF540 mở hoàn toàn ở 10V.
2.5.2.2.2 Relay 12V DPDT
Trong mạch được thiết kế sử dụng relay 12VDPDT đảm nhiệm đảo chiều động cơ.
Hình 2.42 Mô tả nguyên lý Relay
Nguyên lý đóng mở của relay phụ thuộc vào cấp nguồn cho cuộn dây và tiếp điểm. Cuộn dây được cuộn trên một lõi sắt từ. Khi cuộn dây được cấp điện, từ trường xung quanh cuộn và lõi tập trung lại tạo thành nam châm điện hút thanh kim
loại tiếp xúc với tiếp điểm. Khi cuộn dây ngắt điện từ trường biến mất và thanh kim loại được loxo phản hồi hỗ trợ, đưa tiếp điểm về vị trí ban đầu.
Hình 2.43 Relay Ormon sử dụng 2.5.2.3 Mạch công suất động cơ chổi và hút bụi
Mạch sử dụng MOSFET IRF540 để kích đóng mở động cơ chổi quét và hút bụi. Nguồn acquy 12V cấp cho động cơ. Tín hiệu điều khiển từ Vi điều khiển qua khối cách ly là opto quang. Khi opto quang được đóng sẽ kích mở IRF540, động cơ được đóng. Trong mạch có mắc diode để bảo vệ IRF540 chống sụt áp mạnh trên chân C của IRF.
Hình 2.45 Sơ đồ mạch in điều khiển chổi 2.5.2.4 Bộ điều khiển Remote
2.5.2.4.1 Tìm hiểu về hồng ngoại
Hồng ngoại là sự bức xạ với tần số mắt ta không nhìn thấy được, tuy nhiên ta cũng cảm nhận về nó thông qua sự cảm ứng nhiệt trên da.
Hồng ngoại trong điện tử thật thú vị, bởi vì nó tạo ra một cách dễ dàng và không bị ảnh hưởng bởi nhiễu điện từ. Do đó nó được sử dụng rộng rãi và tiện lợi trong thông tin và điều khiển. Nhiều thứ có thể phát ra hồng ngoại, bất kỳ thứ gì có bức xạ nhiệt đều có khả năng đó. Bao gồm cơ thể của chúng ta, lò vi song,…Vì vậy để cho phép sự truyền thông hiệu quả khi sử dụng hồng ngoại và tránh những tín hiệu nhiễu không mong muốn phải sử dụng một khóa để báo cho đầu thu biết đâu là tín hiệu có ích, đâu là nhiễu.
Do đó, điều khiển từ xa dung để điều chế hồng ngoại phát đi với một tần số riêng biệt. Khoảng tần số hay sử dụng là 30→60 (KHz ), tốt nhất là khoảng
36→38 (KHz). Hồng ngoại được phát ra theo xung nhịp với tần số 36000 lần