Hướng dẫn thực hành động cơ GA12 n20 bằng Arduino

8 268 5
Hướng dẫn thực hành động cơ GA12 n20 bằng Arduino

Đang tải... (xem toàn văn)

Thông tin tài liệu

Hướng dẫn thực hành động cơ giảm tốc GA12N20 1, Mục tiêu Nắm bắt được các chân kết nối của bộ động cơ kèm encoder GA12N20. Nắm bắt được các chân chức năng cơ bản của board arduino Uno R3. Biết cách đọc các thông số cơ bản dựa vào môi trường Arduino UNO R3 của động cơ đó là : Thông số vị trí. Thông số chiều quay. Thông số tốc độ (RPM : vòng phút). 2, Dụng cụ cần chuẩn bị • Để tiến hành lắp mạch ta cần sử dụng các linh kiện điện tử sau : • 01 board mạch nạp arduino Uno R3. • 01 bộ động cơ kèm encoder GA12N20. • 01 cáp nạp dữ liệu từ máy tính xuống arduino. • Dây câu mạch. • Máy tính có cài đặt trình biên dịch arduino IDE. 3, Nguyên lí đo A, Nguyên tắc xác định vị trí và chiều quay của động cơ. Do đặt lệch nhau 90 độ nên Pha B (cảm biến B ) sẽ trễ pha hơn Pha A và độ trễ là 90 độ Giản đồ xung thu được của encoder có dạng sau : Nhìn vào giản đồ xung ta thấy , khi pha A chuyển trạng thái từ HIGH > LOW thì trạng thái của Pha B có thể là HIGH hoặc LOW. Xét trạng thái của Pha B khi Pha A đang chuyển từ mức tín hiệu logic HIGH>LOW Nếu :  Pha B có mức tín hiệu đang HIGH thì động cơ quay cùng chiều đồng hồ.  Pha B có mức tín hiệu đang LOW thì động cơ quay ngược chiều đồng hồ. Ngắt (interrupt) là những lời gọi hàm tự động khi hệ thống sinh ra một sự kiện. Những sự kiện này được nhà sản xuất vi điều khiển thiết lập bằng phần cứng và được cấu hình trong phần mềm bằng những tên gọi cố định. Đối với Arduino UNO có cung cấp 2 ngắt đó là pin ngắt 0  chân số 2 Và pin ngắt 1  chân số 3. Cú pháp trong lập trình : attachInterrupt(interrupt, ISR, mode); interrupt: Số thứ tự của ngắt. Trên Arduino Uno, bạn có 2 ngắt với số thứ tự là 0 và 1. Ngắt số 0 nối với chân digital số 2 và ngắt số 1 nối với chân digital số 3. ISR: tên hàm sẽ gọi khi có sự kiện ngắt được sinh ra. mode: kiểu kích hoạt ngắt, ở đây chúng ta sử dụng hàm ngắt với mode FALLING tức là trạng thái chuyển từ mức cao xang mức thấp . Chúng ta sử dụng ngắt 0 tức chân số 2 (digital pwm) để thực hiện ngắt tại pha A cảm biến. B, Nguyên tắc xác định tốc độ của động cơ Để xác định được tốc độ chúng ta cần phải có 2 tham số là : 1. Quãng đường di chuyển : ở đây chính là số vòng di chuyển được trong 1 thời gian nhất định. 2. Thời gian để động cơ quay được 1 số vòng nhất định. Theo như phần cứng thì đĩa từ có độ phân giải là 7 có nghĩa là cứ cảm biến Hall đếm được 7 xung thì ta coi như động cơ đã quay được 1 vòng. Vận tốc = (Số xung nhận từ cảm biến trong 1 giây 60)7 Để xác định được thời gian trong board mạch Arduino UNO R3 , nhà sản xuất đã cung cấp công cụ Timercounter khi lập trình tính toán , cụ thể : TimerCounter là module hoạt động độc lập và không thể thiếu của bất kỳ Microcontroller nào. Chức năng của TimerCounter gồm: định thời, đếm sự kiện, tạo xung PWM,.... Chúng ta sử dụng chân số 5 (digital PWM) của board arduino để thực hiện đếm xung trên pha B cảm biến. 3 , Lắp mạch và lập trình Thực hiện lắp mạch theo sơ đồ sau : Nạp code cho board arduino Uno R3. const int PIN_interrupt=0; Xác định sử dụng chân ngắt 0 const int phase_A= 2; Kết nối pha A với pin 2 của Arduino const int phase_B= 5; Kết nối pha B với pin 5 timercounter 1 của Arduino int count = 0; Khởi tạo biến đếm xung long int timetrc,tocdo=0; khởi tạo biến lưu tốc độ và thời gian tính toán int direction_of_rotation=3; void setup(){ khởi động bộ đếm của TimerCounter 1 TCCR1A=0; TCCR1B=0b111; attachInterrupt(PIN_interrupt,ham_ngat,FALLING); ham ngat cau truc interrupt (chan ngat , viec can lam ,dieu kien ngat) ) pinMode(phase_A, INPUT_PULLUP); pinMode(phase_B, INPUT_PULLUP); Serial.begin(9600); } void loop() { Cứ 1000 milli giây thì lại xét có bao nhiêu xung được đếm ; Vận tốc = Số xungthời gian if(millis()timetrc>=1000) { noInterrupts(); Tắt toàn bộ các ngắt tocdo=(TCNT160)7; TCNT1 lưu lại số xung của pha B Serial.println(Dong co encoder GA12_N20); Serial.println(RPM :); Serial.println(tocdo); Serial.println(__________________); Serial.println(Vi tri :); Serial.println(count); if (tocdo ==0){ Serial.println( Motor dung yen); Serial.println(__________________); goto tt; } if (direction_of_rotation==1){ Serial.println( Motor xoay phai); Serial.println(__________________); goto tt; } if (direction_of_rotation==0){ Serial.println( Motor xoay trai); Serial.println(__________________); goto tt; } tt: timetrc=millis(); TCNT1=0; interrupts(); } } int ham_ngat() { if(digitalRead(phase_B) ==LOW) { count++; direction_of_rotation=1; } else { count; direction_of_rotation=0; } } Tiến hành biên dịch gỡ lỗi và nạp code xuống board mạch. Kết quả :

