LabVIEW Vietnam

cancel
Showing results for 
Search instead for 
Did you mean: 

Điều khiển tốc độ động cơ DC thông qua khối PID trong myRIO kết hợp với Encoder

H3.PNG

Nhờ mọi người cho ý kiến với

mình dùng card myRIO 1900

encoder mình có độ phân giải 360 xung/vòng (mình chỉ dùng 1 pha)

động cơ dc có tốc độ max=40 vòng/phút

set từ 0-5v hoặc từ 0-40 vòng/phút  (5v thì được 40 vòng/p)

ngõ ra mình cần thay đổi từ 0-5v

tín tiệu encoder đưa về mình đổi từ xung ra thành điện áp (hoặc đổi ra tốc độ) rồi đưa vào pid

Mình đang gặp khó khăn ở chỗ là xung đếm của encoder cứ tăng liên tục mà điện áp thì chỉ tăng đến 5v dẫn đến tín hiệu ra không bằng với giá trị set.

Download All
0 Kudos
Message 1 of 11
(13,280 Views)

mình nghĩ ngõ ra phải là PWM chứ nhỉ.?

Thêm vào nữa ngõ ra analog của MyRio chỉ ra trong khoảng 0-3.3V thôi

0 Kudos
Message 2 of 11
(9,143 Views)

Chào bạn vinh155,

mình nghĩ bạn gặp vấn đề thời gian mỗi vòng lặp (while loop) trong trương trình của bạn và cách đọc về tín hiệu từ encoder

Về việc đọc tín hiệu encoder, số xung bạn đọc về trong một khoãng thời gian sẽ là vận tốc quay của động cơ. Ví dụ mỗi vòng lặp (while loop) của chương trình là 100 ms, có 2 cách để bạn tính vận tốc quay của động cơ: một là cứ mổi vong lặp bạn đọc giá trị xung trong 100ms rồi reset encoder về 0, hai là lấy giá trị mới của encoder trừ đi giá trị cũ của encoder (cái này bạn sử động Feedback Node hay Shift Register) thì bạn sẽ ra tốc độ quay của motor trong vòng 100ms.

Encoder của bạn đọc 360 xung/vòng, động cơ có tốc độ tối đa 40 vòng/phút.  Vậy số xung tối đa động cơ sẽ đọc về là 24xung/100ms.

Thời gian mỗi vòng lặp nhanh thì số xung đọc về được từ encoder sẽ ít nhưng PID sẽ có nhiu gia trị để tính toán hơn. nếu thời gian mỗi vòng lặp chậm thì số xung đọc được từ encoder sẽ nhiều nhưng PID sẽ chậm phản ứng.

mình hay chọn 100ms cho mỗi chu kì vòng lặp.

Bạn có thể tạo một chương trình để đọc về tốc độ động cư trước, sau đó thêm điều khiển PIS sau như vậy sẽ dễ dàng hơn

Trong Myrio essitial guide co vi dụ về điều khiển motor, bạn có thể nghiên cưu sơ qua , mỗi ví dụ đề có VI đi kèm nên rất dễ hiểu

http://www.ni.com/white-paper/14621/en/

chúc bạn thành công

Message 3 of 11
(9,144 Views)

chào bạn xaxa9ztb,

digital output của NI Myrio là 3.3V còn Analog output là 0 tới +5V.

bạn có thể check lại tại đây http://digital.ni.com/manuals.nsf/websearch/EE9557A29E63D0F986257BB8005700C5

0 Kudos
Message 4 of 11
(9,144 Views)

cám ơn ý kiến của bạn hiik3n

mình sẽ thử.

0 Kudos
Message 5 of 11
(9,144 Views)

bạn hiik3n

cho mình hỏi thêm là ở đây mình tính 1vong quay sẽ là 360 xung, 40 vòng là 14400 xung, nếu tính giá trị delta xung = (xung sau- xung trước)  thì trong thời gian 1 chu kì của vòng lặp while sợ chắc không đủ số xung để quy đổi sang giá trị điện áp hoặc tốc độ.

còn nếu làm theo cách sau 1 chu kì của while thì reset giá trị xung của encoder thì giá trị hồi tiếp về sẽ đột ngột giảm xuống 0 thì sao

0 Kudos
Message 6 of 11
(9,144 Views)

Chào bạn Vinh155,

ban đầu bạn quy ước là 0V ứng với 0 xung/ phút và 5V là 360*40=14400 xung/phút. đó là vận tốc của bạn tính trên 1 phút, bây giờ bạn có thể chuyển về vận tốc trong 1 vòng lặp while, mình ví dụ là mình đặt 100ms, thì 0V sẽ ứng với 0 xung/100ms và 5V ứng với 24xung/100ms. đây chỉ là cách chuyễn đỗi đơn vị phù hợp thôi.

còn về reset encoder thì cũng giống như bạn lấy giá trị của encoder vòng lặp này trừ đi vòng lặp trước đó để lấy được giá trị xung đọc được trong 1 chu kì của vòng lặp while thôi .

bạn có thể nói rõ hơn về việc sử dụng analog output để điều khiển động cơ không?

Message 7 of 11
(9,144 Views)

Chào bạn hiik3n

Mình đã hiểu ý bạn nói, mình đã tính được xung sau - xg trước trong thời gian vòng lặp while rồi, nhưng mà nó còn dao động lớn so với giá trị đặt, mình thấy thời gian vòng lặp càng ngắn thì nó càng dao động nhiều hơn, còn thời gian lấy mẫu của PID mình cug chưa hiểu rõ, có phải dt(s) trong khối PID là thời gian lấy mẫu hay không, với lại cái thời gian của vòng lặp có liên hệ gì với thời gian lấy mẫu hay không.

Còn phần ngõ ra analog sẽ xuất ra từ 0-5v để mình đưa điện áp này qua 1 cái bo mạch PWM để điều khiển động cơ có điện áp max=24v, khi cấp vào bo công suất 5v thì nó sẽ cho ra 24v để điều khiển động cơ

0 Kudos
Message 8 of 11
(9,144 Views)

chào bạn Vinh155,

bạn có thể chụp hình VI của bạn xem thế nào không?

còn về PID VI thì bạn có thể nghiên cứu rõ hơn ở đây

http://zone.ni.com/reference/en-XX/help/371361L-01/lvpid/pid_vi/

0 Kudos
Message 9 of 11
(9,144 Views)

mình cũng chưa điều khiển được động cơ với PID

mình dùng khối PWM chứ k dùng DAC như bạn Vinh

động cơ của mình nó chạy đến gần giá trị setpoint thì lại trở về 0. cứ như thế nên nó chạy bị giật cục

Động cơ của mình là 448 xung một vòng.

tốc độ tối đa là gần 4000rpm.

Bạn nào xem cho mình xem mình sai ở đâu

pid.png

0 Kudos
Message 10 of 11
(9,144 Views)