PDA

View Full Version : Xin cùng trao đổi pic18f4331


minhpic
22-05-2006, 06:26 PM
Có đàn anh nào đã nghiên cứu modul QEI của pic18f4331 xin cùng trao đổi, đàn em đang sử dụng modul này để dk động cơ DC.

aichacha_fighting
18-06-2006, 05:50 PM
chào bạn,mình dg dùng con 18f4431 để dk đông cơ nè,có j bọn mình cùng trao đổi nhé

falleaf
18-06-2006, 07:14 PM
Mọi người cùng viết về nguyên lý của module này lên nhé. Mỗi lần học và viết lại, sẽ tích luỹ được khá nhiều, và người khác có thể hỗ trợ kiểm tra, bổ sung...

minhpic
20-06-2006, 09:41 AM
Đồng ý là thế nhưng mình thấy hình như mọi người quan tâm đến vấn đề này hơi ít đấy.

falleaf
20-06-2006, 11:45 AM
Thực sự rất nhiều người quan tâm, nhưng một thực tế cho thấy rằng mọi người vẫn chưa có thói quen viết. F không thể viết tất cả mọi điều được, mà cũng chẳng biết hết mọi điều để viết, cũng như không có đủ thời gian để viết.

PIC18F4331, 4431 là con PIC mang nhiều kỷ niệm đối với picvietnam đấy. Nhờ con PIC này mà F và bác BA quen nhau đó :).

Nếu như các bạn nghiên cứu nó, viết về nó, cá nhân F ủng hộ rất nhiều. Tuy vậy, thời gian này, diễn đàn chưa hoàn thiện các module cho 877A, F dành ưu tiên cho nó là một, hai nữa là, diễn đàn còn có lĩnh vực về điều khiển và robotics, cũng cần phải chú ý hoạt động cân bằng, đó cũng là lý do vì sao F không dành thời gian nhiều cho nó được. Bạn hãy dành thời gian viết trước một vài đoạn, và mọi người sẽ hưởng ứng thôi, chúng ta làm công việc lá cờ đầu, chủ động làm trước, kêu gọi sau.

Chúc vui.

linhnc308
05-07-2006, 02:04 PM
Chào a F. Lâu rồi mới lại vào diễn đàn. Vừa hay thấy có bài về con 4331, vừa qua cũng có làm việc với con này. Phải công nhận là nhờ có bộ QEI này mà việc đọc Encoder và ĐK Motor đơn giản đi nhiều.
Để làm việc với khối này cũng khá đơn giản, tùy loại Encoder và yêu cầu mà khởi tạo cho phù hợp.

bien_van_khat
06-07-2006, 09:16 AM
Hay quá, vậy cho tui hỏi tý nhé. Cái mode complementary của module Power PWM mục đích của nó làm gì?

namqn
06-07-2006, 08:42 PM
Theo datasheet của PIC18Fxx31 thì Complementary mode của Power Control PWM module thường dùng để kích cho các nửa cầu (half-bridge) trong các bộ nghịch lưu, như vậy sẽ tránh trùng dẫn ở các nửa cầu. Ngoài ra module còn cho phép thêm các thời gian chết (dead-time) vào để thực hiện việc tránh trùng dẫn tốt hơn.

Thân,

bien_van_khat
07-07-2006, 09:38 AM
Cảm ơn bác nhiều nhé. vậy là đâu có tận dụng 2 đường của nó để dk motor chổi quét được đúng không nhỉ.

namqn
07-07-2006, 06:38 PM
Bạn vẫn còn Independent mode mà. Bạn có thể điều khiển để hai ngõ ra (của cùng một cặp chân PWM) cùng đóng trong Independent mode. Thậm chí, bạn có thể điều khiển hai ngõ ra một cách độc lập hoàn toàn bằng PWM Channel Override (ví dụ, cho BLDC).

Ngoài ra, dùng Complementary mode đúng cách vẫn điều khiển động cơ DC thường tốt (cho phép đổi chiều).

Thân,

bien_van_khat
07-07-2006, 09:13 PM
Ngoài ra, dùng Complementary mode đúng cách vẫn điều khiển động cơ DC thường tốt (cho phép đổi chiều).


Đây chính xác là những gì em quan tâm. Tuy nhiên em lại nghĩ mode này chỉ dùng với mấy cái tải push-pull mà thôi. Không biết ý của bác ở đây cụ thể như thế nào?

