PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   dsPIC - Bộ điều khiển tín hiệu số 16-bit (http://www.picvietnam.com/forum/forumdisplay.php?f=29)
-   -   dsPIC Tutorial 5-Module ADC và MCPWM (http://www.picvietnam.com/forum/showthread.php?t=650)

thuhuong 06-03-2010 12:33 AM

Nhờ Anh Nam hướng dẫn giúp: Em muốn làm một bộ inverter từ DC-AC sử dụng nguyên lý điều biến sin độ rộng xung, trong đó tín hiệu điện áp ra được ổn định.
Nguyên tắc ổn định là dùng mạch hồi tiếp, bám điện áp ra: Khi có điện áp ra thay đổi lệch khỏi điện áp định mức thì mạch sẽ đo và đưa tín hiệu sai lệch để điều chỉnh sai lệch đó.
A cho E hỏi: điều chế sin độ rộng xung trong DS pic muốn điều chỉnh điện áp như thế thì đưa tín hiệu sai lêch (tín hiệu điều khiển) vào chân nào và điều chỉnh như thế nào trong con dspic đó.
E đã hỏi và A đã trả lời là lập một bảng sin khác trong Ram, nhưng như thể chỉ có thể thay đổi được điện áp ra, còn để điều chỉnh (Bám-trơn) thì E khồn biết làm thế nào.

namqn 06-03-2010 06:56 PM

Trích:

Nguyên văn bởi thuhuong (Post 33865)
Nhờ Anh Nam hướng dẫn giúp: Em muốn làm một bộ inverter từ DC-AC sử dụng nguyên lý điều biến sin độ rộng xung, trong đó tín hiệu điện áp ra được ổn định.
Nguyên tắc ổn định là dùng mạch hồi tiếp, bám điện áp ra: Khi có điện áp ra thay đổi lệch khỏi điện áp định mức thì mạch sẽ đo và đưa tín hiệu sai lệch để điều chỉnh sai lệch đó.
A cho E hỏi: điều chế sin độ rộng xung trong DS pic muốn điều chỉnh điện áp như thế thì đưa tín hiệu sai lêch (tín hiệu điều khiển) vào chân nào và điều chỉnh như thế nào trong con dspic đó.
E đã hỏi và A đã trả lời là lập một bảng sin khác trong Ram, nhưng như thể chỉ có thể thay đổi được điện áp ra, còn để điều chỉnh (Bám-trơn) thì E khồn biết làm thế nào.

Bạn xem lại nguyên tắc của SPWM. Bạn chỉ có 1 giá trị trung bình trong mỗi chu kỳ chuyển mạch, và bạn có thể điều chỉnh để giá trị trung bình đó bám theo tín hiệu tham chiếu.

Bảng sin trong RAM cho phép bạn tùy nghi thay đổi giá trị trung bình của chu kỳ chuyển mạch bất kỳ, như vậy thực sự cho phép bạn thực hiện điều trên.

Bạn có thể đưa tín hiệu sai lệch vào một ngõ vào analog và đọc nó vào dsPIC, rồi từ đó tính toán để cập nhật bảng sin trong RAM.

Thân,

chanxi9 03-08-2010 12:46 PM

chào a Nam
E đang đọc đến phần module PWM, có phần độ phân giải PWM (= Tcy/2) e ko hiểu rõ ý nghĩa của nó lắm . Đọc tài liệu có phần trích dẫn là : "Though the clock to the time base timer is Tcy, the duty cycle resolution is Tcy/2; this feature can be utlized to obtain finer PWM resolution at lower device operating speeds, e.g., 11 bits of resolution at 19.5 Khz using a 20 MHz clock."
Mong a cùng các bạn có thể giải thích rõ hơn cho e hiểu được ko ạ.

truongaka 23-12-2010 05:26 PM

Chào mọi người!
Em đang dùng con Dspic 30f2020 để điều khiển đóng mở FET bằng cách điều chỉnh PWM.
Em thay đổi PDC1 để thay đổi Duty nhưng khi thay đổi PDC1 thì Duty đo trên osiloscope luôn không đổi. thầy Nam và mọi người xem giúp em với ạ?



#include <p30F2020.h>
#include <adc10.h>
// cau hinh cho chip
_FOSC(CSW_FSCM_OFF) // tat che do du phong
_FOSCSEL(FRC_PLL) //chon nguon xung trong
_FWDT(FWDTEN_OFF) //tat bo dinh thoi giam sat
_FPOR(PWRT_OFF)
// dinh nghia cac dinh nghia cac nhan cua chuong trinh
#define PWM_PORT PORTE // thanh ghi port E
#define PWM_TRIS TRISE // thanh ghi tris E
#define PWM_LAT LATE // thanh ghi lat E
#define Fcy 925000000 // TAN SO THUC THI LENH
#define Fpwm 50000 //tan so PWM = 50 kHz
// cac prototype
void Init_ADC0(void); // khoi tao adc
void Init_PORT(void); // khoi tao port
void Init_MCPWM(void);
//khoi tao cac module PWM
//int duty = 50;
// CHUONG TRINH CHINH
int main(void)
{ Init_PORT();
Init_ADC0();
Init_MCPWM();
// asm("nop");
// asm("nop");
// asm("nop");
while (1) ; // cho ngat
return 0;
}

// chuong trinh khoitao cong
void Init_PORT(void)
{
PWM_LAT = 0x0000; //Xoa thanh ghi chot tin hieu ra PWM
PWM_TRIS = 0x0000; // port E la output
TRISB = 0xFFFF; // port B la in put
ADPCFG = 0x0000; // port B la dau vao tuong tu
}

//Chuong trinh con khoi tao PWM chung cho cac module
void Init_MCPWM(void)
{
//PTCON = 0x0000;
PTPER = Fcy/Fpwm - 1; //Dat thanh ghi chu ky voi tan so PWM = 40 kHz
SEVTCMP = PTPER; //su kien dac biet duy nhat là khi bo dem bang PTPER
PWMCON1 = 0x0080; // thanh ghi dieu khien pwm1, dung rieng PDCx,lo dead_time
//PWMCON2 = 0x0080; // thanh ghi dieu khien pwm2, dung rieng PDCx,lo dead_time
PHASE1 = 0x0000;
PWMCON1 = 0x0001;
FCLCON1 = 0x0003;
//PHASE2 = Fcy/Fpwm - 1; // khoi tao period cho pwm2
PDC1 = 0.8*(PTPER + 1) ; // dat khoi tao duty cycle cho pwm1
//PDC2 = 0x00A0; // dat khoi tao duty cycle cho pwm2
IOCON1 = 0xC000;
IOCON2 = 0xC000;
PTCON = 0x8000; //Kich hoat module PWM
}

// chuong trinh khoi tao module ADC
void Init_ADC0(void)
{
ADCON = 0x2003; // CHO PHEP ADC HOAT DONG O 4 CHAN B0, B1, B2, B3
ADCPC0 = 0xC3C3; // lien ket voi PWM//
_ADIF = 0; //Xoa co ngat ADC
_ADCP0IF = 0; //--------------
ADSTATbits.P0RDY = 0; //XOA co bao data is ready
_ADCP1IF = 0; //--------------
ADSTATbits.P1RDY = 0; //XOA co bao data is ready
_ADIE = 1; //Cho phep ngat ADC
_ADON = 1; // cho phep ADC hoat dong
}

void _ISR _ADCInterrupt(void) //ham ngat cua adc
{
PDC1 = ADCBUF0*10; // gan ket qua adc ra pw1 (chan E0 va E1)
PDC2 = ADCBUF2*10; // gan ket qua adc ra pw2 (chan E3 va E4)
_ADIF = 0; // xoa co ngat
_ADCP0IF = 0; //xoa co ngat
ADSTATbits.P0RDY=0; //xoa bit bao du lieu
_ADCP1IF = 0; //xoa co ngat
ADSTATbits.P1RDY=0; //xoa bit bao du lieu

provaidan 04-10-2012 07:18 PM

mình đang làm việc với dspic33fj32mc202,ai cho minh hỏi: mình ko thấy chân sử dụng Input Capture là pin nào?ai giúp mình với
thank nhiều!

dinhvanloc 30-10-2012 10:28 AM

Trích:

Nguyên văn bởi namqn (Post 5244)
Đây là tutorial 5 cho dsPIC, giới thiệu các module ADC và MCPWM. Mã nguồn được viết trong ASM30 (tập tin "Vidu5.zip") và C30 (tập tin "Vidu5C30.zip"). Các tập tin .hex đã được đính kèm.

Một ví dụ đọc ngõ vào ADC và điều chỉnh độ rộng xung một cách tương ứng, ví dụ còn lại đọc ngõ vào analog và gửi các ký tự biểu diễn giá trị đọc được(hexadecimal) ra cổng RS-232.

Chúc các bạn thành công!

Thân,

em chào anh. anh cho em hỏi cách nào để dừng động cơ đang chạy trong thời gian nhỏ nhất. em dùng IC l298 để điều khiển.
em cảm ơn anh!

nguyenvietcuong 11-12-2012 05:58 PM

Trích:

Nguyên văn bởi dinhvanloc (Post 78895)
em chào anh. anh cho em hỏi cách nào để dừng động cơ đang chạy trong thời gian nhỏ nhất. em dùng IC l298 để điều khiển.
em cảm ơn anh!

Mình nghĩ dừng động cơ đang chạy trong thời gian nhỏ nhất thì chỉ cần cho xung điều khiển động cơ đó về 0, hoặc dùng chương trình đảo chiều quay của động cơ rồi cấp xung hãm cho nó, hoặc dùng thuật toán điều khiển vận tốc động cơ kết hợp encoder. Nhưng câu hỏi của bạn chung chung quá, không biết ý của bạn chỉ là tắt động cơ đang chạy hay còn có ý nào khác không nhỉ?

nguyenvietcuong 11-12-2012 06:17 PM

Mọi người có kinh nhiệm lập trình ADC cho dsPic33F cho em hỏi một chút xíu... Em đang lập trình ADC cho con dsPic33FJ32GS608. Nhưng em đọc trên datasheet của con này thì các thanh ghi ADC của nó khác hoàn toàn so với những con dsPic mà mọi người đang đang lấy ví dụ ở đây. Cụ thể là nó chỉ có thanh ghi ADCON mà không có các thanh ghi ADCON1, ADCON2, ADCON3. Em nghĩ là có thể datasheet không ghi hết nhưng khi em sử dụng các thanh ghi này trong MpLab IDE thì nó báo lỗi không hiểu các thanh ghi trên là gì. Em lên trên trang microchip để tìm code mẫu thì chỉ được các code dùng cho các con dsPic có các thanh ghi ADCON1, ADCON2, ADCON3 mà thôi. Trên datasheet của con chip này cũng có code mẫu nhưng em đã thử, nó biên dịch được nhưng chương trình không hoạt động. Em muốn hỏi mọi người có phải con dsPic33FJ32GS608 này có phải là dòng đặc biệt của microchip hay không mà thanh ghi ADC của nó lại khác học dsPic33F như vậy ạ? Mọi người đã từng làm với con này rồi có thể cho em một vài cao kiến hoặc chương trình khai báo sử sụng ADC của nó được không ạ? Em muốn sử dụng 8 chân ADC của nó để đọc tín hiệu sensor nhận vạch trắng.

manhquy1992 12-09-2013 10:33 PM

Ai có thư viện DSP30F trong protues không cho mình với!


Múi giờ GMT. Hiện tại là 04:10 PM.

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