DT: O7837277II - CKD's Youtube Channel - Facebook - Tổng hợp chủ đề
17 ds 3, Thạnh Mỹ Lợi, Q2, tp.HCM
DT: O7837277II - CKD's Youtube Channel - Facebook - Tổng hợp chủ đề
17 ds 3, Thạnh Mỹ Lợi, Q2, tp.HCM
Sau gần 4h hì hục đọc & code liên tục thì nhìn lại thấy sáng rồi (3h sáng), chốt lại thì motor đã quay. Rị mọ thử turnning hoài mà không mấy khã quan. Chán đi ngủ, sáng ra gần 9h thì ku em alo đánh thức, xong đi mãi tới chiều. Có sự động viên và thúc giục của bác Gamo cố quay cái clip, tới lui một hồi, cuối cùng nó cũng chiệu chạy thế này.
Còn tồn động mấy vấn đề..
- Xử lý chậm, nên chạy nhanh là out.
- Dùng 12V để điều khiển motor áp danh định bao nhiêu V không biết (của bác Gamo tặng) nên điều khiển PWM nó không chạy như ý.
- PID thì tạm tạm, xử lý như ý. Nhưng kết quả tệ vì phần công suất đánh giá không phù hợp, nên turning chạy lúc vầy lúc khác.
Kết luận: phần nào hiểu được PID mà vài thứ linh tinh khác , nên có thể tạm gọi là nghiên cứu chứ không phải ngâm cứu .
Có thời gian sẽ tiếp tục cải tiến & test tiếp.
DT: O7837277II - CKD's Youtube Channel - Facebook - Tổng hợp chủ đề
17 ds 3, Thạnh Mỹ Lợi, Q2, tp.HCM
Hoho, 8 bit mà bác làm PID được thì quá dữ
Nhìn tay bác mà muốn cười, sờ cái motor mà cứ như sờ con gái, sợ bị ăn đòn hay sao mà cứ lưỡng lự thế.
Em cũng thấy là hình như bác ấy quen tay, vân vân vê vê
CKD - Arduino DC PID position controller
- Arduino UNO (atmega328 - 16mHz).
- L298 H bridge (2A, 36V).
- encoder buffer 74HC14 (schmitt trigger inverter).
- encoder 1000p/r
- DC motor
Dự là tìm thêm con DC điện áp thấp với cái encoder 200-500 p/r thôi
DT: O7837277II - CKD's Youtube Channel - Facebook - Tổng hợp chủ đề
17 ds 3, Thạnh Mỹ Lợi, Q2, tp.HCM
DT: O7837277II - CKD's Youtube Channel - Facebook - Tổng hợp chủ đề
17 ds 3, Thạnh Mỹ Lợi, Q2, tp.HCM
Thấy bác CKD hứng thú, và chịu khó update kiến thức quá . Mình tặng bác 1 em DC Servo . encoder 500 xung , điện áp 24 hoặc 36 tùy ý bác .
DT: O7837277II - CKD's Youtube Channel - Facebook - Tổng hợp chủ đề
17 ds 3, Thạnh Mỹ Lợi, Q2, tp.HCM
Mới phát hiện ra ở VN có thể mua được con LM629...
Features
- 32-bit position, velocity, and acceleration registers
- Programmable digital PID filter with 16-bit coefficients
- Programmable derivative sampling interval
- 8- or 12-bit DAC output data (LM628)
- 8-bit sign-magnitude PWM output data (LM629)
- Internal trapezoidal velocity profile generator
- Velocity, target position, and filter parameters may be changed during motion
- Position and velocity modes of operation
- Real-time programmable host interrupts
- 8-bit parallel asynchronous host interface
- Quadrature incremental encoder interface with index pulse input
- Available in a 28-pin dual in-line package or a 24-pin surface mount package (LM629 only)
Giá tại TME cũng không chát lắm 95K/pcs
DT: O7837277II - CKD's Youtube Channel - Facebook - Tổng hợp chủ đề
17 ds 3, Thạnh Mỹ Lợi, Q2, tp.HCM
Hix... bác mà phát hiện sớm hơn thì đỡ ghia )
Em góp tí cho xôm tụ, vụ vân vân vê vê :x :x, DC servo 24v chạy 9v mà cũng "cứng" phết
Lần sửa cuối bởi Gamo, ngày 22-12-2014 lúc 11:27:07 AM.
Cái mô hình hôm rồi em nóng vội. Chỉ quăng cái PID vào điều khiển position luôn nên nó có nhiều cái kém và khó kiểm soát .
Có time em sẽ làm lại step by step xem có cải thiện được ko. Nếu không thì chắc em chán.. mà em chán thì em cho nó ngâm luôn quá .
- PWM control (chỉnh lại tần số cho nó phù hợp với motor). Có thể phát triển thành analog control.
- Torque control (hay nói cách khác là điều khiển dòng -> constant current - ổn dòng).
- Speed hay velocity control (điều khiển tốc độ).
Sau đó mới ghép lại thành chuổi thế này - position -> speed -> torque -> PWM không biết có đúng chưa nhỉ.
Mà nếu ở khâu Torque và Speed đều có P, hoặc PI, hoặc PID thì khi lồng ghép lại thành chuổi thì có phải chỉnh P/I/D cho các khâu này không nhỉ?. Nó sẽ ảnh hưởng cả hệ thống như thế nào?. Bác Gamo có bí mật nào không, bật mí cho em với
DT: O7837277II - CKD's Youtube Channel - Facebook - Tổng hợp chủ đề
17 ds 3, Thạnh Mỹ Lợi, Q2, tp.HCM
Hoho, mô hình của bác hôm trước có bị gì hả? Hình như bác chưa tune nó nên hội tụ lâu thôi hoặc do con Arduino của bác quá rùa ). Cũng có thể là do chú L298 phản ứng chậm nữa.
Em cũng tính chơi analog control, trùm Nhật Sơn nhảy vào can => giờ quay lại PWM.
Theo tai lieu em doc thi moi inner loop phai set thong so rieng cua no.
Hôm trước em quẳng một lố tính năng vào: motion profile, PIV. Sau thấy tuning oải quá => dẹp hết, quay lại PID cơ bản. Đang tính vụ kiểm soát torque nữa mà con lười trong em đang thức dậy :X
Em dự kiến là dùng Mach3 thì để nó kiểm soát tốc độ qua pulse, nhưng lý thuyết là dzậy, thực tế có ổn ko ta?
Lần sửa cuối bởi Gamo, ngày 22-12-2014 lúc 12:11:26 PM.
motion profile có phải là giản đồ vận tốc không bác Gamo?
Thấy cái servo xịn nào nó cũng có tham số gia tốc hết. Mà muốn gắn vào cái PID thì phải làm thế nào.. cái này mới nghĩ tới nhưng chưa hiện thực được, nên cụ thể không biết.
- analog control vẫn là PWM đó bác. Ý em là analog -> ADC -> PWM -> motor. Là mô hình kiểm tra. Khi dùng thì cứ PWM - Motor thôi.
Cái mô hình của em thì chưa xác định rỏ nguyên nhân. Em có test trên 2 con motor.
- con của anh có vẻ moment khá tốt, encoder sau khi vệ sinh cũng good, nhưng lực từ nó mạnh nên khi dừng.. lực từ tự quay motor về vị trí cân bằng từ.. nên nó không ổn định. Tự bản thân nó.. khi error = 0, PWM = 0.. thì motor tự quay theo từ trường stator . Vậy là PID lại nhảy vào sửa .. rồi lố nên nó cứ hunting.
- con của em thì nó chạy chậm rất smooth, chạy và dừng đúng, ít hunting, turning Ok. Nhưng mỗi tội khi chạy nhanh thì PID nó khùng luôn. Chắc do encoder nó khùng vì xuất hiện lỗi khi đếm. Con Arduino UNO thì em đánh giá nó vẫn đủ tốc độ làm việc vì nó liên tục report thông tin về máy tính qua dường UART, nhưng pid thì nó liệt vụ này cũng chưa có time để kiểm tra.
DT: O7837277II - CKD's Youtube Channel - Facebook - Tổng hợp chủ đề
17 ds 3, Thạnh Mỹ Lợi, Q2, tp.HCM
Éc... em hận motion profile )
Vụ đó kinh nghiệm em test là mình phải có tuning riêng cho thằng V & A. Oải lắm. Chạy 1000 step thì mới thấy có tác dụng chứ chạy 1 step/pulse thì nó làm cho hunting. Muốn ko bị hunt thì phải tính velocity band => giá chót cũng 10 thông số nữa ) Còn ko thì dùng PID cho cả Velocity & Acceleration cũng được.
Vụ encoder bị nhiễu cũng lằng nhằng ghê, ko biết loại encoder có bộ đệm thì có bị nhiễu ko bác?
Dùng ngắt ngoài bác ạ. Để hạn chế số lần đọc nên chỉ dùng ngắt cho kênh A, xử lý khi tín hiệu chuyển từ 0->1.
Dùng ngắt để đọc cạnh lên kênh A, gọi hàm doEncoder.
Hàm so sánh trạng thái kênh A & B để so sánh chiều quay, tính ra vị trí.
A <> B -> count + 1; (CW)
A == B -> count - 1; (CCW)
Code trên arduino.
Mã:.. void doEncoder() { if (digitalRead(encoderPinA) != digitalRead(encoderPinB)) { Input ++; } else { Input --; } }
DT: O7837277II - CKD's Youtube Channel - Facebook - Tổng hợp chủ đề
17 ds 3, Thạnh Mỹ Lợi, Q2, tp.HCM