PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > dsPIC - Bộ điều khiển tín hiệu số 16-bit

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 25-04-2008, 02:44 PM   #1
hungbkhn
Trưởng lão PIC bang
 
Tham gia ngày: Jun 2006
Bài gửi: 39
:
Smile

***OVDCON ?

--> extract from AN957 page 4:
"The OVDCON register has two 6 bit fields in it. Each of the six bit fields corresponds to an output pin. The high byte portion of the OVDCON register, determines if the corresponding
output pin is driven by a PWM signal (when set to 1) or (when set to 0) driven Active/Inactive by the corresponding bit field in the low byte portion of the
OVDCON register. This feature allows the user to have PWM signals available, but not driving, at all output stages of the pins"

ý nghĩa của OVDCON là rõ ràng và hợp lí nếu hiểu là chân " is driven by a PWM signal"

*** ???
Trong khi em cần chọn bảng lookup có 1 kênh H và 1 kênh L dẫn ở mỗi thời điểm(tuần tự)
trong file hướng dẫn AN957 của microchip có phần hướng dẫn khai báo bảng đó như sau:
unsigned int stateLotable[]={0x0000,0x0210,0x2004,0x0204,0x0801,0x0810,0x2001 ,0x0000};
và dùng bảng đó để quy định kênh ưu tiên của các kênh PWM phát ra bằng lệnh:
OVDCON=stateLotable[hallvalue]
với hallvalue là một biến đọc về để xác định vị trí để phát xung của em.
Như thế có phải là quy định có hai kênh được đưa xung ra trong 1 thời điểm ko?
Nếu vậy thì giả thích như thế nào với những gì được viết trong datasheet?
Em đang làm đồ án và cần gấp câu trả lời,mong các bác giúp em![/QUOTE]

---> bạn có thể tham khảo AN885 page 11 để xem một ví dụ và tự viết cho mình.
Với 2 cái bảng có trong ví dụ, tôi chưa hiểu ý nó đặt ra nhưng hình như nó hơi chuối thì phải, nó không theo trinh tự ở hình 1, trang 1 AN957. Vi du khi HallValue = 2 thì firing Q2, Q6 nhưng OVDCON =0b 0010 0000 0000 0100 ???
Mong trao đổi với các bạn.
Chúc cuối tuần vui vẻ.

thay đổi nội dung bởi: hungbkhn, 25-04-2008 lúc 03:45 PM.
hungbkhn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-04-2008, 08:58 PM   #2
doi_gio_hu
Nhập môn đệ tử
 
Tham gia ngày: Apr 2008
Bài gửi: 6
:
chào anh Hungbkhn

