Kết quả của phép so sánh có thể được sử dụng bởi bộ sinh sóng để tạo ramột đầu ra PWM hoặc tần số biến đổi trên các chân so sánh đầu ra OCxA và OCxB.. Một sự trùng khớp có thể được sử dụ
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Khoa Cơ học kỹ thuật và Tự động hóa
Thiết kế bộ đo tốc độ của động cơ hiển thị bằng màn hình tinh thể lỏng
Ngày 19 tháng 10 năm 2024
Trang 2Mục lục
1.1 Điều khiển động cơ 3
1.1.1 Phương pháp điều khiển động cơ bằng PWM 3
1.1.2 AVR PWM 4
1.2 Hiển thị thông tin 6
1.2.1 Hiển thị bằng màn hình LCD1602 4-bit mode 6
1.2.2 AVR GPIO 8
1.3 Đo tốc độ động cơ 9
1.3.1 Phát hiện chuyển động bằng Encoder 9
1.3.2 AVR External Interrupt 10
2 Mô phỏng và thực hành 12 2.1 Sơ đồ kết nối mạch 12
2.2 Cấu trúc chương trình 13
2.3 Mô hình thử nghiệm 13
2.4 Mô phỏng với Proteus 8.13 14
2.5 Tổng hợp và thực thi phần mềm 15
3 Kết luận và đánh giá 16 3.1 Kết quả 16
3.2 Kiến nghị nâng cấp 16
Trang 31 Cơ sở lý thuyết
PWM hay Pulse Width Modulation được sử dụng để điều chỉnh điện áp từ nguồn cungcấp đến thiết bị tiêu thụ điện bằng cách bật tắt ở tần số cao Khi thời gian bật của tínhiệu tăng hoặc giảm thì điện áp trung bình của tín hiệu cũng tăng hoặc giảm Tín hiệunày cung cấp mức công suất tương đương thấp hơn, tuy nhiên vẫn giữ được đầy đủ điện
áp trong suốt thời gian bật Hai tham số điều khiển chính của tín hiệu PWM là tần sốchuyển đổi (tần số bật tắt) và thời gian bật tương đối (duty cycle)
Tần số của PWM: Tốc độ thay đổi, hay tần số xung PWM phụ thuộc vào thiết bịtải được sử dụng với PWM Ví dụ với một motor hoặc thiết bị gia nhiệt, giá trị của tần
số có thể nhỏ cỡ kHz, nhưng đối với các thiết bị như LED hoặc relay, giá trị tần số cầnphải cao hơn tầm chục, trăm kHz Yếu tố quyết định chính là độ nhạy của thiết bị tải sửdụng PWM
PWM duty cycle: Duty cycle là giá trị tương đối của tín hiệu có giá trị cao trong
1 chu kỳ của xung tín hiệu (đo bằng phần trăm) Nếu duty cycle = 100%, tín hiệu sẽ ởmức cao trong suốt chu kỳ tín hiệu, nếu giá trị duty cycle = 50%, tín hiệu sẽ ở mức caotrong nửa xung và có giá trị thấp trong khoảng thời gian còn lại cho đến hết chu kỳ mộtxung
Hình 1: Pulse Width Modulation
Trang 41.1.2 AVR PWM
ATmega328P có ba bộ định thời (Timer/Counter) là Timer0, Timer1 và Timer2
Các thanh ghi Timer/Counter (TCNTx) và thanh ghi so sánh đầu ra (OCRxA vàOCRxB) là các thanh ghi 8-bit(Timer0, Timer 2) hoặc 16bit(Timer1) Tín hiệu yêu cầungắt đều có thể thấy trong thanh ghi cờ ngắt của timer (TIFRx) Tất cả các ngắt đềuđược điều chỉnh riêng lẻ bằng thanh ghi mặt nạ ngắt của timer (TIMSKx) TIFRx vàTIMSKx không được sử dụng
Timer/Counter được cung cấp xung clock nội bộ thông qua bộ phân tần, hoặc bởimột nguồn đồng hồ bên ngoài trên chân T0 Timer/Counter không hoạt động khi không
có xung clock
Các thanh ghi so sánh đầu ra (OCRxA và OCRxB) luôn được so sánh với giá trị củaTimer/Counter Kết quả của phép so sánh có thể được sử dụng bởi bộ sinh sóng để tạo ramột đầu ra PWM hoặc tần số biến đổi trên các chân so sánh đầu ra (OCxA và OCxB)
Sự kiện so sánh trùng khớp cũng sẽ thiết lập cờ so sánh (OCFxA hoặc OCFxB) mà cóthể được sử dụng để tạo ra một đầu ra
Timer/Counter0 được sử dụng trong bài thực hành
Cách thanh ghi của Timer/Counter0:
1 TCCR0A – Timer/Counter Control Register A
Các bit COM0A1:0 điều khiển hành vi của chân so sánh đầu ra (OC0A) Nếu mộthoặc cả hai bit COM0A1:0 được thiết lập, đầu ra OC0A sẽ ghi đè lên chức năngbình thường của chân I/O mà nó được kết nối Tuy nhiên, cần lưu ý rằng bit trongthanh ghi hướng dữ liệu (DDR) tương ứng với chân OC0A phải được thiết lập đểkích hoạt bộ điều khiển đầu ra Tương tự, các bit COM0B1:0 điều khiển hành vicủa chân so sánh đầu ra (OC0B)
Các bit WGM1:0 kết hợp với bit WGM02 có trong thanh ghi TCCR0B, các bit nàyđiều khiển chuỗi đếm của bộ đếm, nguồn giá trị tối đa (TOP) của bộ đếm và loạisinh sóng được sử dụng Các chế độ hoạt động được hỗ trợ bởi đơn vị Timer/Counterbao gồm: Normal Mode, Clear Timer on Compare Match (CTC) Mode và hai loạichế độ điều chế độ rộng xung (Fast PWM Mode và Phase Correct PWM Mode)
2 TCCR0B – Timer/Counter Control Register B
Trang 5Bit FOC0A chỉ hoạt động khi các bit WGM chỉ định chế độ không phải PWM Tuynhiên, bit này phải được thiết lập thành 0 khi ghi vào TCCR0B khi đang hoạt động
lỡ một sự trùng khớp so sánh giữa TCNT0 và các thanh ghi OCR0x
4 OCR0A – Output Compare Register A
Thanh ghi so sánh đầu ra A chứa một giá trị 8-bit được so sánh liên tục với giá trị
bộ đếm (TCNT0) Một sự trùng khớp có thể được sử dụng để tạo ra một ngắt sosánh đầu ra, hoặc để tạo ra một tín hiệu sóng trên chân OC0A
5 OCR0B – Output Compare Register B
Thanh ghi so sánh đầu ra B chứa một giá trị 8-bit được so sánh liên tục với giá trị
bộ đếm (TCNT0) Một sự trùng khớp có thể được sử dụng để tạo ra một ngắt sosánh đầu ra, hoặc để tạo ra một tín hiệu sóng trên chân OC0B
6 TIMSK0 – Timer/Counter Interrupt Mask Register
Bit 2 – OCIE0B: Kích hoạt ngắt so sánh đầu ra B của Timer/Counter0 Khi bitOCIE0B được ghi thành 1
Bit 1 – OCIE0A: Kích hoạt ngắt so sánh đầu ra A của Timer/Counter0 Khi bitOCIE0A được ghi thành 1
Bit 0 – TOIE0: Kích hoạt ngắt tràn của Timer/Counter0 Khi bit TOIE0 được ghithành 1
Trang 67 TIFR0 – Timer/Counter 0 Interrupt Flag Register
Bit 2 – OCF0B: Cờ trùng khớp so sánh đầu ra B của Timer/Counter0 Bit OCF0Bđược thiết lập khi xảy ra một sự trùng khớp so sánh giữa Timer/Counter và dữliệu trong OCR0B OCF0B được xóa bởi phần cứng khi thực thi vector xử lý ngắttương ứng
Bit 1 – OCF0A: Cờ trùng khớp so sánh đầu ra A của Timer/Counter0 Bit OCF0Ađược thiết lập khi xảy ra một sự trùng khớp so sánh giữa Timer/Counter0 và dữliệu trong OCR0A OCF0A được xóa bởi phần cứng khi thực thi vector xử lý ngắttương ứng
Bit 0 – TOV0: Cờ tràn của Timer/Counter0.Bit TOV0 được thiết lập khi xảy ramột sự tràn trong Timer/Counter0 TOV0 được xóa bởi phần cứng khi thực thivector xử lý ngắt tương ứng
Màn hình LCD (Màn hình tinh thể lỏng) được sử dụng để hiển thị trạng thái hoặc cácthông số trong các hệ thống nhúng
LCD 16x2 là một thiết bị có 16 chân, trong đó có 8 chân dữ liệu (D0-D7) và 3 chân điềukhiển (RS, RW, EN) 5 chân còn lại dùng để cấp nguồn và điều khiển đèn nền cho mànhình LCD
Các chân điều khiển giúp chúng ta cấu hình màn hình LCD ở chế độ lệnh hoặc chế độ dữliệu Chúng cũng giúp cấu hình chế độ đọc hoặc ghi và quyết định khi nào đọc hoặc ghi
dữ liệu
LCD 16x2 có thể được sử dụng ở chế độ 4-bit hoặc 8-bit tùy theo yêu cầu của ứng dụng
Để sử dụng nó, ta cần gửi một số lệnh nhất định cho màn hình LCD ở chế độ lệnh và khimàn hình được cấu hình theo nhu cầu của chúng ta, ta có thể gửi dữ liệu cần thiết ở chế
Trang 7với các chân GPIO khác của vi điều khiển Do các kết nối như vậy, chúng ta có thể tiếtkiệm được bốn chân GPIO, những chân này có thể được sử dụng cho các ứng dụng khác.Chức năng chân:
LED-Khi giao tiếp LCD16x2 với bất kỳ vi điều khiển nào, đầu tiên chúng ta cần khởi tạoLCD Để làm điều đó, chúng ta cần gửi một số lệnh Tương tự, để xóa màn hình hoặcthay đổi vị trí, chúng ta cũng cần gửi lệnh Vì vậy, về cơ bản, chúng ta có thể nói rằngLCD16x2 được điều khiển bằng cách sử dụng các lệnh
Lệnh thường dùng cho LCD1602
Trang 8Bây giờ, khi in một ký tự trên LCD16x2, chúng ta cần gửi mã ASCII của ký tự đóđến LCD16x2 Giả sử, chúng ta muốn in ký tự ’H’ trên LCD, thì chúng ta phải gửi dữliệu 0x48 (mã ASCII của ’H’) đến LCD16x2 LCD16x2 có bộ điều khiển riêng của nó, bộđiều khiển này sẽ thực hiện công việc in lên màn hình LCD16x2.
AVR ATmega328p có 23 chân tạo thành bốn cổng: PORTB, PORTC, PORTD Mỗi cổng
có 8 chân Các chân của bốn cổng này có thể được sử dụng như là đầu vào/đầu ra đadụng Những chân này có thể được cấu hình làm đầu vào hoặc đầu ra bằng cách sử dụng
ba thanh ghi DDRx, PINxm, PORTx cho mỗi cổng Trong đó x có thể là B, C hoặc Dtùy thuộc vào cổng nào đang được sử dụng)
Mỗi chân cũng có một số chức năng đặc biệt liên quan đến nó Sơ đồ chân củaATmega328p được hiển thị trong hình dưới đây Bốn cổng, các chân của chúng và cácchức năng đặc biệt liên quan đến từng chân có thể được nhìn thấy trong hình dưới
DDRx Thanh ghi hướng dữ liệu: Đây là các thanh ghi 8-bit Chúng được sử dụng
để cấu hình các chân của các cổng là đầu vào hoặc đầu ra Việc ghi giá trị 1 vào các bittrong thanh ghi này sẽ thiết lập các chân cụ thể đó thành chân đầu ra Việc ghi giá trị 0vào các bit trong thanh ghi này sẽ thiết lập các chân cụ thể đó thành chân đầu vào Tất
cả các bit trong các thanh ghi này đều có thể được đọc và ghi Giá trị ban đầu của cácbit này là zero
PORTx Thanh ghi dữ liệu: Đây là các thanh ghi 8-bit Chúng được sử dụng đểđặt các chân của các cổng ở trạng thái logic HIGH hoặc logic LOW Việc ghi số một vàocác bit trong thanh ghi này sẽ đưa tín hiệu logic HIGH (5V) lên các chân đó Ngược lại,việc ghi số không vào các bit trong thanh ghi này sẽ đưa tín hiệu logic LOW (0V) xuốngcác chân đó Tất cả các bit trong các thanh ghi này đều có thể được đọc và ghi Giá trịban đầu của các bit này là zero
Trang 9PINx Thanh ghi địa chỉ chân đầu vào: Đây là các thanh ghi 8-bit Chúng được
sử dụng để đọc giá trị trên các chân cụ thể của cổng Các bit này là các bit chỉ đọc vàkhông thể ghi vào Khi PINx=1 và DDRx=1 sẽ bật tính năng điện trở kéo lên của chânđầu vào
Encoders là thiết bị được sử dụng để thu thập thông tin về vị trí, hướng và tốc độ từ cácmáy móc nhằm xác định vị trí hoặc vị trí tương đối của một đối tượng
Các công nghệ được sử dụng cho việc chế tạo Encoder hiện tại là:
Giải mã tín hiệu từ Encoder:
• Thông tin chuyển động của động cơ như hướng quay, vị trí và vận tốc được giải mã
từ các tín hiệu quadrature
Trang 10• Một state machine xác định hướng chuyển động: Chuyển động theo chiều kimđồng hồ = tăng bộ đếm; Chuyển động ngược chiều kim đồng hồ = giảm bộ đếm;Chuyển đổi không hợp lệ xảy ra khi các kênh chuyển đổi đồng thời.
• Tín hiệu encoder clock được lấy mẫu từ các đầu vào của Encoder; Tín hiệu clock
có thể là 1x, 2x hoặc 4x tần số của các đầu vào encoder dựa trên số cạnh tín hiệu
sử dụng để đến xung Encoder
Các ngắt ngoài được kích hoạt bởi chân INT0 và INT1 hoặc bất kỳ chân nào từ PCINT23 0.Nếu được bật, các ngắt sẽ kích hoạt ngay cả khi các chân INT0 và INT1 hoặc PCINT23 0được cấu hình làm ngõ ra Tính năng này cho phép tạo ngắt phần mềm Ngắt thay đổichân PCI2 sẽ kích hoạt nếu có bất kỳ chân PCINT23 16 nào được bật thay đổi trạngthái Tương tự, PCI1 kích hoạt với PCINT14 8 và PCI0 kích hoạt với PCINT7 0
Ngắt INT0 và INT1 có thể được kích hoạt bởi cạnh lên, cạnh xuống hoặc mức thấp,được cài đặt qua thanh ghi EICRA Nếu ngắt được cấu hình theo mức, nó sẽ kích hoạtkhi chân được giữ ở mức thấp Ngắt cạnh yêu cầu xung nhịp I/O, trong khi ngắt mức cóthể hoạt động không đồng bộ và có thể được sử dụng để đánh thức vi điều khiển từ cácchế độ ngủ (ngoại trừ chế độ Idle) Khi sử dụng ngắt mức để đánh thức từ chế độ Power-Down, mức tín hiệu phải được duy trì đủ lâu để vi điều khiển hoàn tất quá trình khởi động.Các thanh ghi dùng cho ngắt ngoài:
Trang 111 EICRA – Thanh ghi điều khiển ngắt ngoài A
Bit 3, 2 – ISC11, ISC10: Điều khiển cảm biến ngắt 1 (INT1) Các bit này xác địnhđiều kiện kích hoạt cho ngắt ngoài 1 (INT1) Điều kiện kích hoạt có thể là cạnh lên,cạnh xuống, hoặc mức thấp tại chân INT1
Bit 1, 0 – ISC01, ISC00: Điều khiển cảm biến ngắt 0 (INT0) Tương tự như ISC11
và ISC10, các bit này kiểm soát điều kiện kích hoạt cho ngắt ngoài 0 (INT0) Điềukiện kích hoạt có thể là cạnh lên, cạnh xuống hoặc mức thấp tại chân INT0
2 EIMSK – Thanh ghi mặt nạ ngắt ngoài
Bit 1 – INT1: Kích hoạt yêu cầu ngắt ngoài 1 Khi bit INT1 ngắt ngoài trên chânINT1 được kích hoạt
Bit 0 – INT0: Kích hoạt yêu cầu ngắt ngoài 0
3 EIFR – Thanh ghi cờ ngắt ngoài
Bit 1 – INTF1: Cờ ngắt ngoài 1 Khi kích hoạt một yêu cầu ngắt trên chân INT1,bit INTF1 được thiết lập bằng 1 Cờ sẽ xóa sau khi ngắt được thực thi
Bit 0 – INTF0: Cờ gắt ngoài 0 Khi kích hoạt một yêu cầu ngắt trên chân INT0,bit INTF0 được thiết lập bằng 1 Cờ sẽ xóa sau khi ngắt được thực thi
Trang 122 Mô phỏng và thực hành
Sơ đồ mạch được vẽ trên KiCad 8.0
• 2 nút bấm điều chỉnh tốc độ động cơ được kết nối với PB0 và PB1
• 3 chân tín hiệu IC L293D được kết nối với Atmega328p: ENA-PD6(OC0A); PD4, IN2-PD5
IN1-• 2 dây tín hiệu của Encoder được kết nối với 2 chân ngắt ngoài của Atmege328p:PhaseA-PD3(INT1); PhaseB-PD2(INT2)
• Các chân truyền tín hiệu của LCD1602 được kết nối với Atmega328p: RS-PC0;E-PC1; D4:7-PC2:5; R/W-GND
Trang 132.2 Cấu trúc chương trình
trình điều khiển chínhCách hoạt động của chương trình: Tốc độ động cơ sẽ được điều khiển thông qua ICL293D Khi động cơ quay, Encoder sẽ có tín hiệu trả về, thực hiện ngắt ngoài để đếm sốxung của encoder Một hàm ngắt tràn của Timer0 được sử dụng để làm thời gian tínhvận tốc của động cơ Sau đó in ra màn hình LCD thông tin về PWM và SPEED (Tốc độđộng cơ vòng/phút)
Trang 142.4 Mô phỏng với Proteus 8.13
Chương trình mô phỏng chỉ là thử nghiệm, không phải là chương trình cuối cùng
Trang 152.5 Tổng hợp và thực thi phần mềm
Chương trình chạy trên mô hình thực gần giống với mô phỏng, tuy nhiên có 1 vài vấn đề:
1 LCD1602 sau mỗi lần hiển thị sẽ phải clear, nếu không sẽ bị lưu chữ trên màn hình
2 Tham số động cơ thực khác với động cơ mô phỏng, động cơ mô phỏng chỉ dùng đểkiểm tra chương trình hoạt động có đúng với yêu cầu hay không
3 Tốc độ động cơ hoạt động ở 12V theo nhà sản xuất là 620 vòng/phút, tuy nhiên môhình thực tốc độ động cơ sẽ nằm trong khoảng 610-630 vòng/phút
Trang 163 Kết luận và đánh giá
Đánh giá kết quả của từng thành phần được sử dụng:
• Vi điều khiển Atmega328p nhỏ nhưng đủ chức năng phục vụ
• Nút bấm sử dụng điện trở kéo lên có sẵn của vi điều khiển hoạt động bình thường
• LCD1602 hoạt động tốt ở chế độ 4bit, có thể hiển thị vị trí tùy ý trên 2 hàng
• IC L293D điều khiển tốc độ động cơ hoạt động bình thường
• Chương trình ngắt ngoài đếm số xung encoder chính xác, x2 số xung thực của độngcơ
• Hàm ngắt tràn của Timer0 được sử dụng để tính vận tốc cho kết quả đúng
• Thực hiện giao tiếp USART hiển thị và điều khiển tốc độ động cơ qua Terminal
• Thực hiện ngắt ngoài ở chế độ CHANGE (khi có thay đổi tín hiệu) giúp x4 lần sốxung thực tế của encoder
Trang 2017 // Set PD4 and PD5 as o u t p u t for m o t o r d i r e c t i o n c o n t r o l
18 D D R D |= (1 < < D D D 4 ) | (1 < < D D D 5 ) ; // IN1 ( PD4 ) and IN2 ( PD5 ) as