Hướng dẫn thực hành động giảm tốc GA12-N20 1, Mục tiêu - Nắm bắt chân kết nối động kèm encoder GA12-N20 Nắm bắt chân chức board arduino Uno R3 Biết cách đọc thông số dựa vào mơi trường Arduino UNO R3 động : Thơng số vị trí Thơng số chiều quay Thơng số tốc độ (RPM : vòng /phút) 2, Dụng cụ cần chuẩn bị • • • • • • Để tiến hành lắp mạch ta cần sử dụng linh kiện điện tử sau : 01 board mạch nạp arduino Uno R3 01 động kèm encoder GA12-N20 01 cáp nạp liệu từ máy tính xuống arduino Dây câu mạch Máy tính có cài đặt trình biên dịch arduino IDE 3, Nguyên lí đo A, Nguyên tắc xác định vị trí chiều quay động Do đặt lệch 90 độ nên Pha B (cảm biến B ) trễ pha Pha A độ trễ 90 độ Giản đồ xung thu encoder có dạng sau : Nhìn vào giản đồ xung ta thấy , pha A chuyển trạng thái từ HIGH -> LOW trạng thái Pha B HIGH LOW Xét trạng thái Pha B Pha A chuyển từ mức tín hiệu logic HIGH>LOW Nếu :   Pha B có mức tín hiệu HIGH động quay chiều đồng hồ Pha B có mức tín hiệu LOW động quay ngược chiều đồng hồ Ngắt (interrupt) lời gọi hàm tự động hệ thống sinh kiện Những kiện nhà sản xuất vi điều khiển thiết lập phần cứng cấu hình phần mềm tên gọi cố định Đối với Arduino UNO có cung cấp ngắt pin ngắt  chân số Và pin ngắt  chân số Cú pháp lập trình : attachInterrupt(interrupt, ISR, mode); interrupt: Số thứ tự ngắt Trên Arduino Uno, bạn có ngắt với số thứ tự Ngắt số nối với chân digital số ngắt số nối với chân digital số ISR: tên hàm gọi có kiện ngắt sinh mode: kiểu kích hoạt ngắt, sử dụng hàm ngắt với mode FALLING tức trạng thái chuyển từ mức cao xang mức thấp Chúng ta sử dụng ngắt tức chân số (digital pwm) để thực ngắt pha A cảm biến B, Nguyên tắc xác định tốc độ động Để xác định tốc độ cần phải có tham số : Quãng đường di chuyển : số vòng di chuyển thời gian định Thời gian để động quay số vòng định Theo phần cứng đĩa từ có độ phân giải có nghĩa cảm biến Hall đếm xung ta coi động quay vòng Vận tốc = (Số xung nhận từ cảm biến giây *60)/7 Để xác định thời gian board mạch Arduino UNO R3 , nhà sản xuất cung cấp công cụ Timer/counter lập trình tính tốn , cụ thể : Timer/Counter module hoạt động độc lập thiếu Microcontroller Chức Timer/Counter gồm: định thời, đếm kiện, tạo xung PWM, Chúng ta sử dụng chân số (digital PWM) board arduino để thực đếm xung pha B cảm biến , Lắp mạch lập trình Thực lắp mạch theo sơ đồ sau : Nạp code cho board arduino Uno R3 const int PIN_interrupt=0; // Xác định sử dụng chân ngắt const int phase_A= 2; // Kết nối pha A với pin Arduino const int phase_B= 5; // Kết nối pha B với pin timer/counter Arduino int count = 0; // Khởi tạo biến đếm xung long int timetrc,tocdo=0;// khởi tạo biến lưu tốc độ thời gian tính tốn int direction_of_rotation=3; void setup(){ // khởi động đếm Timer/Counter TCCR1A=0; TCCR1B=0b111; attachInterrupt(PIN_interrupt,ham_ngat,FALLING); /*ham ngat cau truc interrupt (chan ngat , viec can lam ,dieu kien ngat) )*/ pinMode(phase_A, INPUT_PULLUP); pinMode(phase_B, INPUT_PULLUP); Serial.begin(9600); } void loop() { // Cứ 1000 milli giây lại xét có xung đếm ; // Vận tốc = Số xung/thời gian if(millis()-timetrc>=1000) { noInterrupts(); // Tắt toàn ngắt tocdo=(TCNT1*60)/7; // TCNT1 lưu lại số xung pha B Serial.println("Dong co encoder GA12_N20"); Serial.println("RPM :"); Serial.println(tocdo); Serial.println(" "); Serial.println("Vi tri :"); Serial.println(count); if (tocdo ==0){ Serial.println("\n Motor dung yen"); Serial.println(" "); goto tt; } if (direction_of_rotation==1){ Serial.println("\n Motor xoay phai"); Serial.println(" "); goto tt; } if (direction_of_rotation==0){ Serial.println("\n Motor xoay trai"); Serial.println(" "); goto tt; } tt: timetrc=millis(); TCNT1=0; interrupts(); } } int ham_ngat() { if(digitalRead(phase_B) ==LOW) { count++; direction_of_rotation=1; } else { count ; direction_of_rotation=0; } } Tiến hành biên dịch gỡ lỗi nạp code xuống board mạch Kết : ... HIGH>LOW Nếu :   Pha B có mức tín hiệu HIGH động quay chiều đồng hồ Pha B có mức tín hiệu LOW động quay ngược chiều đồng hồ Ngắt (interrupt) lời gọi hàm tự động hệ thống sinh kiện Những kiện nhà sản... (digital pwm) để thực ngắt pha A cảm biến B, Nguyên tắc xác định tốc độ động Để xác định tốc độ cần phải có tham số : Quãng đường di chuyển : số vòng di chuyển thời gian định Thời gian để động quay... cảm biến Hall đếm xung ta coi động quay vòng Vận tốc = (Số xung nhận từ cảm biến giây *60)/7 Để xác định thời gian board mạch Arduino UNO R3 , nhà sản xuất cung cấp cơng cụ Timer/counter lập trình

Ngày đăng: 02/09/2019, 17:32

Tài liệu cùng người dùng

Tài liệu liên quan