PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

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

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

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 28-01-2010, 12:07 PM   #61
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 anhga View Post
Bác lấy công thức 4*(PTPER + 1) = 4*(199 +1) = 800 ở đâu vậy? Em đọc datasheet con PIC8F4431 sao k thấy nhỉ?
Giá trị thanh ghi PDC có thể lớn hơn PTPER khi nào?
Em thấy nó chỉ lớn hơn đc khi clock của thằng PTMR lớn hơn clock PDC (chẳng hạn PTMR có clock là Tcy thì clock của PDC phải là Tcy/n; n = 2,3...).Đúng k bác Nam?
Chứ nếu cả hai thằng đều là Tcy thì k thể có chuyện giá trị thanh ghi PDC lớn hơn PTPER được đâu.
Kết hợp phương trình 17-1 và hình 17-11 trong datasheet, sẽ thấy PTPER được cập nhật theo Fcy (= Fosc/4), còn PDC được cập nhật theo Fosc.

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 28-01-2010, 12:43 PM   #62
anhga
Đệ tử 1 túi
 
Tham gia ngày: Feb 2008
Bài gửi: 19
:
Trích:
Nguyên văn bởi namqn View Post
Kết hợp phương trình 17-1 và hình 17-11 trong datasheet, sẽ thấy PTPER được cập nhật theo Fcy (= Fosc/4), còn PDC được cập nhật theo Fosc.

Thân,
Em cám ơn a Nam rất nhiều!
Em xin bổ sung thêm là nếu ta chọn chia tần của bộ PWM Time Base là 1:1 thì khi đó độ phân giải của PTMR sẽ là Tcy (Tcy = Fosc/4) còn độ phân giải của PDC sẽ là Tcy/4 (Fosc). Tương tự khi ta chọn chia tần khác đi thì độ phân giải sẽ khác đi nhưng vẫn theo tỷ lệ 1:4. Và lưu ý là điều này chỉ đúng với PIC18 thôi. Đối với dsPIC30 hoặc dsPIC33 thì sẽ khác. Cụ thể các bạn đọc trong datasheet sẽ rõ.

thay đổi nội dung bởi: anhga, 08-02-2010 lúc 12:58 PM.
anhga vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-06-2010, 12:17 AM   #63
Ruby
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).
Ruby vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-09-2010, 01:14 AM   #64
phithientula
Nhập môn đệ tử
 
Tham gia ngày: Jul 2010
Bài gửi: 7
:
Trích:
Nguyên văn bởi namqn View Post
Theo tôi, ý của datasheet như sau:

max(dutycycle) = 1 - 3*td/T
min(dutycycle) = 3*td/T

với td = dead time, T = chu kỳ PWM.

Thân,
sao bác tuoitrequaypha lại đưa ra hệ số là 6 vậy ạ?

thay đổi nội dung bởi: phithientula, 10-09-2010 lúc 01:23 AM.
phithientula vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-03-2011, 07:29 PM   #65
HYknight
Nhập môn đệ tử
 
Tham gia ngày: Aug 2010
Bài gửi: 6
:
Chào các anh !
Bảng sin em lập như hướng dấn của anh Nam, Pic em dùng là 16F886, Fpwm = 20KHz
Nhưng không hiểu tại sao không thể chạy đúng
Nếu em dùng chương trình này cho Pic18 thì ok
Hay có điều gì về PWM của Pic16 mà em chưa đọc kĩ
Mong các anh giải thích giùm
Đây là chương trình của em :

Code:
#include <16f886.h>
#fuses  HS,NOWDT,NOPROTECT,NOLVP
#Device ADC = 10
#use    Delay(clock=20000000)

