Thiết kế mạch điều khiển động cơ bước sử dụng chip atmega16, đo tốc độ động cơ bằng encoder sau đó hiển thị lên màn hình LCD. Về điều khiển: điều khiển quay nhanh chậm,đảo chiều quay của động cơ bằng các nút bấm. Đo tốc độ động cơ: sử dụng encoder để đo. Hiển thị: hiển thị thông số tốc độ động cơ (vòng/phút), chiều quay của động cơ lên màn hình LCD 16*2. Thiết kế mạch hoạt động và mạch in trên phần mềm Altium designer, lập trình code trên phần mềm Code AVR sau đó nạp code vào chip qua phần mềm Progisp
CƠ SỞ LÝ THUYẾT
Đưa ra chức năng của hệ thống
Một chiếc xe chạy với tốc độ quá cao có thể gây nguy hiểm cho người tham gia giao thông Nhiều người thường không chú ý đến việc kiểm soát tốc độ của mình Để khắc phục tình trạng này, hệ thống sẽ được cài đặt để gửi cảnh báo bằng còi và đèn LED khi người lái xe vượt quá tốc độ cho phép.
Phân tích bài toán
1.2.1 Hướng thực hiện đề tài
Có nhiều phương pháp để điều chỉnh tốc độ của động cơ step, trong đó có việc sử dụng PWM Nhóm sinh viên của chúng tôi đã áp dụng nút nhấn để giao tiếp với vi điều khiển ATmega16 nhằm kiểm soát tốc độ động cơ một cách hiệu quả.
Trong bài viết này, chúng tôi sử dụng nút nhấn và module A4988 kết hợp với vi điều khiển ATmega16 để tính toán và điều chỉnh tốc độ một cách chính xác.
Hình 1.1: Sơ đồ khối toàn mạch
Chức năng của từng khối
Khối nguồn cung cấp điện áp 12V cho động cơ và 5V ổn định cho toàn bộ mạch là rất quan trọng Sự ổn định của điện áp và dòng điện ảnh hưởng trực tiếp đến hiệu suất hoạt động của tất cả các IC trong mạch.
1.3.2 Khối điều khiển động cơ
Module L298 có thể điều khiển 2 động cơ DC hoặc 1 động cơ bước, có 4 lỗ nằm ở
4 góc thuận tiện cho người sử dụng cố định vị trí của module
Có gắn tản nhiệt chống nóng cho IC, giúp IC có thể điều khiển với dòng đỉnh đạt 2A
IC L298N được gắn với các đi ốt trên board giúp bảo vệ vi xử lý chống lại các dòng điện cảm ứng từ việc khởi động/ tắt động cơ
• Driver: L298N tích hợp hai mạch cầu H
• Dòng tối đa cho mỗi cầu H là :2A
• Điện áp của tín hiệu điều khiển : +5 V ~ +7 V
• Dòng của tín hiệu điều khiển : 0 ~ 36MA
• Công suất hao phí : 20W (khi nhiệt độ T = 75 °C)
Hình 1.3: Hình ảnh thực tế của LM35
Hình 1.4: Khối điều khiển động cơ 1.3.3 Khối xử lý trung tâm
Khối xử lý trung tâm nhận tín hiệu từ cảm biến và thực hiện tính toán để hiển thị số liệu trên LED 7 thanh Đồng thời, nó cũng phát tín hiệu điều khiển các khối trong mạch nhằm tối ưu hóa quá trình xử lý vấn đề.
Hình 1.5: Khối xử lý trung tâm
1.3.3.1 Sử dụng vi điều khiển AVR Atmega16
ATmega16 là một vi điều khiển 8 bit dựa trên kiến trúc RISC, nổi bật với khả năng thực hiện mỗi lệnh trong một chu kỳ xung clock Nhờ đó, ATmega16 có thể đạt tốc độ lên tới 1 MIPS cho mỗi MHz.
ATmega16 là một vi điều khiển mạnh mẽ với 16KB bộ nhớ Flash cho phép đọc trong khi ghi, 512 byte bộ nhớ EEPROM và 1KB bộ nhớ SRAM Nó sở hữu 32 thanh ghi chức năng chung, 32 chân vào ra, cùng với 3 bộ định thời/bộ đếm ATmega16 cũng hỗ trợ ngắt nội và ngắt ngoại, giao tiếp USART, giao tiếp nối tiếp 2 dây, và có 8 kênh ADC 10 bit, mang lại nhiều tính năng cho các ứng dụng nhúng.
ATmega16 hỗ trợ đầy đủ các chương trình và công cụ phát triển hệ thống như: trình dịch C, macro assemblers, chương trình mô phỏng/sửa lỗi,
Hình 1.6: Hình ảnh thực tế của Atmega16
Hình 1.7: Sơ đồ chân của Atmega16 a Cấu trúc nhân
CPU của ATmega16 đảm bảo hoạt động chính xác của các chương trình nhờ khả năng truy cập bộ nhớ, thực hiện tính toán, điều khiển thiết bị ngoại vi và quản lý ngắt hiệu quả.
AVR sử dụng cấu trúc Harvard, cho phép tách biệt bộ nhớ và các bus cho chương trình và dữ liệu Các lệnh được thực hiện trong một chu kỳ xung clock, với bộ nhớ chương trình được lưu trữ trong bộ nhớ Flash.
Hình 1.8: Cấu trúc tổng quát của Atmega16
ALU tương tác trực tiếp với thanh ghi chức năng chung và thực hiện các phép toán trong một chu kỳ xung clock Hoạt động của ALU được phân loại thành ba loại chính: đại số, logic và theo bit.
- Thanh ghi trạng thái: Đây là thanh ghi trạng thái có 8 bit lưu trũ trạng thái của ALU sau các phép số học và logic
Hình 1.9: Thanh ghi trạng thái Trong đó:
Bit 0 – C (Cờ nhớ): Là bit quan trọng trong các phép toán đại số hoặc logic Khi thực hiện phép cộng có nhớ như ADC R1, R2, nếu R1 chứa giá trị 200 và R2 chứa 70, kết quả thực tế là 270 Tuy nhiên, do R1 chỉ có thể lưu tối đa 255 (vì có 8 bit), giá trị thực tế lưu trong R1 sẽ là 14 Đồng thời, cờ C sẽ được thiết lập lên 1, thể hiện rằng có một giá trị vượt quá khả năng lưu trữ của R1.
• Bit 1 – Z (Zero Flag: Cờ 0): Cờ này được set nếu kết quả phép toán đại số hay phép Logic bằng 0
• Bit 2 – N (Negative Flag: Cờ âm): Cờ này được set nếu kết quả phép toán đại số hay phép Logic là số âm
Cờ tràn của bù 2 (Bit 3 – V) có thể gây khó khăn cho người mới hiểu vì nó liên quan đến kiến thức về số nhị phân và phần bù.
• Bit 4 – S (Sign Bit: Bit dấu): Bit S là kết quả phép XOR giữa 1 cờ N và V,
Cờ H (Half Carry Flag) là một cờ nhớ quan trọng trong một số phép toán đại số và phép logic, đặc biệt hiệu quả khi thực hiện các phép toán với số BCD.
• Bit 6 – T (Bit Copy Storage): được sử dụng trong 2 Instruction BLD (Bit
LoaD) và BST (Bit STorage)
Bit 7 – I (Global Interrupt Enable) cho phép kích hoạt ngắt toàn bộ trong chương trình Để sử dụng ngắt, bit này cần được thiết lập thành 1 Sau khi thiết lập, các bit ngắt riêng cần được kích hoạt để sử dụng loại ngắt mong muốn Hai lệnh SEI và CLI được sử dụng để thiết lập và xóa bit I.
- Các thanh ghi chức năng chung
Trong họ chip AVR, có 32 thanh ghi Register File với địa chỉ từ 0x0000 đến 0x001F, cho phép lưu trữ giá trị từ 0 đến 255 hoặc từ -128 đến 127, cũng như mã ASCII của ký tự Các thanh ghi được đánh số từ R0 đến R31, chia thành hai phần: phần 1 từ R0 đến R15 và phần 2 từ R16 đến R31.
• Được truy cập trực tiếp trong các instruction
• 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
• 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
- Con trỏ ngăn xếp (SP):
+ Chứa địa chỉ của ngăn nhớ đỉnh ngăn xếp (ngăn xếp có chiều từ đáy lên đỉnh ngược với chiều tăng của địa chỉ)
+ Khi cất thêm một thông tin vào ngăn xếp: o Nội dung của SP tự động giảm o Thông tin được cất vào bắt đầu từ ngăn nhớ trỏ bởi SP
+ Khi lấy một thông tin ra khỏi ngăn xếp: o Thông tin được lấy ra bắt đầu từ ngăn nhớ trỏ bởi SP o Nội dung của SP tự động tăng
+ Khi ngăn xếp rỗng: SP trỏ vào đáy ngăn xếp
Hình 1.11: Minh họa hoạt động của SP
Ngắt là cơ chế giúp thiết bị ngoại vi thông báo cho CPU về tình trạng sẵn sàng trao đổi dữ liệu Chẳng hạn, khi bộ truyền nhận UART nhận được một byte, nó sẽ kích hoạt cờ RXC để thông báo cho CPU, hoặc khi truyền xong một byte, cờ TX sẽ được thiết lập Khi nhận tín hiệu ngắt, CPU tạm dừng công việc hiện tại, lưu vị trí chương trình (con trỏ PC) vào ngăn xếp, rồi chuyển đến vector phục vụ ngắt để thực hiện chương trình đó Khi gặp lệnh RETI (return from interrupt), CPU sẽ lấy lại giá trị PC từ ngăn xếp và tiếp tục công việc trước đó.
Khi có nhiều yêu cầu ngắt cùng lúc, CPU sẽ lưu trữ các cờ báo ngắt và xử lý chúng theo thứ tự ưu tiên Nếu trong quá trình thực hiện một ngắt mà xuất hiện ngắt mới, sẽ có hai trường hợp xảy ra: nếu ngắt mới có mức ưu tiên cao hơn, nó sẽ được phục vụ trước; ngược lại, nếu ngắt mới có mức ưu tiên thấp hơn, nó sẽ bị bỏ qua.
Bộ nhớ ngăn xếp nằm trong vùng SRAM bắt đầu từ địa chỉ 0x60 trở lên Để truy cập SRAM, ta sử dụng các con trỏ X, Y, Z, trong khi con trỏ SP được dùng để truy nhập theo kiểu ngăn xếp Con trỏ SP là một thanh ghi 16 bit, được truy cập như hai thanh ghi 8 bit riêng biệt với địa chỉ SPL: 0x3D (IO/SRAM) và SPH: 0x3E/0x5E.
THIẾT KẾ VÀ THI CÔNG
Nguyên lý hoạt động
Nguồn điện cung cấp cho mạch giúp các thiết bị hoạt động hiệu quả Cảm biến nhiệt độ LM35 đo nhiệt độ môi trường và truyền dữ liệu đến vi điều khiển Atmega16 để thực hiện tính toán.
Nhiệt độ được hiển thị trên LED 7 thanh
Nếu nhiệt độ đo được nằm ngoài so với mức ngưỡng đã được cài đặt, VĐK sẽ đưa ra tín hiệu điểu khiển bật thiết bị cảnh báo
Các mức ngưỡng có thể cài đặt bằng nút bấm.
Thiết kế nguyên lý và mạch in
2.2.1 Các phần mềm sử dụng
2.2.1.1 Phần mềm thiết kế mạch Altium Designer
Altium hiện nay là phần mềm vẽ mạch điện tử phổ biến và mạnh mẽ tại Việt Nam Nó không chỉ hỗ trợ hiệu quả trong việc thiết kế mạch mà còn giúp quản lý mạch và trích xuất file thống kê linh kiện một cách dễ dàng.
Altium Designer là phần mềm tích hợp cung cấp đầy đủ công nghệ và chức năng cần thiết cho phát triển sản phẩm điện tử, bao gồm thiết kế hệ thống bo mạch và FPGA, phát triển phần mềm nhúng, và bố trí mạch in (PCB) Phần mềm này giúp thống nhất quy trình phát triển, cho phép người dùng quản lý hiệu quả mọi khía cạnh trong môi trường làm việc tích hợp Nhờ vào khả năng quản lý dữ liệu thiết kế hiện đại, Altium Designer hỗ trợ tạo ra các sản phẩm điện tử thông minh với chi phí thấp hơn và thời gian phát triển rút ngắn.
2.2.1.2 Phầm mềm lập trình Code VisionAVR
Chương trình cho VĐK được viết bằng ngôn ngữ lập trình C thông qua phần mềm Code VisionAVR
Hình 2.2: Giao diện phần mềm lập trình Code VisionAVR
Thiết kế và thi công
Hình 2.3: Sơ đồ nguyên lý
Hình 2.4: Sơ đồ mạch in Bottom Layer
Hình 2.5: Sơ đồ mạch in Top Layer
Lưu đồ thuật toán
Lưu đồ thuật toán điều khiển:
Chương trình code
/******************************************************* This program was created by the
� Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l http://www.hpinfotech.com
AVR Core Clock frequency: 16.000000 MHz
// define Pin unsigned int encoder = 0 , encodertruoc = 0 , time, enc, Che_Do = 0; int tocdo, dem , x; eeprom unsigned int a;
// External Interrupt 0 service routine interrupt [EXT_INT0] void ext_int0_isr(void)
// Place your code here encoder++;
// Timer 0 overflow interrupt service routine interrupt [TIM0_OVF] void timer0_ovf_isr(void) { if(time < 1600)
{ enc = encoder - encodertruoc; tocdo = enc * 23; encodertruoc = encoder; time = 0;
// Declare your global variables here void main(void)
// Declare your local variables here
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=Out Bit2=Out Bit1=Out Bit0=Out
DDRA=(0