namqn
07-07-2006, 09:20 PM
Nếu muốn dùng Complementary mode để điều khiển động cơ DC thường thì chúng ta dùng hai nửa cầu. Một nửa cầu được điều khiển bằng một cặp ngõ ra chạy ở Complementary mode, dùng để điều chỉnh PWM, tức là để điều chỉnh áp trung bình đặt vào động cơ. Còn nửa cầu kia thì chúng ta chỉ dùng để chọn chiều quay của động cơ (đóng khóa trên hay khóa dưới tùy theo chiều quay), tất nhiên ở mỗi chiều quay thì công thức tính duty cycle của cái nửa cầu PWM kia phải khác, và có vài cách để hiện thực nó.

Thân,

bien_van_khat
07-07-2006, 09:44 PM
ừ nhỉ, cảm ơn bác nhé.

Khi đảo chiều quay thì duty cycle sẽ là bù của lúc bình thường đúng không nhỉ (nếu không tính dead time)

namqn
07-07-2006, 11:34 PM
Khi đảo chiều quay thì khóa trên và dưới của nửa cầu PWM đổi vai trò. Các con xx31 luôn coi khóa dưới là chủ động (dùng để tính duty cycle) và lấy khóa trên là bù của khóa dưới, do đó khi đảo chiều quay thì nên dùng biện pháp phần cứng để đổi vai trò của các khóa. Một số sơ đồ mà các bạn đã đưa lên trong luồng "Tìm người làm bài tập thực hành" có thực hiện đảo chiều bằng phần cứng, bạn tham khảo thêm ở đó.

Thân,

bien_van_khat
08-07-2006, 12:07 PM
Em có 1 vấn đề thế này, ví dụ như nửa cầu bên trái điều khiển = 2 chân PWM, nửa bên phải chọn hướng. Nếu con phía dưới - phải dẫn thì trong 1 chu kỳ lúc con trái - trên dẫn motor quay, đến lúc con dưới - trái dẫn thì 2 đầu dây motor nối tắt, y như bị brake. Em ko bít có vấn đề gì, vì chưa cho chạy thử. Nhưng có lẽ thực tế cách này dường như ko hay. bác namqn góp ý dùm em nhé.

sphinx
08-07-2006, 07:06 PM
Break mới đúng phương pháp PWM :D
Bác thử băm động cơ ở 20k xem, nếu không Break thì nó sẽ thế nào?

namqn
08-07-2006, 08:24 PM
Em có 1 vấn đề thế này, ví dụ như nửa cầu bên trái điều khiển = 2 chân PWM, nửa bên phải chọn hướng. Nếu con phía dưới - phải dẫn thì trong 1 chu kỳ lúc con trái - trên dẫn motor quay, đến lúc con dưới - trái dẫn thì 2 đầu dây motor nối tắt, y như bị brake. Em ko bít có vấn đề gì, vì chưa cho chạy thử. Nhưng có lẽ thực tế cách này dường như ko hay. bác namqn góp ý dùm em nhé.
Như sphinx đã nói, điều khiển đúng thì chúng ta cần nối tắt khi hết duty cycle.

Vấn đề là nếu bạn không nối tắt khi hết duty cycle thì dòng điện của động cơ sẽ tìm đường khác để chạy tiếp (do điện cảm của động cơ duy trì dòng điện một cách liên tục). Hệ quả là diode ngược của khóa phía dưới của nửa cầu PWM (giả sử đang dùng MOSFET) cùng với diode ngược của khóa phía trên của nửa cầu kia sẽ tạo đường dẫn cho dòng điện động cơ.

Sẽ có 2 trường hợp xảy ra. Động cơ nhẹ tải, do đó dòng điện trung bình nhỏ, khi đó dòng điện sẽ có thể trở về giá trị 0, và các khóa sẽ dẫn dòng điện theo chiều ngược lại cho đến khi bạn bắt đầu chu kỳ mới. Nếu động cơ nặng tải, dòng điện trung bình đủ lớn, khi đó dòng điện sẽ không về giá trị 0, các diode ngược sẽ phải làm việc cho đến khi bạn bắt đầu chu kỳ mới.

Trong cả hai trường hợp, áp đặt vào động cơ sẽ là +V khi ở phần duty cycle, và -V ở phần còn lại của chu kỳ, thay vì +V ở phần duty cycle, và 0 ở phần còn lại của chu kỳ. Như vậy, khoảng điều khiển của bạn bị hẹp lại, và duty cycle = 50% sẽ ứng với điện áp trung bình bằng 0! (một cách lý tưởng).

Đây không chỉ là lý thuyết, vì nó đã xảy ra khi sinh viên của tôi làm đề tài điều khiển PID cho động cơ DC cách đây khoảng 3 năm.

Thân,

bien_van_khat
08-07-2006, 09:54 PM
Hì cảm ơn bác namqn rất nhiều.

Bác sphinx đừng mỉa mai em thế tội nghiệp, trước giờ em có rờ tới động cơ bao giờ đâu :D.

sphinx
11-07-2006, 12:23 AM
Đây không chỉ là lý thuyết, vì nó đã xảy ra khi sinh viên của tôi làm đề tài điều khiển PID cho động cơ DC cách đây khoảng 3 năm.

Thân,

Anh namqn cho em hỏi tí!
Cái đề tài điều khiển PID động cơ anh hướng dẫn ấy mà. Thực hiện mấy vòng điều khiển? dùng loại chíp nào? có tính hàm truyền động cơ không hay là chỉnh định Z-N. Anh nói rõ chút được không? Em muốn tham khảo chút thông tin:D

namqn
11-07-2006, 12:30 AM
Anh namqn cho em hỏi tí!
Cái đề tài điều khiển PID động cơ anh hướng dẫn ấy mà. Thực hiện mấy vòng điều khiển? dùng loại chíp nào? có tính hàm truyền động cơ không hay là chỉnh định Z-N. Anh nói rõ chút được không? Em muốn tham khảo chút thông tin:D
Cái đề tài này cậu sinh viên đó làm khi chưa nắm vững vi xử lý, cả điện tử công suất, nên chỉ làm vòng hở, dùng chip 89C51. Không tính hàm truyền cũng chẳng chỉnh định gì cả. Chỉ làm như một bài thí nghiệm nhỏ, cho phép thay đổi các hệ số P, I, D để thấy ảnh hưởng. Các hệ số được đặt từ máy tính, còn tốc độ thì được truyền về máy tính để vẽ đồ thị.

Thân,

sphinx
11-07-2006, 12:37 AM
Cái đề tài này cậu sinh viên đó làm khi chưa nắm vững vi xử lý, cả điện tử công suất, nên chỉ làm vòng hở, dùng chip 89C51. Không tính hàm truyền cũng chẳng chỉnh định gì cả. Chỉ làm như một bài thí nghiệm nhỏ, cho phép thay đổi các hệ số P, I, D để thấy ảnh hưởng. Các hệ số được đặt từ máy tính, còn tốc độ thì được truyền về máy tính để vẽ đồ thị.

Thân,
:D
Theo anh thì để điều khiển DC Motor đến nơi đến chốn thì cần làm những bước nào, áp dụng các phương pháp điều khiển nào? Ý em là xây dựng một hệ điều khiển DCservo như Tây nó làm từ rất lâu rồi ý:D. Áp dụng trong các hệ CNC cũ, hoặc tay máy.

Hôm trước đi làm thí nghiệm CNC thấy cái tay robot 6 bậc ngon quá mà toàn điều khiển bằng động cơ PITTMAN Encoder 504 xung (loại kiếm được ngoài chợ mới hay chứ)

falleaf
11-07-2006, 01:20 AM
Nên để dành những vấn đề này thảo luận trong phần điều khiển PID động cơ DC. Lúc đó sẽ có nhiều cái để nói.

Chúc vui

scentoflove
01-08-2006, 01:33 AM
Em đang dùng module QEI của 4331 để đọc encoder. Dùng 2x update mode, ngắt bởi INDX
Khi set bit VLEM=1 (Velocity mode disabled) thì có thể dùng ngắt IC2QEI để trả về số xung encoder, ko quan tâm đến vận tốc
Khi set bit VLEM=0 (Velocity mode enabled) để xác định được thời gian thì ko dùng ngắt IC2QEI để trả về số xung encoder (ko xảy ra ngắt do chân INDX)
em nghĩ 2 mode position và velocity ko thể chạy cùng 1 lúc, ko biết có đúng ko

scentoflove
15-08-2006, 12:06 AM
Em đang bị bí ở mode velocity của QEI. Theo em hiểu thì ở mode velocity timer5 set mode external sync hoặc counter, đếm thời gian giửa 2 xung của pha A. Em ko hiểu trong datasheet noi INT_IC1 xảy ra khi co xung velcap, khi đó 2 thanh ghi VELRH và VELRL lưu giá trị đếm của timer5.
Nhưng em ko biết xung velcap đó làm sao mà có -> ko ngắt INT_IC1 , mọi người giúp em với

Đoạn code em viết

//KHAI BAO NGAT NGOAI
enable_interrupts(GLOBAL);
enable_interrupts(INT_IC1);

//KHAI BAO QEI
QEICON=00111001;
setup_timer_5(T5_EXTERNAL_SYNC);

chumeodihia
08-10-2006, 12:42 AM
he he mình cũng đang làm để tài điều khiển đông cơ dùng module PWM của pic8f4431 và dang nghiên cứu dùng encoder để hồi tiếp vận tốc để tính toán sai số phương pháp điều khiển.Có gì cùng thảo luận nhé.vì mình chưa biết tí gì về encoder nên mong các bạn chỉ bước đầu.hihi thanks

chú mèo đihia tái bút
thanks

fluidmech
20-12-2006, 11:36 AM
Chào các bác,
em đọc trong datasheet cua PIC 18F4431, thay co 8 PWM, chia lam 4 cặp. Nhưng đến khi em dùng ICD2 cua batbatdieu, lập trình bằng PICC rồi burn nhưng không sử dụng được PWM 4,5,6,7. Em cũng mới bắt đầu học thôi, mong các bác chỉ dùm, em cảm ơn các bác nhiều nhiều.
FM

pdhvp02
16-05-2007, 02:58 AM
Em mới tìm hiểu PIC18F4431 để điều khiển động cơ. Cho hỏi các bác dày dạn kinh nghiệm là có cách nào dùng 1 con 4431 để đọc đồng thời 4 encoder (có phase A, B, Z) được không và nếu xử lý cho cả 2 chiều thuận và ngược thì làm sao?

tinhbanso
22-05-2007, 09:26 PM
mình đang làm đồ án về điều khiển vi trí động cơ dùng pic18 thông qua cổng usb nhưng không có mạch và nguyên lý, điều khiển qua cổng com cũng được mình sẽ phát triển lên. bác nào có cho em. em đang đau đầu về nó. có gì gửi qua mail cho mình cũng được : dhgiang85@gmail.com. cám ơn các bác

Hi@hi
09-04-2008, 01:25 PM
mode velocity timer5 set mode là inernal sync timer hoặc external sync counter. bác scentoflove xem lại datasheet nha!. tôi đã dung module này rồi đúng là tiện thật.

namqn: scentoflove hỏi phần này cách đây hơn 1 năm rưỡi rồi, và có lẽ đã làm xong từ lâu. Bạn để ý thông tin thời gian khi post bài nhé.

scentoflove
09-04-2008, 09:25 PM
Thanks hi@hi, thật sự thì mình cũng ít dùng mode này, lúc đầu mới chơi 4431 thì tò mò sau này wen rồi thi đa số lại dùng mode position.

tamrua
26-05-2008, 10:31 PM
chào mọi người, mấy hôm nay, em làm xong mạch test rôi, Pickit2 cug chạy rồi, em cũng đang bắt đầu làm 18f4431 điều khiển động cơ đây,
code: power_pwm đây, nạp xong nó im re, các bác giúp e với,
==================================================
int16 duty1=2000;
int16 ref=0,out=0;
signed int16 udk=0, error=0;


void main()
{
setup_adc_ports( ALL_ANALOG );
setup_adc(ADC_CLOCK_INTERNAL );
delay_ms(1000);
setup_power_pwm_pins(PWM_OFF,PWM_OFF, PWM_OFF,PWM_OFF);
setup_power_pwm_pins(PWM_COMPLEMENTARY,PWM_COMPLEM ENTARY, PWM_COMPLEMENTARY,PWM_COMPLEMENTARY);
setup_power_pwm(PWM_CLOCK_DIV_4|PWM_FREE_RUN|PWM_D EAD_CLOCK_DIV_4,1,10000,1000,0,1,10);
set_power_pwm0_duty(2000);
//set_power_pwm2_duty(2000);

while(1)
{
set_adc_channel(0);
delay_us(10);
ref=read_adc();
set_adc_channel(1);
delay_us(10);
out=read_adc();
error=ref-out;
udk=5*error;
if (udk>2000)
{
udk=2000;
}
if (udk<-2000)
{
udk=-2000;
}
duty1=2000+udk;
set_power_pwm0_duty(duty1);

}

}
======================================

anh nào giúp em với, còn đọc encoder nữa. em chưa viết được.
chân thành cảm ơn các huynh.

scentoflove
27-05-2008, 12:49 AM
Bạn ko up sơ đồ mạch thì làm sao có thể giúp bạn. Bạn cũng ko cho biết là im re là ko có xung pwm trên chân PWM0 PWM1 hay là có xung nhưng động cơ ko chạy
Có 1 số điểm trong setup của bạn chưa hợp lý:
_ Giá trị Initial PTMR của bạn là 10000, trong khi giá trị PTPER là 1000.
_ Trước khi set duty bạn nên overide false trên các chân PWM0 PWM1

tamrua
27-05-2008, 11:23 AM
em làm mạch trên testboard nên chưa có sơ đồ, anh thông cảm, đại khái là em nối PWM0(RB0),PWM1(RB1), vào mạch công suất cầu h có ir2184, riêng mạch công suất em test chạy rồi, "ỉm re" em dung LED thử nó vẩn tối thui,

vậy Initial PTMR, PTPER, phải sữa như thế nào hả anh. nó là tham số gì vậy?.
còn set duty (overide false) nữa.

còn Encoder nối với C4,C5, các huynh giúp code giúp em với.

nói tóm lại: em muốn điều khiển vị trí thông qua máy tính.
em mới tập tành thôi, nên có nhiều cái còn mơ hồ quá, mong các huynh chì giáo.
chân thành cảm ơn trước.
thân.

scentoflove
28-05-2008, 01:18 AM
Bạn ko up sơ đồ mạch nên có thể đoán là bạn dùng 2 con ir2184 để kich Fet cho cầu H và mỗi chân pwm đk 1 con ir. Như vậy bạn chọn mode complementary là sai vì khi pwm0 = 1 thi nữa cầu trên 1 bên sẽ mở đồng thời pwm1 = 0 nữa cầu dưới bên còn lại mở -> động cơ chạy, nhưng khi pwm0 = 0 và pwm1 = 1 chuyện ngược lại xảy ra -> động cơ chạy hướng ngược lại. Bạn nên chọn lại mode khác.

Bạn nên xem lại datasheet của 4331 để xem hoạt động của pwm như thế nào để giải quyết 2 câu hỏi của bạn, bạn cũng có thể đọc ví dụ của ccs để hiểu thêm.
_ Thanh ghi PTMR có chức năng gì và nó hoạt động ra sao, liên quan tới các thanh ghi PTPER và PDC ra sao.
_ Power PWM trên 4331 cho phép người lập trình đk linh hoạt từng chân pwm như set 1 hoặc 0 hoặc có thể xuất xung. Bạn xem phần overide trong datasheet

Vấn đề đọc encoder trên 4331 có module QEI chuyền dùng đọc encoder, bạn nên đọc datasheet để hiểu.

Sau khi bạn xem lại datasheet bạn có thể giải quyết được vấn đề.

tungtuantu
17-09-2008, 05:15 PM
bác scentoflove hay bác nào đã viết cho QEI và PWM cho con pic này hoạc dspic thì post lên bài ví dụ nào đó, hoặc 1 chuong trình bất kì nào liên quan đến 2 cái này cho bọn em tham khảo với,
thank mọi nguòi nhiều

DK_Pro
30-09-2010, 01:25 AM
EM đang sử dụng QEI của con 18f4431 , có include 18F4431.h và enable_interrupts(INT_IC1);
enable_interrupts(INT_IC2QEI);
enable_interrupts(INT_IC3DR);
Nhưng khi dịch nó vẫn ko hiểu được QEICON, CAP1CON, ....
Các bác giúp giùm đi

soiden
13-11-2010, 11:48 PM
cho mình hỏi có ai code QEI trên CCS k? trong datasheet của PIC18f4431 có module này, nhưng trong file .h kèm theo của CCS lại k hề nói đến các tham số cấu hình cho module này,..mình dùng CCS PCWHD v4.0084, k biết các bản sau có k, ai biết giúp giùm mình cái

wakener_thesun
14-11-2010, 05:24 PM
cho mình hỏi có ai code QEI trên CCS k? trong datasheet của PIC18f4431 có module này, nhưng trong file .h kèm theo của CCS lại k hề nói đến các tham số cấu hình cho module này,..mình dùng CCS PCWHD v4.0084, k biết các bản sau có k, ai biết giúp giùm mình cái

dùng phiên bản 4.108 là có rồi

dungd4
04-05-2011, 12:41 AM
các anh ơi giúp em với!em dùng vi điều khiển pic18f4431 để điều khiển cầu nghịch lưu áp làm inverter,khi mô phỏng trên proteus thì ra sóng sine đúng biên độ và tần số nhưng điện áp cứ tăng lên rồi giảm xuống theo chu kỳ?em đã làm mạch và chạy cũng như mô phỏng vậy!các anh xem giúp có phải vì chương trình hay vì phần cứng em có gì sai không?
Đây là chương trình và mô phỏng của em!