Em xem lại và thấy cái bảng ng][ì ta lập trong file AN957 là đúng rồi đó anh ạ.
Lý do của việc lập bảng không theo tuần tự là do tín hiệu Hall thu về cũng không theo tuần tự và bảng này được lập là để phù hợp với tín hiệu Hall đó.
Tín hiệu Hall thu về của ta không như trong tài liệu AN85 cung cấp đâu.Em đã tiến hành đo thực tế và thu được bảng tín hiệu Hall như sau:011;001;101;100;110;010
Nếu đem so sánh với bảng trong file AN957 thì hoàn toàn phù hợp về thứ tự dẫn của các pha.
Em đang làm và gặp phải một vấn đề:em không vào được ngắt của ADC. Chương trình của em như sau:

Code:
#define _dsPIC30F4011_
#include "C:\Program Files\Microchip\MPLAB C30\support\h\p30F4011.h"
//Macros for Configuration Fuse Registers
_FOSC(CSW_FSCM_OFF & FRC_PLL4); //Set up for Crystal multiplied by 4x PLL 
_FWDT(WDT_OFF);                 //Turn off the Watch-Dog Timer.
_FBORPOR(PBOR_OFF & MCLR_EN);   //Enable MCLR reset pin and turn off the power-up timers
_FGS(CODE_PROT_OFF);            //Disable Code Protection

 
void Init_ADC10(void) {
	ADPCFG = 0xFFFE;		//Cac chan khac la digital, chan AN0/RB0 la analog
	ADCON1 = 0x0060;		//Module PWM cham dut lay mau va kich hoat
							//viec chuyen doi A/D
//	ADCON1 = 0x0040;		//Timer 3 cham dut lay mau va kich hoat
							//viec chuyen doi A/D
	ADCON2 = 0;
	ADCHS = 0;				//Kenh 0 doc tin hieu giua AN0 va AVss
	ADCSSL = 0;				//Khong quet cac ngo vao
	ADCON3 = 0x0103;		//Dung 1 TAD cho lay mau, dung clock he thong,
							//TAD = 2xTcy = 250 ns
/*	TMR3 = 0;				//Xoa thanh ghi dem cua Timer 3
	PR3 = 0x03E8;			//Nguong delay cho TMR3 la khoang 1 ms
	T2CON = 0x8010;			//Prescale = 1:8, bat cho TMR3 chay
*/
	_ADIF = 0;				//Xoa co ngat ADC
	_ADIE = 1;				//Cho phep ngat ADC
	_ADON = 1;				//Bat module ADC
	_ASAM = 1;				//Khoi dong che do tu dong lay mau
}

//Trinh phuc vu ngat cho ADC
void _ISR _ADCInterrupt(void)
{
    _LATF0=0;
	_ADIF = 0;
}


int main(void)
{
TRISF = 0xFFCC;          //4 chan led la 4 chan ra
TRISB = 0xFFFF;			//cac chan cong B deu la cac chan vao
ADPCFGbits.PCFG3=1;
LATF=0xFFFF;				//tat cac led

while(1)
	{
	_LATF1=0;
	if (_RB3) _LATF4=0; else _LATF4=1;
	}
}
//Chú thích:em dùng các chân RF0,RF1,Rf4,Rf5 để lắp và các led để test,nếu _LATRx= 0 thì led sẽ sáng.
Nếu như em vào được ngắt cho ADC thì _LATF0đã về 0 tức là led của em đã sáng,nhưng nó lại không sáng???
EM cũng không hiểu tại sao em cho _LATF1= 0 rồi mà đo vẫn được 3,2V???
Mong các bác trả lời giúp!Cảm ơn!!!!

thay đổi nội dung bởi: namqn, 25-04-2008 lúc 10:43 PM.
doi_gio_hu vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-04-2008, 10:48 PM   #3
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi doi_gio_hu View Post
...
Em đang làm và gặp phải một vấn đề:em không vào được ngắt của ADC.
...
//Chú thích:em dùng các chân RF0,RF1,Rf4,Rf5 để lắp và các led để test,nếu _LATRx= 0 thì led sẽ sáng.
Nếu như em vào được ngắt cho ADC thì _LATF0đã về 0 tức là led của em đã sáng,nhưng nó lại không sáng???
EM cũng không hiểu tại sao em cho _LATF1= 0 rồi mà đo vẫn được 3,2V???
Mong các bác trả lời giúp!Cảm ơn!!!!
Chương trình của bạn dùng module MCPWM để kích hoạt chuyển đổi A/D, nhưng bạn chưa khởi tạo module MCPWM. Do đó, chương trình của bạn đã lấy mẫu tín hiệu analog, nhưng không chuyển đổi tín hiệu đó, do đó không xảy ra ngắt ADC. Bạn xem lại tutorial của tôi nhé.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-04-2008, 10:57 PM   #4
hungbkhn
Trưởng lão PIC bang
 
Tham gia ngày: Jun 2006
Bài gửi: 39
:
Smile

Trích:
Nguyên văn bởi doi_gio_hu View Post
Em xem lại và thấy cái bảng ng][ì ta lập trong file AN957 là đúng rồi đó anh ạ.
Lý do của việc lập bảng không theo tuần tự là do tín hiệu Hall thu về cũng không theo tuần tự và bảng này được lập là để phù hợp với tín hiệu Hall đó.
Tín hiệu Hall thu về của ta không như trong tài liệu AN85 cung cấp đâu.Em đã tiến hành đo thực tế và thu được bảng tín hiệu Hall như sau:011;001;101;100;110;010
Nếu đem so sánh với bảng trong file AN957 thì hoàn toàn phù hợp về thứ tự dẫn của các pha.
-->
trong tài liệu 885, trang 5
Based on the physical position of the Hall sensors, there are two versions of output. The Hall sensors may be at 60° or 120° phase shift to each other. Based on this, the motor manufacturer defines the commutation sequence, which should be followed when controlling the motor". Bạn có thể xem trang 4 và ví dụ mà tôi nói là 120°. Cái ở 957 là 60° và ko cần đo cũng biết chắc chắn đầu ra là vậy.
Tuy nhiên tôi cho là là 2 cái bảng StateLoTable[] trong 2 trường hợp điều khiển của an957 là không hợp lí như tôi đã đưa ra. Bạn đã chạy thực tế thì kết quả thế nào ?

thay đổi nội dung bởi: namqn, 26-04-2008 lúc 11:26 PM.
hungbkhn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


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


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam