PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   Điều khiển PID 2 động cơ (http://www.picvietnam.com/forum/showthread.php?t=5424)

vutranthelan 30-11-2009 12:21 AM

Điều khiển PID 2 động cơ
 
Cho em hỏi để điều khiển 2 PID động cơ thì làm cách nào nhỉ. Em xài còn PIC6F877A
Hiện tại em có 2 hướng giải quyết:
Cách 1: Em dùng 1 mạch để đều khiển PID cùng lúc 2 động cơ. Mà kẹt cái con này chỉ có 1 ngắt ngoài để đếm xung à. Còn đếm xung bằng Timer0 thì em có thử làm rồi, nhưng nó đếm không chính xác.
Cách 2: Em tính dùng 2 mạch để điều khiển 2 động cơ nhưng làm như thế thì giao tiếp cổng COM như thế nào nhỉ, vì cần tới 2 cổng COM lận.
Mọi người góp ý cho em nhé.

dung h 30-11-2009 08:37 AM

Điều khiển PID động cơ:
mình thấy thế này
c1: bạn nên dùng timer để đếm xung ecoder thì hay hơn, không phải nó không chính xác đâu bạn ah,nếu bạn tính toán hợp lý,trừ đi các vòng lặp,thời gian câu lệnh thì rất chính xác đó ,nó tối ưu hơn dùng ngắt còn nếu bạn dùng ngắt với ecoder có số xung lớn thì chương trình của bạn sẽ liên tục nhảy đến ngắt nên o tốt,
- còn nếu bạn dùng ngắt thì 16f877 không chỉ có 1 ngắt ngoài đâu. nó còn có ngắt ngoài RB bạn có thể sử dụng như ngắt INT. nhưng nếu sử dụng 2 ngắt như vậy thì bạn đếm xung dc từ 2 ecoder nhưng nếu 1 thời điểm mà có 2 ngắt đều xẩy ra thì sao? khi đó bạn cần ưu tiên ngắt nên sẽ dẫn tới thiếu chính xác ,nếu mức độ dk bình thường thì sai số đó tạm chấp nhận dc . với lại pic của bạn cơ bản luôn ở trong ct ngắt,nên ct chính main của bạn o làm dc gì cả
- bạn nên dùng pic 18f có timer0,1,2,3 bạn sử dụng 1 timer để tạo ngắt thời gian,còn các timer 16bit khác để đếm xung và có các bộ power pwm để dk đông cơ
cách 2 của bạn: không cần dùng 2 mạch để dk nhưng nếu bạn muốn bạn hoàn toàn có thể truyền nhân dữ liệu cổng com cho nhiều pic : đó là bạn giao tiếp pic ở chế độ master-slave khi đó master giao tiếp với com. hoắc 1 vdk vừa nhận vừa truyền data nhận cho vdk khác và vừa thực hiện lênh

PID mình cũng không hiểu lắm về nó . mình đang định làm về nó.bạn đã làm với 1 động cơ thì có thể nói rõ hơn cách điều khiển nó không?
bây giờ mình có tốc độ đặt a,tốc đọ phản hồi từ ecoder b, duty ứng với tốc độ đặt trước c
vậy mình muốn điều khiển ổn định tốc đôh cho động cơ thì mình làm thế nào từ các tham số mình có để tìm ra các hệ số Ki,Kp,Kd?
thanks!

vutranthelan 01-12-2009 10:02 PM

Trích:

Nguyên văn bởi dung h (Post 31799)
Điều khiển PID động cơ:
mình thấy thế này
c1: bạn nên dùng timer để đếm xung ecoder thì hay hơn, không phải nó không chính xác đâu bạn ah,nếu bạn tính toán hợp lý,trừ đi các vòng lặp,thời gian câu lệnh thì rất chính xác đó ,nó tối ưu hơn dùng ngắt còn nếu bạn dùng ngắt với ecoder có số xung lớn thì chương trình của bạn sẽ liên tục nhảy đến ngắt nên o tốt,
- còn nếu bạn dùng ngắt thì 16f877 không chỉ có 1 ngắt ngoài đâu. nó còn có ngắt ngoài RB bạn có thể sử dụng như ngắt INT. nhưng nếu sử dụng 2 ngắt như vậy thì bạn đếm xung dc từ 2 ecoder nhưng nếu 1 thời điểm mà có 2 ngắt đều xẩy ra thì sao? khi đó bạn cần ưu tiên ngắt nên sẽ dẫn tới thiếu chính xác ,nếu mức độ dk bình thường thì sai số đó tạm chấp nhận dc . với lại pic của bạn cơ bản luôn ở trong ct ngắt,nên ct chính main của bạn o làm dc gì cả
- bạn nên dùng pic 18f có timer0,1,2,3 bạn sử dụng 1 timer để tạo ngắt thời gian,còn các timer 16bit khác để đếm xung và có các bộ power pwm để dk đông cơ
cách 2 của bạn: không cần dùng 2 mạch để dk nhưng nếu bạn muốn bạn hoàn toàn có thể truyền nhân dữ liệu cổng com cho nhiều pic : đó là bạn giao tiếp pic ở chế độ master-slave khi đó master giao tiếp với com. hoắc 1 vdk vừa nhận vừa truyền data nhận cho vdk khác và vừa thực hiện lênh

PID mình cũng không hiểu lắm về nó . mình đang định làm về nó.bạn đã làm với 1 động cơ thì có thể nói rõ hơn cách điều khiển nó không?
bây giờ mình có tốc độ đặt a,tốc đọ phản hồi từ ecoder b, duty ứng với tốc độ đặt trước c
vậy mình muốn điều khiển ổn định tốc đôh cho động cơ thì mình làm thế nào từ các tham số mình có để tìm ra các hệ số Ki,Kp,Kd?
thanks!

Mình điều khiển PID 1 động cơ rồi, nhưng mình dùng cách điều xung một cách thủ công, tức là high 1 pin nào đó, rồi delay, rồi low pin đó xuống rồi delay. Nếu bạn dùng chức năng PWM của PIC thì mình ko giúp đc rồi
Còn hệ số PID thì theo mình biết là làm thí nghiệm nhiều lần đề mò ra theo phương pháp nào đó, chứ không có cách nào tìm ra chính xác hệ số PID cả

lybao_huy 02-12-2009 04:48 PM

Pid
 
nếu bạn muốn dùng động cơ dc không chổi quét (brushless dc Motor) thay cho động cơ dc chổi quét thì phone cho minh.
tên mình Bảo Huy.
phone:0906745086

minhduc_bn 18-01-2011 09:40 AM

minh đang làm đề tài dùng 18f4431 để điều khiển động cơ đc dùng bộ điều khiên pid và giao tiếp với máy tính. xin được giúp đỡ tài liều và hướng dẫn. xin chia sẻ tài liệu qua mail. ducvm2512@yahoo. trân thành cảm ơn mọi sự giúp đỡ

arm_cortex01 03-04-2011 06:48 PM

mình nữa nghen,
arm_cortex@yahoo.com
chân thành cảm ơn mọi sự giúp đỡ

Thaison202 04-04-2011 12:45 PM

Trích:

Nguyên văn bởi vutranthelan (Post 31793)
Cho em hỏi để điều khiển 2 PID động cơ thì làm cách nào nhỉ. Em xài còn PIC6F877A
Hiện tại em có 2 hướng giải quyết:
Cách 1: Em dùng 1 mạch để đều khiển PID cùng lúc 2 động cơ. Mà kẹt cái con này chỉ có 1 ngắt ngoài để đếm xung à. Còn đếm xung bằng Timer0 thì em có thử làm rồi, nhưng nó đếm không chính xác.
Cách 2: Em tính dùng 2 mạch để điều khiển 2 động cơ nhưng làm như thế thì giao tiếp cổng COM như thế nào nhỉ, vì cần tới 2 cổng COM lận.
Mọi người góp ý cho em nhé.

Em dùng giao tiếp mater và slaver để điều khiển cái này hơi tốn kém chút. thêm một con PIC nữa.

Thaison202 04-04-2011 06:03 PM

reply
 
Trích:

Nguyên văn bởi vutranthelan (Post 31793)
Cho em hỏi để điều khiển 2 PID động cơ thì làm cách nào nhỉ. Em xài còn PIC6F877A
Hiện tại em có 2 hướng giải quyết:
Cách 1: Em dùng 1 mạch để đều khiển PID cùng lúc 2 động cơ. Mà kẹt cái con này chỉ có 1 ngắt ngoài để đếm xung à. Còn đếm xung bằng Timer0 thì em có thử làm rồi, nhưng nó đếm không chính xác.
Cách 2: Em tính dùng 2 mạch để điều khiển 2 động cơ nhưng làm như thế thì giao tiếp cổng COM như thế nào nhỉ, vì cần tới 2 cổng COM lận.
Mọi người góp ý cho em nhé.

bạn dùng 2 Pic giao tiếp i2c với nhau
mỗi con đọc encoder và điều khiển một động cơ


Múi giờ GMT. Hiện tại là 07:54 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam