PDA

View Full Version : Xin ý kiến về điều khiển vị trí động cơ DC


boy_legend
10-10-2012, 01:26 AM
Hiện mình đang làm đồ án về điều khiển động cơ DC có encoder theo nguyên lý servo.Về kiến thức thì mình cũng vừa học về lập trình VĐK 1 thời gian ngắn và cũng đủ nền tảng sơ sơ về lập trình chế độ PWM của PIC16F877A.Nói về đồ án mình đang làm thì mình đã làm cho động cơ quay thuận, nghịch cũng như thay đổi tốc độ động cơ , cũng như đếm số xung hồi tiếp về động cơ được rồi, nhưng hiện thầy yêu cầu thêm về điều khiển vị trí động cơ DC, cụ thể như sẽ có 3 nút nhất điều khiển góc quay của động cơ DC (vd: 90,180,270), thì khi nhấn button chọn góc nào động cơ sẽ quay tới đúng vị trí góc quay đó.Mình đọc nhiều tài liệu trên mạng nói về thuật toán PID nhưng thật sự là không hiểu mấy.Không biết ngoài cách giải thuật PID ra, còn cách nào khác để điều khiển vị trí của động cơ DC có encoder này ko? Xin mọi người cho ý kiến giúp đỡ mình nha, cảm ơn.

automations
10-10-2012, 10:02 AM
Về phương hướng thì bạn làm vậy là hoàn toàn đúng lấy xung ecoder về tính toán ra góc hoặc quãng đường đi.Nhưng bạn chú ý chút là với động cơ DC ko có phanh hay không có hãm thì khi đó dừng đúng vị trí là rất khó khăn nhất là chạy với tốc đọ cao một chút.

boy_legend
10-10-2012, 10:11 AM
Đúng là mình đã thử lập điều kiện cho xung nếu vượt quá 1 mức nào đó sẽ làm cho động cơ quay nghịch lại để ngừng nhưng mà không chính xác được.Nên ko biết có cách nào để dừng được động cơ đúng vị trí hay ko?

trihung12a1
10-10-2012, 10:43 PM
Chào bạn mình có ý kiên thế này:
Nếu bạn dùng được thuật toán PID để đk thì động cơ chạy sẽ rất mịn và tránh rung động khi đên sđủ góc.
Còn mình nghĩ đến cách đơn giản hơn để cho bạn là sẽ điều khiển đa cấp. Tức đến vị trí rồi thì sẽ bật bit cờ tràn lên và so sánh giá trị sai lệch đó (Nếu giá trị sai lệch càng lớn thì xung cấp PWM lớn và giảm dần khi xung sai lệnh nhỏ), và chia ra càng nhiều câp thì đc sẽ càng mịn.

boy_legend
11-10-2012, 10:37 AM
Chào bạn mình có ý kiên thế này:
Nếu bạn dùng được thuật toán PID để đk thì động cơ chạy sẽ rất mịn và tránh rung động khi đên sđủ góc.
Còn mình nghĩ đến cách đơn giản hơn để cho bạn là sẽ điều khiển đa cấp. Tức đến vị trí rồi thì sẽ bật bit cờ tràn lên và so sánh giá trị sai lệch đó (Nếu giá trị sai lệch càng lớn thì xung cấp PWM lớn và giảm dần khi xung sai lệnh nhỏ), và chia ra càng nhiều câp thì đc sẽ càng mịn.

Chào bạn, về thuật toán PID thì thật sự mình không biết cách sử dụng thế nào, mình đã thử thêm công thức PID vào nhưng không biết dùng nó để điều khiển vị trí thế nào cả.Còn về cách 2 bạn nêu, mình thì do ước chừng, ví dụ mình encoder 100xung/vòng nên nếu muốn quay 180 thì có lẽ là 50xung, thì mình lập điều kiện nếu xung >=50 sẽ cho quay nghịch lại, còn nhỏ hơn 50 thì lại quay thuận, nếu =50 thì dừng động cơ.Với cách này thì động cơ chứ quay tới quay lui với 1 góc sai lệch lớn lắm(tốc độ động cơ mình cho cố định 1 giá trị).

trihung12a1
12-10-2012, 04:26 PM
Chào bạn, về thuật toán PID thì thật sự mình không biết cách sử dụng thế nào, mình đã thử thêm công thức PID vào nhưng không biết dùng nó để điều khiển vị trí thế nào cả.Còn về cách 2 bạn nêu, mình thì do ước chừng, ví dụ mình encoder 100xung/vòng nên nếu muốn quay 180 thì có lẽ là 50xung, thì mình lập điều kiện nếu xung >=50 sẽ cho quay nghịch lại, còn nhỏ hơn 50 thì lại quay thuận, nếu =50 thì dừng động cơ.Với cách này thì động cơ chứ quay tới quay lui với 1 góc sai lệch lớn lắm(tốc độ động cơ mình cho cố định 1 giá trị).
Chính xác đó bạn nếu để 1 giá trị PWM khá lớn thì nó sẽ giật động cơ. Cho nên mình mới nói bạn đk đa cấp. Mình cho bạn vd như sau:

if(setpoint-encoder)>10
{dir=1;pwm=1023;}
else if(setpoint-encoder)<-10
{dir=0;pwm=1023;}
else ifif(setpoint-encoder)>5
{dir=1;pwm=500;}
else if(setpoint-encoder)<-5
{dir=0;pwm=500;}
.
.
.
.
bạn càng để nhiều cấp thì dcow bạn sẽ càng ít giật.
Đây chỉ là 1 pa để bạn làm tuy nhiên bạn nên xem thêm phân đk pid bởi vì nó cg ko khó.

boyvungsinh
19-12-2012, 01:01 AM
bạn có còn cái mạch ko, có thế share mình với code dc ko, thanks

dinhnambkhn
31-12-2012, 01:39 AM
Dung pic18f4331 do ban, tích hợp 1 bộ Qei. 8 kênh pwm.nếu điều khiển gị trí thì dùng encoder có số xung nhiều lên,tùy chất lượng của bộ điều khiển. Mình có làm bộ PID đk Động cơ DC dùng pic18f4331. Giao diện và vẽ đồ thị pid c#.nếu quan tâm gửi mail cho m:dinhnambkhn@gmail.com .ạ ở Vinh or Hà Tĩnh thì gặp nhau trao đổi.hj,đang thất nghjep free time,nên hướng dan chi tiết hơn(free nhé,chỉ muốn giúp a e thôi,^_^).phone 0909014168,sắp tới mình cũng làm 1 tutorial ,hẹn 1 tuần nữa.
Thân

albusnooo1
02-01-2013, 02:11 PM
Dung pic18f4331 do ban, tích hợp 1 bộ Qei. 8 kênh pwm.nếu điều khiển gị trí thì dùng encoder có số xung nhiều lên,tùy chất lượng của bộ điều khiển. Mình có làm bộ PID đk Động cơ DC dùng pic18f4331. Giao diện và vẽ đồ thị pid c#.nếu quan tâm gửi mail cho m:dinhnambkhn@gmail.com .ạ ở Vinh or Hà Tĩnh thì gặp nhau trao đổi.hj,đang thất nghjep free time,nên hướng dan chi tiết hơn(free nhé,chỉ muốn giúp a e thôi,^_^).phone 0909014168,sắp tới mình cũng làm 1 tutorial ,hẹn 1 tuần nữa.
Thân

nếu đc có thế share mình cái mạch với code luôn dc ko, mình đang làm đồ án về mảng này, thanks

dinhnambkhn
03-01-2013, 06:29 PM
Ok !bạn cứ gửi vào mail cho mình đi!
thấn!