long Const Table_sin[400] =
{
500,507,515,523,531,539,547,554,562,570,578,585,593,601,609,616,624,631,639,647
,654,661,669,676,684,691,698,705,712,719,726,733,740,747,754,761,767,774,781,787
,793,800,806,812,818,824,830,836,842,847,853,859,864,869,875,880,885,890,895,899,
904,909,913,917,922,926,930,934,938,941,945,949,952,955,958,961,964,967,970,973,975,977
,980,982,984,986,987,989,991,992,993,995,996,996,997,998,999,999,999,999,100,999,
999,999,999,998,997,996,996,995,993,992,991,989,987,986,984,982,980,977,975,973,970
,967,964,961,958,955,952,949,945,941,938,934,930
,926,922,917,913,909,904,899,895,890,885,880,875,869,864,859,853,847,842,836,830,824,
818,812,806,800,793,787,781,774,767,761,754,747,740,733,726,719,712,705,698,691,684,
676,669,661,654,647,639,631,624,616,609,601,593,585
,578,570,562,554,547,539,531,523,515,507,500,492,484,476,468,460,452,445,437,429,421,
414,406,398,390,383,375,368,360,352,345,338,330,323,315,308,301,294,287,280,273,266,
259,252,245,238,232,225,218,212,206,199,193
,187,181,175,169,163,157,152,146,140,135,130,124,119,114,109,104,100,95,90,86,82,77,
73,69,65,61,58,54,50,47,44,41,38,35,32,29,26,24,22,19,17,15,13,12,10,8,7,6,4,3,3
,2,1,0,0,0,0,0,0,0,0,0,1,2,3,3,4,6,7,8,10,12,13,15,17,19,22,24,26,29,32,35,38,41,
44,47,50,54,58,61,65,69,73,77,82,86,90,95,100,104,109,114,119,124,130
,135,140,146,152,157,163,169,175,181,187,193,199,206,212,218,225,232,238,245,252
,259,266,273,280,287,294,301,308,315,323,330,338,345,352
,360,368,375,383,390,398,406,414,421,429,437,445,452,460,468,476,484,492};

Unsigned Int16 Index;

Void Main()
      {  
         Set_Tris_A(0x0F);
         Set_Tris_B(0x00); 
         Set_Tris_C(0X02);

         Setup_Timer_2(T2_DIV_BY_1, 249, 1);
         Setup_ccp1(CCP_PWM);
         Index = 0; 
         
         While(1)
          {
              Set_pwm1_duty(Table_sin[index]);
              Index++;
              if (index > 399 ) 
                {
                  Index=0;
                }
          }
         
      }
HYknight vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-03-2011, 11:46 PM   #66
traixomtro_hy
Nhập môn đệ tử
 
Tham gia ngày: Feb 2011
Bài gửi: 3
:
Thumbs up điều chế độ rộng xung ra sin (SPWM)

bạn có thể vào trang này nó sẽ hướng dẫn cụ thể cách lập bảng mã SPWM

http://hoiquandientu.com//read.php?579#entrymore

cái này có lâu rồi mà . khi điều khiển cầu H cho nghịch lưu ở điện áp cao bạn nên để ý :

và lập trình khéo bạn phải cho khoảng thời gian deadtime vào .

còn để làm gì thì bạn chắc hiểu rồi .
traixomtro_hy vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-03-2011, 01:05 PM   #67
mini_2440
Đệ 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,
mini_2440 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-05-2011, 07:42 PM   #68
dungd4
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!
File Kèm Theo
File Type: zip nghich luu ap.zip (7.81 MB, 380 lần tải)
dungd4 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-05-2011, 05:28 PM   #69
killua142
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.
killua142 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-07-2012, 09:31 PM   #70
minhminh17
Nhập môn đệ tử
 
Tham gia ngày: Apr 2008
Bài gửi: 4
:
Unhappy xuat 500xung PWM Tpwm=5khz

dear cac bac pro pic18 hien em dang thu lap trinh C18 xuat power PWM Tpwm=5Khz xuat 500 xung thi dung khong xuat nua nhung chua ranh chi lam duoc den day bac chi giup em voi

