![]() |
|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
|
![]() |
#1 |
Nhập môn đệ tử
Tham gia ngày: May 2007
Bài gửi: 6
: |
Luồng này mình thấy rất hay mà sao giờ trầm lắng quá nhỉ? Theo mình thấy code bác Nam viết chỉ enable cho PWM0 và 1, giờ mình muốn enable cho cả PWM2 và 3 nữa để đưa vào cho đủ cầu H thì xử lý trong giải thuật ntn ah? Bác Nam có thể gợi ý thêm giúp e ko? Vì e cũng ko rõ khi đặt enable PWM2, 3 trong PWMCON0 thì thuật toán phía sau xử lý ntn nữa để trong cầu H thì PWM1 và PWM3 đặt vào kênh cao, PWM0 và PWM2 đặt vào kênh thấp, tín hiệu điều biến là PWM1+ tín hiệu bù PWM0 sẽ phải ngược pha so với tín hiệu điều biến PWM3 + tín hiệu bù PWM2 (tín hiệu PWM1 dẫn nửa chu kỳ và PWM3 dẫn nửa chu kỳ còn lại).
|
![]() |
![]() |
![]() |
#2 |
Đệ tử 1 túi
Tham gia ngày: Mar 2011
Bài gửi: 21
: |
Mình thử xem sao , cảm ơn mọi người nhiều,
|
![]() |
![]() |
![]() |
#3 |
Nhập môn đệ tử
Tham gia ngày: Aug 2010
Bài gửi: 2
: |
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! |
![]() |
![]() |
![]() |
#4 |
Nhập môn đệ tử
Tham gia ngày: Jun 2010
Bài gửi: 7
: |
- Mấy anh cho em hỏi PTMRL là gì vậy và vì sao phải có điều kiện PTMRL >= 100 hoặc PTMRL >= 50.
PTMRL có phải là byte thấp của PTMR và nó sẽ đếm lên đến khi = PTPER thì reset về 0. - Em mới tìm hiểu về Pwm mong được mọi người chỉ bảo cho. thay đổi nội dung bởi: killua142, 29-05-2011 lúc 10:18 PM. |
![]() |
![]() |
![]() |
#5 |
Đệ tử 1 túi
Tham gia ngày: Aug 2012
Bài gửi: 24
: |
lên google mà tìm hôm bữa mình cũng làm cái này lên tìm phát được luôn
|
![]() |
![]() |
![]() |
#6 |
Nhập môn đệ tử
Tham gia ngày: Sep 2012
Bài gửi: 3
: |
bác namqn cho em hỏi vấn đề này em đang làm đề tài inverter dùng dspic với thuật pid,em trong chu kỳ chia ra 20 bậc,trung bình mỗi bậc là 1ms,giá trị đặt được thay đổi bằng cách dùng bảng tra sin nhưng chỉ có 1ms thì liệu hệ thống có đáp đứng k bác,em chỉ làm pid cho động cơ nhưng lấy mẫu tới 25ms,giờ làm cái này chỉ có 1ms,bác có cách sử lí pid nào khác hơn không gợi ý cho em làm với.
|
![]() |
![]() |
![]() |
#7 |
Nhập môn đệ tử
Tham gia ngày: Sep 2014
Bài gửi: 1
: |
hihi em vừa làm thành công con inventer 12>>220v pure sine
em lang thang trên mạng thì tìm được cái code của mấy anh điện tử việt nam lên em làm thử quả nhiên ra sine thật mấy anh à đây là link của em nó các anh xem xong chém nhẹ hihi
có gì anh nam sửa cho em cái sai sót https://www.facebook.com/video.php?v...type=2&theater |
![]() |
![]() |
![]() |
#8 | |
Nhập môn đệ tử
Tham gia ngày: Nov 2015
Bài gửi: 4
: |
Trích:
|
|
![]() |
![]() |
![]() |
#9 |
Nhập môn đệ tử
Tham gia ngày: Feb 2014
Bài gửi: 2
: |
mọi người có ai lập trình tạo sin PWM cho pic 18f4431 chưa giậy? chỉ mình sai chổ nào trog code này đi. mình sửa mãi mà không chạy. trong đồ án nghịch lưu 3 pha... ;(((
code mình: #include<htc.h> //#include<stdio.h> #include<math.h> __CONFIG(1,HS);//HS __CONFIG(2,WDTWINDIS); __CONFIG(3,MCLREN,PWM4RB5,PWRTDIS); __CONFIG(4,LVPDIS,STVRDIS,BORDIS); #define _XTAL_FREQ 20000000 float Ta,Tb,To,U,V,W; char sector; unsigned int i,j; unsigned int data[300]={0,40,81,121,161,202,242,282,322,363,403,443, 484,524,564,604,645,685,725,765,805,846,886,926,96 6,1006,1047,1087,1127, 1167,1207,1247,1287,1327,1367,1407,1447,1487,1527, 1567,1607,1647,1687, 1727,1767,1806,1846,1886,1926,1965,2005,2045,2084, 2124,2164,2203,2243, 2282,2322,2361,2401,2440,2480,2519,2558,2598,2637, 2676,2715,2754,2793, 2833,2872,2911,2950,2989,3027,3066,3105,3144,3183, 3222,3260,3299,3337,3376, 3415,3453,3491,3530,3568,3607,3645,3683,3721,3759, 3797,3835,3873,3911,3949, 3987,4025,4063,4100,4138,4176,4213,4251,4288,4326, 4363,4400,4437,4475,4512, 4549,4586,4623,4660,4697,4733,4770,4807,4843,4880, 4916,4953,4989,5026,5062, 5098,5134,5170,5206,5242,5278,5314,5350,5385,5421, 5457,5492,5527,5563,5598, 5633,5668,5704,5739,5774,5808,5843,5878,5913,5947, 5982,6016,6050,6085, 6119,6153,6187,6221,6255,6289,6323,6356,6390,6424, 6457,6490,6524,6557,6590, 6623,6656,6689,6722,6755,6787,6820,6852,6885,6917, 6949,6981,7013,7045,7077, 7109,7141,7172,7204,7235,7267,7298,7329,7360,7391, 7422,7453,7484,7514, 7545,7576,7606,7636,7666,7696,7726,7756,7786,7816, 7846,7875,7904,7934,7963, 7992,8021,8050,8079,8108,8136,8165,8193,8222,8250, 8278,8306,8334,8362,8390, 8417,8445,8472,8500,8527,8554,8581,8608,8635,8662, 8688,8715,8741,8767,8793, 8820,8846,8871,8897,8923,8948,8974,8999,9024,9049, 9074,9099,9124,9149,9173, 9198,9222,9246,9270,9294,9318,9342,9365,9389,9412, 9436,9459,9482,9505,9528, 9550,9573,9595,9618,9640,9662,9684,9706,9728,9749, 9771,9792,9814,9835, 9856,9877,9898,9918,9939,9959,9980}; /*unsigned int data[300]={127, 130, 132, 135, 138, 140, 143, 146, 148, 151, 153, 156, 159, 161, 164, 166, 169, 171, 174, 176, 179, 181, 183, 186, 188, 191, 193, 195, 197, 199, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 221, 223, 225, 227, 228, 230, 231, 233, 234, 236, 237, 238, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 249, 250, 251, 251, 252, 252, 253, 253, 253, 254, 254, 254, 254, 254, 254, 254, 254, 254, 253, 253, 253, 252, 252, 251, 251, 250, 249, 249, 248, 247, 246, 245, 244, 243, 242, 241, 240, 238, 237, 236, 234, 233, 231, 230, 228, 227, 225, 223, 221, 220, 218, 216, 214, 212, 210, 208, 206, 204, 202, 199, 197, 195, 193, 191, 188, 186, 183, 181, 179, 176, 174, 171, 169, 166, 164, 161, 159, 156, 153, 151, 148, 146, 143, 140, 138, 135, 132, 130, 127, 124, 122, 119, 116, 114, 111, 108, 106, 103, 101, 98, 95, 93, 90, 88, 85, 83, 80, 78, 75, 73, 71, 68, 66, 63, 61, 59, 57, 55, 52, 50, 48, 46, 44, 42, 40, 38, 36, 34, 33, 31, 29, 27, 26, 24, 23, 21, 20, 18, 17, 16, 14, 13, 12, 11, 10,9,8,7,6, 5,5,4,3,3,2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 3, 4, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 20, 21, 23, 24, 26, 27, 29, 31, 33, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 55, 57, 59, 61, 63, 66, 68, 71, 73, 75, 78, 80, 83, 85, 88, 90, 93, 95, 98, 101, 103, 106, 108, 111, 114, 116, 119, 122, 124};*/ void main() { char m=0; i=sector=0; //khoi tao PWM tan so 5KHz, => T = 0.0002(s) PTCKPS1= 0; PTCKPS0=0; // bo chia 1:1-------------------------------------- PTMOD1=1; PTMOD0 =0; // continuos up/down counting PTEN =1; // PWM time base on PWMEN2 = 1; PWMEN1 = PWMEN0 =0; // dung cac chan PWM0--5 PMOD0 = PMOD1 = PMOD2 = 1; // independent : chay doc lap // complementary : chay bu tru nhau SEVOPS3 = SEVOPS2 = SEVOPS1 = SEVOPS0 =0; // các bit co dãn ngõ ra PWM dac biet. : 1-1 //------------------------------------------------------------- //tan so PWM 5KHz -> T = 1/5000 = 0.0002(s) /*(PTPER.4+1).4.Pre/Fosc=1/T => (PTPER.4+1).4.Pre = 4000 chon Pre = 1. => PTPER = 250. PTPER = PTPERH.256 + PTPERL => PTPERH = 0 , PTPERL =250 Ts = PTPER*4 */ PTPERH =0; PTPERL =250; // dead time 1us DTCON = 0b00000001; // interrupt PWM PTIE =1; PTIF = 0; IPEN = 1; GIE = 1; LATB6 =1; RB6 =1; while(1) {} } void interrupt ngat() { if(PTIF) { Ta=50.0*data[299-i]/150.0; Tb=50.0*data[i]/150.0; To=(250-Ta-Tb)/2.0; i=i+3; if(i>=300) { i=0; sector++; if(sector>6) sector=1; } switch(sector) { case 1: U= To; V=To+Ta; W=250-To; RD0=1; break; case 2: U= To+Tb; V=To; W=250-To; RD0=0; break; case 3: U= 250-To; V=To; W=To+Ta; RD0=1; break; case 4: U= 250-To; V=To+Tb; W=To; RD0=0; break; case 5: U= To+Ta; V=250-To; W=To; RD0=1; break; case 6: U= To; V=250-To; W=To+Tb; RD0=0; break; } PDC0H=(char)(U/256.0);PDC0L=(char)(U-PDC0H*256.0); PDC1H=(char)(V/256.0);PDC1L=(char)(V-PDC1H*256.0); PDC2H=(char)(W/256.0);PDC2L=(char)(W-PDC2H*256.0); PTIF=0; } } |
![]() |
![]() |
![]() |
|
|