# Máy, thiết bị và sản phẩm khác > Điện - Điện tử - Tự động hóa > Arduino >  Dùng Arduino điều khiển step driver vexta AKD514L

## linhquy10

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




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

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

----------


## linhquy10

đú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

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

> 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...n-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

Trong cái code của bác có cái delay 2000ms thì sao nó nhanh được Bác chủ thớt

----------


## CKD

> 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

> 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.
> ...



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

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

> 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 ơ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

cùng 1 câu hỏi nhưng chưa biết cách làm và chương trình thế nào, bác chỉ em và cho xin chương trình được không ah.

----------

