PDA

View Full Version : Dùng Arduino điều khiển step driver vexta AKD514L



linhquy10
20-07-2016, 04:18:43 PM
tình hình là do em được giao làm máy khoan tự động nhưng trước giờ chưa chạm vào cnc lần nào nên nhiều cái mơ hồ quá,tìm tài liệu thì không thấy hoặc nói không rõ
hiện giờ em đang được giao sử dụng driver AKD514L-c (hoặc AKD514H-C) và steper UPH569
em đã kết nối steper vào driver rồi và đã điều khiển được nó bằng arduino bằng cách chân CW+ và CCW+ nối 5v arduino còn chân CW- và CCW- em dùng để điều khiển chiều động cơ
câu 1: em đấu nối điều khiển như thế đúng chưa ạ,em cấp xung 0 vào CW thì nó quay chiều thuận,xung 0 vào CCW thì nó sẽ quay chiều ngược lại
câu 2: tuy điều khiển được nhưng nó quay rất chậm,em muốn điều khiển nó quay nhanh hơn thì phải như thế nào(lập trình ra sao),động cơ step này thì 500 xung 1 vòng nhưng driver nó chỉnh sẳn trước khi e sử dụng là 5000xung 1 vòng,nếu em muốn chỉnh xung full step thì chỉnh lại như nào
câu 3: sao động cơ và driver em nó nóng khi không chạy lắm,em phải chỉnh như nào,em đọc thì thấy chỉnh stop nhưng chỉnh như nào là đúng ạ
câu 4: các thông số trên driver phải chỉnh như thế nào để phù hợp với step này bác các
22800

22801

em điều khiển nó bằng arduino uno R3
mấy bác thông não giúp em với
code em test nó đây ạ :

#define CW 3
#define CCW 4
int i;
int j;
int timer;
void setup() {
Serial.begin(9600);
digitalWrite(CW,HIGH);
pinMode(CW,OUTPUT);
digitalWrite(CCW,HIGH);
pinMode(CCW,OUTPUT);

}

void loop() {
j=5000;

for(i=0;i<j;i++)
{ Serial.println(i);
digitalWrite(CW,LOW);
digitalWrite(CCW,HIGH);
delayMicroseconds(1);
digitalWrite(CW,HIGH);
digitalWrite(CCW,HIGH);
delayMicroseconds(1);
}
delay(2000);
}

CKD
20-07-2016, 05:18:03 PM
Chắc bạn đã đọc qua nanual rồi, nếu chưa thì đọc qua cái này.

http://www.et-guenther.de/PDF/5/eng/RK-Series.pdf

câu 1: bạn đã làm nó chạy được thì phần đấu nối Ok rồi còn gì?
câu 2: bạn xem và chỉnh DATA1/DATA2, mức 0 (500ppr), mức 1 (1000ppr) v.v...
câu 3: có thử bật chức năng OFF/E.S -> On.
câu 4: chỉnh RUN/STOP là chỉnh dòng lúc chạy và lúc dừng. Từ nhỏ tới lớn tương đương 0-F.

Arduino mà chạy với thư viện thì hơi bị chậm. Cụ thể chậm đến mức nào thì... phải thực tế mới biết được.
Theo code thì tần số phát ra chỉ khoảng 200Hz

linhquy10
20-07-2016, 08:39:09 PM
đúng thật là khoảng chậm e rất ức chế,em đã băm rất nhanh nhưng vẫn không nhanh nổi,driver và step đó dùng với mach3 thì ok,nhưng khổ là bị yêu cầu làm với arduino
trục x chạy tới lui,và thêm 1 step điều khiển đĩa tròn xoay để spindle hạ khoan lổ
à lúc chiều này e có chỉnh stop về 0 thì có hiện tượng khựng sau mỗi 100 step

Ga con
20-07-2016, 10:08:00 PM
Bác không viết các hàm accel và deaccel mà xuất một phát tần số cao ngay thì motor dễ mất bước lắm.

Chưa kể một chip thực hiện nhiều tác vụ, interupt búa xua nữa thì phát xung nhiều jitter, motor chạy không mượt và nguy cơ mất bước còn tăng nữa.
Tốt nhất và đơn giản nhất nhưng hơi tốn một chút là bác mà từng module điều khiển 1 kênh phát xung, nhận lệnh từ master và chạy xong lệnh rồi chờ tiếp.

Thanks.

linhquy10
21-07-2016, 05:58:15 PM
Bác không viết các hàm accel và deaccel mà xuất một phát tần số cao ngay thì motor dễ mất bước lắm.

Chưa kể một chip thực hiện nhiều tác vụ, interupt búa xua nữa thì phát xung nhiều jitter, motor chạy không mượt và nguy cơ mất bước còn tăng nữa.
Tốt nhất và đơn giản nhất nhưng hơi tốn một chút là bác mà từng module điều khiển 1 kênh phát xung, nhận lệnh từ master và chạy xong lệnh rồi chờ tiếp.

Thanks.

ý bác nói là sử dụng thư viện accel cho arduino phải không bác
như link này :http://arduino.vn/bai-viet/685-huong-dan-dieu-khien-dong-co-buoc
em cứ nghĩ nó không dùng được cho AKD514hc chứ
mà nếu viết theo như bác nói step nó có chạy nhanh được không bác,cái thằng arduino này nó có đáp ứng kịp không bác

Echchum
22-07-2016, 08:07:13 AM
Trong cái code của bác có cái delay 2000ms thì sao nó nhanh được Bác chủ thớt

CKD
22-07-2016, 08:49:11 AM
Trong cái code của bác có cái delay 2000ms thì sao nó nhanh được Bác chủ thớt

Delay sau vòng lặp for mà. Nội dung của cái đoạn code đó nôm na thế này.

Khởi tạo.
Phát 5000 xung đồng thời báo cáo số xung qua RS232
Chờ 2000ms
Lăp lại quá trình.

Có nhiều nguyên nhân gây chậm trong chương trình này.
- Arduino không phải không thể chạy nhanh hơn (vì nó vẫn dùng atmega32 16MHz như nhiều ứng dụng đơn giản khác). Nhưng các lệnh của nó đều chạy qua thư viện, nên in/out của nó đều phải tra qua pin map. Do đó nó mất nhiều thời gian mới thay đổi trạng thái của 1 in/out được.
- Mỗi khi thay đổi trạng thái, đều phải báo cáo qua RS232, làm mất thêm một khoảng thời gian chờ thực hiện xong việc này.
- Ngay cả delayMicroseconds(1) nó cũng ngốn mất khá thời gian, thực hiện riêng lệnh đã mất đâu hơn 10us.

Để cải thiện.
- Tăng tốc tối đa cho giao tiếp RS232, hoặc bỏ luôn, chỉ báo cáo khi hoàn tất 5000 xung.
- Thay vì dùng các lệnh như digitalWrite thì dùng bitwise (như bitRead, bitWrite v.v...) để truy cập trực tiếp lên pin/port của vxl sẽ cải thiện nhiều về tốc độ. Tất nhiên khi truy cập trực tiếp lên pin/port thì ta phải nắm rỏ pinout của vxl, vì lúc đó output nó không theo pin number của arduino nữa.

linhquy10
23-07-2016, 11:28:49 AM
Delay sau vòng lặp for mà. Nội dung của cái đoạn code đó nôm na thế này.

Khởi tạo.
Phát 5000 xung đồng thời báo cáo số xung qua RS232
Chờ 2000ms
Lăp lại quá trình.

Có nhiều nguyên nhân gây chậm trong chương trình này.
- Arduino không phải không thể chạy nhanh hơn (vì nó vẫn dùng atmega32 16MHz như nhiều ứng dụng đơn giản khác). Nhưng các lệnh của nó đều chạy qua thư viện, nên in/out của nó đều phải tra qua pin map. Do đó nó mất nhiều thời gian mới thay đổi trạng thái của 1 in/out được.
- Mỗi khi thay đổi trạng thái, đều phải báo cáo qua RS232, làm mất thêm một khoảng thời gian chờ thực hiện xong việc này.
- Ngay cả delayMicroseconds(1) nó cũng ngốn mất khá thời gian, thực hiện riêng lệnh đã mất đâu hơn 10us.

Để cải thiện.
- Tăng tốc tối đa cho giao tiếp RS232, hoặc bỏ luôn, chỉ báo cáo khi hoàn tất 5000 xung.
- Thay vì dùng các lệnh như digitalWrite thì dùng bitwise (như bitRead, bitWrite v.v...) để truy cập trực tiếp lên pin/port của vxl sẽ cải thiện nhiều về tốc độ. Tất nhiên khi truy cập trực tiếp lên pin/port thì ta phải nắm rỏ pinout của vxl, vì lúc đó output nó không theo pin number của arduino nữa.


thanks anh CKD,em đã bỏ cái rs232 và cải thiện tốc độ rất nhiều
mỗi chu kì 40us thì mất bước 50us trở lên thì ổn rồi
nhưng có vấn đề là toàn bộ quá trình máy chạy nếu cứ để mặc định tốc độ như vậy cho dù về home thì cũng chạm cử rất mạnh,rung cả máy
em định dùng bộ thư viện accelstepper,do thư viện có gia tốc
nhưng e tìm tài liệu thì không thấy nói rõ phải sử dụng thư viện ntn,em không biết làm sao để chỉnh tốc độ,tọa độ bước,gia tốc,code mẫu e thấy toàn random...chiều quay nữa,vì thằng vexta cấp xung CW quay thuận CCW lại quay ngược
a có tài liệu hay code mẫu nào cho em tham khảo với ạ,tiếng anh cũng được

CKD
23-07-2016, 02:10:29 PM
Tài liệu thì chịu thôi.
Mình hiểu sơ về Arduino vì trước đó có tìm hiểu sơ qua PIC & AVR. Nên Arduino phát triển trên nền AVR thì có vọc qua tí chút về nó. Cũng có tìm hiểu lý do nó chạy chậm và may mắn xem qua vài giải thích của mấy anh tây nên biết được nguyên nhân.

Thư viện accelstepper cũng có biết chút chút, nhưng chưa thực hành với nó bao giờ nên cũng không biết phải nói gì về nó.

Để tìm hiểu thì chịu khó tìm google, các bài tập có nội dung gần giống mình rồi tìm hiểu cách dùng. Đồng thời đọc thêm các ghi chú của thư viện để hiểu thêm.

Driver thì có thể chuyển qua chế độ 1P, dùng input pulse/dir.

Có một dự án xuất xung cho step mà mình thấy rất Ok, tuỳ biến cực mạnh là GRBL. Tuy nhiên nếu mới bắt đầu mà mò code của GRBL thì quả thật.. mò xong mà hiểu thì cũng thành trùm mất rồi.
Đơn giản hơn thì có thể kết hợp GRBL để xuất xung, kết hợp SD card để chứa chương trình, kết hợp thêm 1 arduino để đọc và truyền dữ liệu. Khi đó có thể lập trình chạy step hiệu quả hơn với G-Code. Hình như GRBL quản lý được tới 4 axis cùng lúc.

Cách khác nữa là tìm hiểu về RepRap để xuất xung. Cái này thì cũng như GRBL nhưng được cái tích hợp & đọc SD card & có LCD luôn. Không cần phải truyền chi hết. Mặc định nó phải dùng tới Aduino MEGA, nhưng cũng có người mod lại để chạy được với UNO thì phải.

linhquy10
24-07-2016, 12:34:44 AM
Tài liệu thì chịu thôi.
Mình hiểu sơ về Arduino vì trước đó có tìm hiểu sơ qua PIC & AVR. Nên Arduino phát triển trên nền AVR thì có vọc qua tí chút về nó. Cũng có tìm hiểu lý do nó chạy chậm và may mắn xem qua vài giải thích của mấy anh tây nên biết được nguyên nhân.

Thư viện accelstepper cũng có biết chút chút, nhưng chưa thực hành với nó bao giờ nên cũng không biết phải nói gì về nó.

Để tìm hiểu thì chịu khó tìm google, các bài tập có nội dung gần giống mình rồi tìm hiểu cách dùng. Đồng thời đọc thêm các ghi chú của thư viện để hiểu thêm.

Driver thì có thể chuyển qua chế độ 1P, dùng input pulse/dir.

Có một dự án xuất xung cho step mà mình thấy rất Ok, tuỳ biến cực mạnh là GRBL. Tuy nhiên nếu mới bắt đầu mà mò code của GRBL thì quả thật.. mò xong mà hiểu thì cũng thành trùm mất rồi.
Đơn giản hơn thì có thể kết hợp GRBL để xuất xung, kết hợp SD card để chứa chương trình, kết hợp thêm 1 arduino để đọc và truyền dữ liệu. Khi đó có thể lập trình chạy step hiệu quả hơn với G-Code. Hình như GRBL quản lý được tới 4 axis cùng lúc.

Cách khác nữa là tìm hiểu về RepRap để xuất xung. Cái này thì cũng như GRBL nhưng được cái tích hợp & đọc SD card & có LCD luôn. Không cần phải truyền chi hết. Mặc định nó phải dùng tới Aduino MEGA, nhưng cũng có người mod lại để chạy được với UNO thì phải.

cảm ơn đóng góp quá nhiệt tình hữu ích của anh
có thể làm cái sườn kiến thức cho em nghiên cứu
mà ngặt ngừoi giao dự án cho em lại bắt làm arduino thôi
trước kia có một ông làm bên này,em chỉ chuyên bên lập trình điện tử dân dụng khoảng điều khiển thiết bị,nay lão đó nghĩ em lãnh xô,nên phải tìm hiểu lấn qua luôn

Greenday
01-11-2016, 08:26:20 AM
cùng 1 câu hỏi nhưng chưa biết cách làm và chương trình thế nào, bác chỉ em và cho xin chương trình được không ah.