![]() |
Đây chỉ là 1 phần trong đề tài của em. Dải nhiệt độ của em cần đo là từ 0-100 độ C.Em xem trên datasheet của lm35 thấy khoảng điện áp ra tương ứng la-1000mV cho khoảng nhiệt độ từ 0-100 độ C.Phần hiển thị lên LCD thì em làm rồi, nhờ anh xem phần xử lý số liệu hộ em mới. Thank anh nhiều nhiều
|
Trích:
Trân trọng !. |
Đây là code của em, đo nhiệt độ đưa vào RB8 rồi hiển thị ra LCD, nhưng sao dòng 2 chỉ hiện ra là 0. Em không biết là sai chỗ nào, hic
Code:
#include <p30f4011.h> |
Trước khi dùng kết quả chuyển đổi A/D, bạn đặt một giá trị đã biết vào biến ADCVoltage để xem lệnh gọi hàm LCD_WriteString() thứ hai của bạn chạy có ổn không. Nếu ổn thì bạn xem lại phần đọc tín hiệu analog, vì bạn chưa có kết quả chuyển đổi A/D hợp lý.
Thân, |
Em đã đặt 1 biến vào ADCVoltage để thử rồi, chạy tốt anh ạ.
|
Trích:
Thân, |
Sai ở hàm main đó bạn,
Trích:
Vong lặp while(1) của bạn đặt ở cuối chương trình nên không hiện thị nhiệy độ đúng, bạn sửa lại như sau: Code:
void main(void) |
Trích:
Thân, |
Ha ha, được rồi bác ạ . Em bị lỗi tý phần cứng, giờ ngon rồi, ha ha! Thank cả nhà rất rất là nhiều.
|
Thầy Nam cho em hỏi (hơi ngoài luồng) : em đang làm đồ án muôn học là dùng vi điều khiển (dsPIC) để PID tốc độ và vị trí động cơ, em dung động cơ DC secvo 24v/60w, và encoder 504xung/vòng; về thuật toán PID thì em được học rồi nhưng khi vào làm thực tế thì em không biết cách nào để xác định được Kpgh, Ki , Kd, ?!
Trên lí thuyết : xác định Kpgh bằng cách cho ki = 0,Kd = 0, sau đó tăng từ từ Kp cho tới khi có dao động (với chu kì là Tgh) ở ngõ ra, thì đây là Kpgh, và lúc này ta có Kp = 0.6*Kpgh còn Ki = kp / Ti , Kd = Kp*Td, với Ti = 0.5*Tgh, Td = 0.125*Tgh Thầy nói rõ cho em hơn chố này được không thầy , ý em là viết phần mềm như thế nào để tăng Kp mà ta có thể tìm được Kgh và Tgh? Em cảm ơn thầy nhiều lắm !. Trân trọng !. |
Trích:
Thân, |
Trích:
Cảm ơn tất cả !. Trân trọng !. |
Trích:
|
Một chú ý khi sử dụng ADC auto input scanning là buffer kết quả kô phải là tương ứng 1-1 với kênh ADC. Ví dụ bạn scan AN3,4,5 ở chế độ auto scanning
ADCON2bits.CSCNA = 1; ADPCFGbits.PCFG3 = 0; ADPCFGbits.PCFG4 = 0; ADPCFGbits.PCFG5 = 0; ADCSSLbits.CSSL3 = 1; ADCSSLbits.CSSL4 = 1; ADCSSLbits.CSSL5 = 1; thì kết quả ADCBUF0 sẽ là của AN3, ADCBUF1 là của AN4.... |
Help me!
Trích:
|
Trích:
#define Fpwm 40000 //Tan so PWM = 40 kHz Thành : #define Fpwm 200000 //Tan so PWM = 200 kHz Trân trọng !. |
Giúp em về dead time của dsPIC.
Thầy Nam và các anh chị trong diễn đàn cho em hỏi về dead time của dsPIC cái ah.
Ở hình 15-16 trang 360 mục Motor control PWM của tài liêu dsPIC Family Reference , họ có nói là trong lúc dead time thì mức tín hiệu ở hai chân PWMxH và PWMxL đều ở mức thấp (LOW), do mạch công suất của em (đã đặt và thi công mất rồi) nếu cả hai chân này đều ở mức thấp thì sẽ kích cả 2 nửa cầu H cùng lúc và xảy ra trùng dẫn, vậy trong dsPIC có cung cấp cho mình lựa chọn mức tín hiệu của 2 chân PWMxH và PWMxL trong lúc dead time không ah ?. cụ thể là em muốn mức tín hiệu của 2 chân PWM lúc dead time là mức cao (High). Do sự cố trên nên trước mắt , em đang điều khiển động cơ mà không set dead time (dead time = 0 ) , nó vẫn chạy được nhưng FET rất nóng (do quá trình chuyển trạng thái của 2 mức tín hiệu trên cặp chân PWM không lý tưởng) nên sau đó một lúc (hơn 3 phút) bị chết FET. Thầy và anh chị cho em hỏi câu nữa là trong thanh ghi FBORPOR ( BOR and POR Configuration Register) mục Device Configuration trang 710 của tài liêu dsPIC Family Reference có 2 bit là HPOL và LPOL, họ có giải thích nhưng em chưa hiểu rõ lắm về mục đích của 2 bit này, liệu có phải 2 bit này dùng để set trạng thái của chân PWM khi dead time không ah ? Em xin chân thành cảm ơn !. Trân trọng !. |
hỏi về tutorial của thầy Nam.thầy cho em hỏi,cái câu lệnh:
ADCValue = ADCBUF0 >>1 //chi lay 9 bit cao nhat tại sao chỉ lấy 9 bit cao nhất.em chưa hiểu rõ chỗ này.em mới đang tiếp cận ADC,mong thầy chỉ rõ cho. cho em hỏi thêm về sơ đồ mạch,cái con MAX232 có tác dụng gì a. |
Trích:
|
Trích:
Các bit HPOL và LPOL trong thanh ghi cấu hình FBORPOR cho phép chọn trạng thái tích cực của các chân PWMxH và PWMxL một cách tương ứng (nếu bạn không mô tả chúng thì mặc định là các bit này ở mức cao, tương ứng với các chân PWMxH và PWMxL là active-high). Bạn có thể thiết lập xóa các bit cấu hình này để các chân PWMxH và PWMxL là tích cực mức thấp (active-low), khi đó trong khoảng deadtime các chân PWMxH và PWMxL sẽ ở mức cao. Và kiểu logic này mới tương thích với mạch công suất của bạn. Thân, |
Trích:
MAX232 là vi mạch dịch mức, để chuyển logic TTL/CMOS 5 V sang dạng tương thích với chuẩn RS-232 (mức điện áp thể hiện logic là khoảng +/- 12 V). Thân, |
Trích:
Đáng lẽ em phải thử để khỏi làm phiền thầy , nhưng em không có ossilo nên không quan sát được tín hiệu ở 2 chân PWMxH , PWMxL. em định thử set up 2 bit HPOL và LPOL để biết trước khi hỏi thầy nhưng em không chắc nên quyết định hỏi cho chắc !, làm việc với phần công suất (PWM) mà không chắc là em sợ lắm rùi, vì nó chết FET (Đôi khi nổ cái "đùng") hoặc chết IR2102 (mỗi con 17 ngàn) ! Nên em xin chân thành cảm ơn thầy !. Trân trọng !. |
Anh Nam cho em hỏi, trong chế độ quét nhiều kênh ADC, dùng Timer3 kết thúc lấy mẫu và bắt đầu chuyển đổi thì việc xác định giá trị PR3 có giông như trong chế độ quét 1kênh ADC không? Em thấy khi quét nhiều kênh thì khi đó thời gian ngắt của Timer3 là không đều và không như ý của mình, giá trị hiển thị về thỉnh thoảng lại là 0, em hiển thị lên led 7 thanh.
Thanks, |
Em đang dung DSpic30f4013. Nhưng em không biết là ADC của nó có đo được điện áp +/- không. Bác nào biết chỉ dùm em.
Thank các bac |
dieu khien dc dung pic16
cho em hoi neu mach cau H co phan hoi dong dien qua Rshun thi tin hieu ve noi vao chan nao cua pic vay?
|
Trích:
|
Áp vào chân ADC của dspic30F6014A
2 Attachment(s)
Em thiết kế mạch khuyếch đại từ micro, sao cho áp ra dao động với biên độ +- 2.5V, sau đó qua mạch lọc, xong qua mạch cộng thêm 2.5v để được áp dao động từ 0-5v. Xong phần này tín hiệu do bằng dao động ký rất tốt (em sử dụng mạch khuyếch đại và lọc dụng Opamp OP07).
Sau đó đưa áp này vào chân ADC của dspic30F6014A, quan sát áp trên dao động ký thì thấy nó bị xén mất một phần ,chỉ còn lại phần từ 0- khoảng 1v (em nhấn mạnh là xén mất chứ ko phải sụt áp). Em ko hiểu tại sao lại như vậy, em đã thử thêm một tần đệm trước khi đưa vào ADC, nhưng kết quả vẫn như vậy. Em xin đính kèm sơ đồ mạch, ai có kinh nghiệm xem xét giúp em với, em cám ơn rất nhiều. Sơ đồ mạch em đã post thêm file pdf, phần mạch khuyếch đại và lọc em vẽ ở phía dưới cùng, tín hiệu sau xử lý đưa vào chân AN15 (nối bằng jumper giữa J11 và J3). |
Trích:
Nếu đưa dạng sóng đã kiểm tra tốt vào PIC/dsPIC mà dạng sóng bị xén mất thì phải xem lại mức đỉnh của tín hiệu có tương thích với áp nguồn của PIC/dsPIC hay không. Các chân vào/ra của PIC/dsPIC thường có 2 diode bảo vệ. Thân, |
Em vẫn ko hiểu được anh à, nếu như ngõ vào ADC nối vô con biến trở rồi vặn biến trở thì áp bình thường ko bị sụt (0-5V), chỉ có tín hiệu từ sau bộ khuyếch đại đưa vào mới bị xén. Giả thiết bị sụt áp do dòng bé cũng ko thuyết phục lắm, vì nếu dòng nhỏ thì bị sụt áp chứ ko phải xén, hơn nữa em đã thêm mạch khuyếch đại đệm vào kết quả vẫn vậy, tín hiệu bị xén hết chỉ còn phần nằm trong khoảng 0-1V thôi :(. Em xem phần nguồn của con dsPIC cũng ko phát hiện gì cả.
|
Trích:
Thân, |
Tất nhiên là em có cấp nguồn :D.
code em làm tương tự như code mẫu trên trang của microchip Code:
void Init_ADC12(void) Code:
.... |
Luôn tiện a cho em hỏi luôn là nếu đưa áp vào chân ADC mà vuợt ngoài tầm 0-5v (áp âm hoặc lớn hơn 5v) thì có thể làm hư chân ADC đó ko ?
|
anh Nam ơi cho em hỏi thanh ghi SEVTCMP có tác dụng gì vậy ạ
|
Anh Nam và các bạn cho hỏi ở phần giới thiệu trong tutorial 5 có nói: "Ví dụ 5-1 sẽ giới thiệu cách điều chỉnh độ rộng xung theo một giá trị tương tự được đọc về thông qua một ngõ vào analog". Vậy ở đây giá trị tương tự là tín hiệu gì và tín hiệu xung điều chỉnh theo tham số nào của tín hiệu tương tự đó. Thank!
|
Trích:
Với cách thiết lập tham số cho module MCPWM trong ví dụ 5-1, duty cycle = 100% sẽ ứng với giá trị 400 (đọc kỹ tutorial nếu chưa rõ). Với cách đọc tín hiệu ADC đã dùng trong ví dụ 5-1, khi điện áp ngõ vào analog thay đổi từ 0 V đến VDD thì sẽ có được giá trị 0 - 511 trong biến ADCValue, và giá trị này được ghi thẳng vào các thanh ghi PDCx để thiết lập duty cycle. Như vậy, khi ngõ vào analog thay đổi từ 0 V đến khoảng 80% giá trị của VDD (chính xác là 400*VDD/512) thì duty cycle của tín hiệu ra sẽ thay đổi từ 0% đến 100%. Có vẻ như bạn chưa đọc kỹ tutorial và code đi kèm. Thân, |
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. |
Trích:
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, |
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 ạ. |
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 |
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! |
Múi giờ GMT. Hiện tại là 04:30 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