11-10-2014 06:44 AM
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.
11-11-2014 08:02 AM
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
11-11-2014 11:21 AM
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
11-11-2014 11:25 AM
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
11-12-2014 04:20 AM
cám ơn ý kiến của bạn hiik3n
mình sẽ thử.
11-12-2014 06:58 AM
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
11-12-2014 10:31 PM
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?
11-13-2014 03:42 AM
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ơ
11-21-2014 09:36 AM
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/
11-22-2014 06:05 PM
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