void Motor_init()
{
//------------------------ PTCON0: PWM TIMER CONTROL REGISTER 0 -----------------------------//
// Postscale: 1:1
PTCON0bits.PTOPS0 = 0;
PTCON0bits.PTOPS1 = 0;
PTCON0bits.PTOPS2 = 0;
PTCON0bits.PTOPS3 = 0;
// time base input clock: 1:4 prescale
PTCON0bits.PTCKPS0 = 0;
PTCON0bits.PTCKPS1 = 1;
// Free running mode
PTCON0bits.PTMOD0 = 0;
PTCON0bits.PTMOD1 = 0;
// PWM PERIOD FOR FREE-RUNNING MODE:
// Tpwm = ((PTPER + 1) x PTMRPS) / (Fosc/4).
//(Desired period) (Period value) (prescale value)


//------------------------ PTCON1: PWM TIMER CONTROL REGISTER 1 -----------------------------//
PTCON1bits.PTEN = 0; // PWM time base is off

//------------------------ PWMCON0: PWM CONTROL REGISTER 0 -----------------------------//
// PWM outputs: PWM0-PWM1-PWM2-PWM3
PWMCON0bits.PWMEN0 = 0;
PWMCON0bits.PWMEN1 = 1;
PWMCON0bits.PWMEN2 = 0;
// Config pair output:
PWMCON0bits.PMOD0 = 1; // pair (PWM0, PWM1) is in the Independent mode
PWMCON0bits.PMOD1 = 1; // pair (PWM2, PWM3) //
PWMCON0bits.PMOD2 = 1; // pair (PWM4, PWM5) //
PWMCON0bits.PMOD3 = 1; // pair (PWM6, PWM7) //

//------------------------ PWMCON1: PWM CONTROL REGISTER 1 -----------------------------//
// PWM Special Event Trigger: 1:1 postscale
PWMCON1bits.SEVOPS0 = 0;
PWMCON1bits.SEVOPS1 = 0;
PWMCON1bits.SEVOPS2 = 0;
PWMCON1bits.SEVOPS3 = 0;

PWMCON1bits.SEVTDIR = 0; // A Special Event Trigger will occur when the PWM time base is counting upwards
PWMCON1bits.UDIS = 0; // Updates from Duty Cycle and Period Buffer registers are enabled
PWMCON1bits.OSYNC = 0; // Output overrides via the OVDCON register are asynchronous

// Time base beginning value
PTMRL = 0;
PTMRH = 0;
// Period value: 249 <==> Tpwm = 5Khz
PTPERH = 0;
PTPERL = 0xF9;
// Max Duty cycle = Period value x 4.
PTCON1bits.PTEN = 1; // PWM time base is on
minhminh17 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-04-2013, 12:31 PM   #71
navypro_hvhq
Đệ tử 1 túi
 
Tham gia ngày: Aug 2012
Bài gửi: 24
:
Trích:
Nguyên văn bởi namqn View Post
Những vấn đề mà bạn hỏi cần được xem xét với khả năng hiện thực của PIC18F4431. Trong hình 17-12 của datasheet của PIC18F4431, với PWM đồng bộ ở cạnh, duty cycle chỉ được module PCPWM cập nhật một lần vào cuối mỗi chu kỳ PWM. Nghĩa là nếu bạn thay đổi duty cycle 2 lần trong mỗi chu kỳ PWM thì chỉ có 1 thay đổi sau được phản ánh vào duty cycle của tín hiệu ra.

Do đó, chúng ta không có nhiều sự lựa chọn với thời gian cập nhật duty cycle. Cách tốt nhất mà chúng ta có thể làm trong trường hợp này là cập nhật duty cycle sau mỗi chu kỳ PWM.

Với cách làm này, chúng ta sẽ có kích thước bảng sin = 20 ms/Tpwm. Như tôi đã giải thích ở một post trước đó, với tần số clock 40 MHz, tần số PWM là 50 kHz, và bảng sin có 800 giá trị, bạn sẽ có tần số của tín hiệu được điều chế là 62,5 Hz. Nếu muốn có tần số tín hiệu được điều chế là 50 Hz, bạn thay đổi độ dài bảng sin, tăng lên thành 1000 giá trị.

Cuối cùng, bạn thử nghĩ xem làm thế nào để có nhiều giá trị duty cycle trong một chu kỳ PWM!

Thân,
em mới gia nhập anh có thể chỉ giúp em được không ah nếu được anh gửi thẳng hay trao đổi thẳng với em qua mail: navypro_hvhq@yahoo.com.vn
thanhks anh
navypro_hvhq vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-04-2013, 04:33 PM   #72
navypro_hvhq
Đệ tử 1 túi
 
Tham gia ngày: Aug 2012
Bài gửi: 24
:
Trích:
Nguyên văn bởi namqn View Post
Chào bạn tienminh,

Dưới đây là code đã được tôi thử nghiệm trong hơn 1 giờ đồng hồ. Tôi dùng thạch anh 10 MHz và PLL, do đó tần số clock của PIC là 40 MHz. Giá trị duty cycle được cập nhật vào giữa mỗi chu kỳ PWM (chu kỳ dài 20 us). Do đó, tần số PWM là 50 kHz, và tần số lặp lại bảng sine là 62,5 Hz.

Code:
#include<p18cxxx.h>

#pragma config OSC = HSPLL
#pragma config FCMEN = OFF
#pragma config IESO = OFF
#pragma config PWRTEN = ON
#pragma config BOREN = ON
#pragma config BORV = 27
#pragma config WDTEN = OFF
#pragma config WINEN = OFF
#pragma config WDPS = 32768
#pragma config T1OSCMX = OFF
#pragma config HPOL = HIGH
#pragma config LPOL = HIGH
#pragma config PWMPIN = ON
#pragma config MCLRE = ON
#pragma config EXCLKMX = RD0
#pragma config PWM4MX = RD5
#pragma config SSPMX = RD1
#pragma config FLTAMX = RD4
#pragma config STVREN = ON
#pragma config LVP = OFF
#pragma config DEBUG = OFF
#pragma config CP0 = OFF
#pragma config CP1 = OFF
#pragma config CP2 = OFF
#pragma config CP3 = OFF
#pragma config CPB = OFF
#pragma config CPD = OFF
#pragma config WRT0 = OFF
#pragma config WRT1 = OFF
#pragma config WRT2 = OFF
#pragma config WRT3 = OFF
#pragma config WRTB = OFF
#pragma config WRTC = OFF
#pragma config WRTD = OFF
#pragma config EBTR0 = OFF
#pragma config EBTR1 = OFF
#pragma config EBTR2 = OFF
#pragma config EBTR3 = OFF
#pragma config EBTRB = OFF

const rom unsigned int  sine[800]={
400 , 403 , 406 , 409 , 412 , 415 , 418 , 421 , 425 , 428 , 431 , 434 , 437 , 440 , 443 , 
447 , 450 , 453 , 456 , 459 , 462 , 465 , 468 , 471 , 474 , 478 , 481 , 484 , 487 , 490 , 
493 , 496 , 499 , 502 , 505 , 508 , 511 , 514 , 517 , 520 , 523 , 526 , 529 , 532 , 535 , 
538 , 541 , 544 , 547 , 550 , 553 , 555 , 558 , 561 , 564 , 567 , 570 , 573 , 575 , 578 , 
581 , 584 , 587 , 589 , 592 , 595 , 598 , 600 , 603 , 606 , 608 , 611 , 614 , 616 , 619 , 
622 , 624 , 627 , 630 , 632 , 635 , 637 , 640 , 642 , 645 , 647 , 650 , 652 , 654 , 657 , 
659 , 662 , 664 , 666 , 669 , 671 , 673 , 676 , 678 , 680 , 682 , 685 , 687 , 689 , 691 , 
693 , 695 , 697 , 700 , 702 , 704 , 706 , 708 , 710 , 712 , 714 , 716 , 717 , 719 , 721 , 
723 , 725 , 727 , 729 , 730 , 732 , 734 , 736 , 737 , 739 , 741 , 742 , 744 , 745 , 747 , 
748 , 750 , 752 , 753 , 754 , 756 , 757 , 759 , 760 , 761 , 763 , 764 , 765 , 767 , 768 , 
769 , 770 , 771 , 773 , 774 , 775 , 776 , 777 , 778 , 779 , 780 , 781 , 782 , 783 , 784 , 
784 , 785 , 786 , 787 , 788 , 788 , 789 , 790 , 791 , 791 , 792 , 792 , 793 , 794 , 794 , 
795 , 795 , 796 , 796 , 796 , 797 , 797 , 797 , 798 , 798 , 798 , 799 , 799 , 799 , 799 , 
799 , 799 , 799 , 799 , 799 , 800 , 799 , 799 , 799 , 799 , 799 , 799 , 799 , 799 , 799 , 
798 , 798 , 798 , 797 , 797 , 797 , 796 , 796 , 796 , 795 , 795 , 794 , 794 , 793 , 792 , 
792 , 791 , 791 , 790 , 789 , 788 , 788 , 787 , 786 , 785 , 784 , 784 , 783 , 782 , 781 , 
780 , 779 , 778 , 777 , 776 , 775 , 774 , 773 , 771 , 770 , 769 , 768 , 767 , 765 , 764 , 
763 , 761 , 760 , 759 , 757 , 756 , 754 , 753 , 752 , 750 , 748 , 747 , 745 , 744 , 742 , 
741 , 739 , 737 , 736 , 734 , 732 , 730 , 729 , 727 , 725 , 723 , 721 , 719 , 717 , 716 , 
714 , 712 , 710 , 708 , 706 , 704 , 702 , 700 , 697 , 695 , 693 , 691 , 689 , 687 , 685 , 
682 , 680 , 678 , 676 , 673 , 671 , 669 , 666 , 664 , 662 , 659 , 657 , 654 , 652 , 650 , 
647 , 645 , 642 , 640 , 637 , 635 , 632 , 630 , 627 , 624 , 622 , 619 , 616 , 614 , 611 , 
608 , 606 , 603 , 600 , 598 , 595 , 592 , 589 , 587 , 584 , 581 , 578 , 575 , 573 , 570 , 
567 , 564 , 561 , 558 , 555 , 553 , 550 , 547 , 544 , 541 , 538 , 535 , 532 , 529 , 526 , 
523 , 520 , 517 , 514 , 511 , 508 , 505 , 502 , 499 , 496 , 493 , 490 , 487 , 484 , 481 , 
478 , 474 , 471 , 468 , 465 , 462 , 459 , 456 , 453 , 450 , 447 , 443 , 440 , 437 , 434 , 
431 , 428 , 425 , 421 , 418 , 415 , 412 , 409 , 406 , 403 , 399 , 396 , 393 , 390 , 387 , 
384 , 381 , 378 , 374 , 371 , 368 , 365 , 362 , 359 , 356 , 352 , 349 , 346 , 343 , 340 , 
337 , 334 , 331 , 328 , 325 , 321 , 318 , 315 , 312 , 309 , 306 , 303 , 300 , 297 , 294 , 
291 , 288 , 285 , 282 , 279 , 276 , 273 , 270 , 267 , 264 , 261 , 258 , 255 , 252 , 249 , 
246 , 244 , 241 , 238 , 235 , 232 , 229 , 226 , 224 , 221 , 218 , 215 , 212 , 210 , 207 , 
204 , 201 , 199 , 196 , 193 , 191 , 188 , 185 , 183 , 180 , 177 , 175 , 172 , 169 , 167 , 
164 , 162 , 159 , 157 , 154 , 152 , 149 , 147 , 145 , 142 , 140 , 137 , 135 , 133 , 130 , 
128 , 126 , 123 , 121 , 119 , 117 , 114 , 112 , 110 , 108 , 106 , 104 , 102 , 99 , 97 , 95 , 
93 , 91 , 89 , 87 , 85 , 83 , 82 , 80 , 78 , 76 , 74 , 72 , 70 , 69 , 67 , 65 , 63 , 62 , 60 , 
58 , 57 , 55 , 54 , 52 , 51 , 49 , 47 , 46 , 45 , 43 , 42 , 40 , 39 , 38 , 36 , 35 , 34 , 32 , 
31 , 30 , 29 , 28 , 26 , 25 , 24 , 23 , 22 , 21 , 20 , 19 , 18 , 17 , 16 , 15 , 15 , 14 , 13 , 
12 , 11 , 11 , 10 , 9 , 8 , 8 , 7 , 7 , 6 , 5 , 5 , 4 , 4 , 3 , 3 , 3 , 2 , 2 , 2 , 1 , 1 , 1 , 0 , 0 , 
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 2 , 2 , 2 , 3 , 3 , 3 , 
4 , 4 , 5 , 5 , 6 , 7 , 7 , 8 , 8 , 9 , 10 , 11 , 11 , 12 , 13 , 14 , 15 , 15 , 16 , 17 , 18 , 
19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 28 , 29 , 30 , 31 , 32 , 34 , 35 , 36 , 38 , 39 , 
40 , 42 , 43 , 45 , 46 , 47 , 49 , 51 , 52 , 54 , 55 , 57 , 58 , 60 , 62 , 63 , 65 , 67 , 
69 , 70 , 72 , 74 , 76 , 78 , 80 , 82 , 83 , 85 , 87 , 89 , 91 , 93 , 95 , 97 , 99 , 102 , 
104 , 106 , 108 , 110 , 112 , 114 , 117 , 119 , 121 , 123 , 126 , 128 , 130 , 133 , 
135 , 137 , 140 , 142 , 145 , 147 , 149 , 152 , 154 , 157 , 159 , 162 , 164 , 167 , 
169 , 172 , 175 , 177 , 180 , 183 , 185 , 188 , 191 , 193 , 196 , 199 , 201 , 204 , 
207 , 210 , 212 , 215 , 218 , 221 , 224 , 226 , 229 , 232 , 235 , 238 , 241 , 244 , 
246 , 249 , 252 , 255 , 258 , 261 , 264 , 267 , 270 , 273 , 276 , 279 , 282 , 285 , 
288 , 291 , 294 , 297 , 300 , 303 , 306 , 309 , 312 , 315 , 318 , 321 , 325 , 328 , 
331 , 334 , 337 , 340 , 343 , 346 , 349 , 352 , 356 , 359 , 362 , 365 , 368 , 371 , 
374 , 378 , 381 , 384 , 387 , 390 , 393 , 396  };

#define	_PTIF	PIR3bits.PTIF

unsigned int index = 0;
void set_duty0(unsigned int duty);

void setupPWM(void)
{
	PTCON0 = 0x00;	//Postscale 1:1, Prescale 1:1, Free Running
	PTCON1 = 0x80;	//PWM time base is on, count up!
	PWMCON0 = 0x20;	//Enable PWM0-1, Complementary
	PWMCON1 = 0x40;
	DTCON = 0x00;	//No dead-time
	
	PTMRH=0;
	PTMRL=0;
	
	PTPERH=0;
	PTPERL=0xC7;	// 20KHz PWM
	
	PDC0H=0x00;
	PDC0L=0x00;		//0% duty
	/*
	PDC1H=0;
	PDC1L=0;
	PDC2H=0;
	PDC2L=0;
	PDC3H=0;
	PDC3L=0;
*/
	OVDCOND = 0xFF;		//Override disabled
	OVDCONS = 0;
	FLTCONFIG = 0;		//Fault condition disabled
	SEVTCMPH = 0;
	SEVTCMPL = 0;
}

void set_duty0(unsigned int duty)
{
	PDC0H = duty>>8;
	PDC0L = duty&0xFF;
}

void main()
{
//	TRISA=0x00;
//	ANSEL0=0x00;
	setupPWM();

	while (1)
	{
		if (_PTIF == 1 && PTMRL >= 100)
		{
			set_duty0(sine[index]);
			index++;
			_PTIF = 0;
			if (index >= 800) index = 0;
		}
	}
}
Bạn hãy so sánh với code của bạn để thấy những điểm được thay đổi. Nếu có chỗ nào thắc mắc, bạn cứ đặt câu hỏi ở đây.

Thân,
chào bác namqn bác có code ccs không chứ c18 thì với em lạ hoắc em mới học pic mong anh chỉ giúp
navypro_hvhq vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-04-2013, 04:35 PM   #73
navypro_hvhq
Đệ tử 1 túi
 
Tham gia ngày: Aug 2012
Bài gửi: 24
:
em làm thế này

đây là code em kiếm được nhưng chạy được tẹo là lại lỗi không chạy tiếp ai biết chỉ em với

#include <18f4431.h>
#fuses H4,NOWDT,NOPROTECT,NOLVP
#use delay(clock=40000000)
const INT16 sin_wave[400]=
{
998,1013,1028,1043,1058,1072,1087,1102,1117,1132,
1146,1161,1176,1190,1205,1219,1234,1248,1263,1277,
1291,1305,1319,1333,1347,1361,1375,1388,1402,1415,
1428,1442,1455,1468,1481,1493,1506,1519,1531,1543,
1555,1567,1579,1591,1602,1614,1625,1636,1647,1658,
1668,1679,1689,1699,1709,1719,1729,1738,1747,1756,
1765,1774,1782,1790,1799,1806,1814,1822,1829,1836,
1843,1849,1856,1862,1868,1874,1880,1885,1890,1895,
1900,1904,1908,1912,1916,1920,1923,1926,1929,1932,
1934,1937,1939,1940,1942,1943,1944,1945,1946,1946,
1946,1946,1946,1945,1944,1943,1942,1940,1939,1937,
1934,1932,1929,1926,1923,1920,1916,1912,1908,1904,
1900,1895,1890,1885,1880,1874,1868,1862,1856,1849,
1843,1836,1829,1822,1814,1806,1799,1790,1782,1774,
1765,1756,1747,1738,1729,1719,1709,1699,1689,1679,
1668,1658,1647,1636,1625,1614,1602,1591,1579,1567,
1555,1543,1531,1519,1506,1493,1481,1468,1455,1442,
1428,1415,1402,1388,1375,1361,1347,1333,1319,1305,
1291,1277,1263,1248,1234,1219,1205,1190,1176,1161,
1146,1132,1117,1102,1087,1072,1058,1043,1028,1013,
998,983,968,953,938,924,909,894,879,864,
850,835,820,806,791,777,762,748,733,719,
705,691,677,663,649,635,621,608,594,581,
568,554,541,528,515,503,490,477,465,453,
441,429,417,405,394,382,371,360,349,338,
328,317,307,297,287,277,267,258,249,240,
231,222,214,206,197,190,182,174,167,160,
153,147,140,134,128,122,116,111,106,101,
96,92,88,84,80,76,73,70,67,64,
62,59,57,56,54,53,52,51,50,50,
50,50,50,51,52,53,54,56,57,59,
62,64,67,70,73,76,80,84,88,92,
96,101,106,111,116,122,128,134,140,147,
153,160,167,174,182,190,197,206,214,222,
231,240,249,258,267,277,287,297,307,317,
328,338,349,360,371,382,394,405,417,429,
441,453,465,477,490,503,515,528,541,554,
568,581,594,608,621,635,649,663,677,691,
705,719,734,748,762,777,791,806,820,835,
850,864,879,894,909,924,938,953,968,983};

#bit TBInt_pin = 0xfa4.4
#byte PTMRL = 0XF7D
#byte PTMRH = 0XF7C
unsigned INT32 index1 = 0;
unsigned INT32 index2 = 399;
void main()
{
setup_power_pwm_pins(PWM_COMPLEMENTARY,PWM_COMPLEM ENTARY,PWM_OFF,PWM_OFF);
setup_power_pwm(PWM_CLOCK_DIV_4|PWM_FREE_RUN,1,0,4 99,0,1,10);
while (1)
{
if (TBINT_PIN == 1 && PTMRL >= 100)
{
set_power_pwm0_duty(sin_wave[index1]);
index1++;
set_power_pwm2_duty(sin_wave[index2]);
index2--;
TBINT_PIN= 0;
if (index1 >=400) index1=0;
if (index2 <=0)
{ set_power_pwm2_duty(sin_wave[index2]);
index2=399;
}
}
}
}
navypro_hvhq vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-04-2013, 12:04 PM   #74
navypro_hvhq
Đệ tử 1 túi
 
Tham gia ngày: Aug 2012
Bài gửi: 24
:
Trích:
Nguyên văn bởi tuananh_852003 View Post
các bác ơi giúp em với.em mới tìm hiểu về pic và em đang mắc ở chỗ làm sao điều chế pwm có dạng sỏng ra là sin.nếu bác nào có tài liệu về nó hoặc có đoạn ma chương trinh hướng dẫn em với. em đang làm việc với pic18f4431.
Em cảm ơn các bác !
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
navypro_hvhq vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-11-2013, 05:27 PM   #75
tuanlovetien
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.
tuanlovetien 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à 09:49 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