|
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 |
|
08-09-2007, 10:17 AM | #1 |
Nhập môn đệ tử
Tham gia ngày: Aug 2007
Bài gửi: 2
: |
điều chế độ rộng xung ra sin (SPWM)
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 ! |
25-08-2008, 07:16 PM | #2 | |
Đệ tử 3 túi
Tham gia ngày: Oct 2006
Bài gửi: 50
: |
Trích:
Tôi cũng tranh thủ hỏi luôn các bạn thành thạo về PWM của PIC8F4431: - Chương trình này dùng cặp PWM0-1 của chip, tra bảng sin để đặt dutycycle . - Khi chạy chương trình thì dạng sóng đầu ra biến đổi độ rộng theo chu kỳ sine , tuy nhiên sau khi chạy 1-2 phút thì nó tịt, không phát xung nữa, không biết tại sao?????????? sau đây là code viết trong C18 Code:
#include<p18f4431.h> #include<delays.h> #pragma config OSC=HS /* #pragma config FCMEN = ON #pragma config PWRTEN = ON #pragma config BOREN = ON #pragma config BORV = 42 #pragma config WDTEN = OFF #pragma config WINEN = OFF #pragma config WDPS = 64 #pragma config T1OSCMX = OFF #pragma config STVREN = OFF #pragma config LVP = OFF #pragma config CP3 = ON */ 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 }; unsigned int index=0; void set_duty0(unsigned int duty); void setupPWM(void) { PTCON0=0x00; //Postscale 1:1, Prescale 1:1, Free Running PTCON1=0xC0;//PWM time base is on, count up PWMCON0=0x20;//Enable PWM0-1, Complementary PWMCON1=0x40; DTCON=0x00; PTMRH=0; PTMRL=0; PTPERH=0; PTPERL=0xC7; // 20KHz PWM PDC0H=0x00; PDC0L=0x00;//duty /* PDC1H=0; PDC1L=0; PDC2H=0; PDC2L=0; PDC3H=0; PDC3L=0; OVDCOND=0; OVDCONS=0; FLTCONFIG=0; SEVTCMPH=0; SEVTCMPL=0; */ } void set_duty0(unsigned int duty) { PTCON1=0x00; PDC0H=duty/256; PDC0L=duty%256; PTCON1=0xC0; } void main() { TRISA=0x00; ANSEL0=0x00; setupPWM(); while(1) { set_duty0(sine[index]); index++; if(index==800)index=0; Delay1KTCYx(1); } } thay đổi nội dung bởi: namqn, 27-08-2008 lúc 06:40 PM. |
|
27-08-2008, 12:50 PM | #3 |
Đệ tử 3 túi
Tham gia ngày: Oct 2006
Bài gửi: 50
: |
Với chương trình cấu trúc như trên tôi chạy trên AT90PWM2 thì thấy chạy tốt , ra sine hoàn hảo. Còn trên PIC18F4431 thì có vấn đề gì đó trong update dutycycle làm cho độ rộng xung ra chỉ chạy được một chút rồi nó cố định duty cycle luôn không biết đổi nữa.
Có thể đây thể hiện sự yếu kém của 18F4431 chăng? |
27-08-2008, 07:38 PM | #4 | |
Trưởng lão PIC bang
|
Trích:
Có thể kết luận gì khi nhiều người làm thành công và một người không thành công? 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 |
|
27-08-2008, 09:49 PM | #5 | |
Đệ tử 3 túi
Tham gia ngày: Oct 2006
Bài gửi: 50
: |
Trích:
Tôi không thích cách gợi ý xỏ xiên của người được mệnh danh là bang chủ PIC, đây là cách lôi kéo người khác đến với PIC của picvietnam? |
|
27-08-2008, 10:07 PM | #6 | |
Đệ tử 4 túi
Tham gia ngày: Dec 2006
Bài gửi: 79
: |
Trích:
http://www2.hcmut.edu.vn/~nxbac/data/ tìm đến tài liệu có tên: QUANG_LVTN_hoanchinh.pdf |
|
27-08-2008, 10:59 PM | #7 | |
Trưởng lão PIC bang
|
Trích:
Nếu nhiều người đã làm thành công mà một người nào đó làm không thành công thì khả năng rất lớn là người không thành công đó làm chưa đúng, và khả năng rất nhỏ là chip được dùng có sự yếu kém về vấn đề đó. Tôi sẽ rất vô lý nếu tôi kết luận rằng một vi điều khiển nào đó là yếu kém, vì chương trình của tôi viết cho nó không chạy đúng ý đồ của tôi, trong khi nhiều người khác đã làm được việc đó. Nếu bạn thích làm việc với PIC, hoan nghênh bạn gia nhập PICVietnam, nếu bạn không thích làm việc với PIC, chúng tôi không hề ghét bạn. Về vấn đề của bạn, tôi không có sẵn PIC18F4431 để kiểm tra code mà tôi đã sửa lại (và tôi có thói quen chỉ post những code đã được thử nghiệm), do đó bạn hãy chờ một vài ngày để tôi tìm con PIC18F4431 và mạch thử nghiệm trong đống linh kiện lộn xộn của tôi. 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 |
|
18-09-2009, 09:01 AM | #8 | |
Nhập môn đệ tử
Tham gia ngày: Oct 2007
Bài gửi: 1
: |
Trích:
|
|
04-09-2008, 08:58 AM | #9 |
Nhập môn đệ tử
Tham gia ngày: Oct 2007
Bài gửi: 2
: |
Công lực uyên thâm vô cùng! Xem ra bác tuoitrequaypha là một nhân vật có tên tuổi trong giới khoa học. Giá mà bác tích cực ra mặt giúp chúng em nhiều hơn nữa thì tốt biết bao, chứ bác cứ "tọa sơn kiến mục đấu pháp của bá tánh" thế thì thật lãng phí nhân tài.
Bác cho em hỏi, trong các dòng PIC và dsPIC thì dòng nào, chip nào giải quyết vấn đầ này tốt nhất? |
04-09-2008, 09:34 PM | #10 |
Đệ tử 3 túi
Tham gia ngày: Oct 2006
Bài gửi: 50
: |
Với dutycycle từ 5-95% thì tôi cũng đã lọc ra sin gần như hoàn hảo rồi, không bị méo chút nào nữa .
Từ PWM của PIC đưa qua IC driver đến cầu H dùng MOSFET sau đó dùng LC để lọc. Tuy nhiên lúc thực nghiệm tôi lấy đại một cặp LC ra để thử chứ cũng chưa tính toán gì, kết quả là ra sin quá đẹp(chắc là gặp may). Bác nào cho tôi hỏi, tính toán LC như thế nào để đạt được chất lượng dạng sóng cũng như biên độ đầu ra , đảm bảo hiệu suất cao nhất? (tần số PWM=20KHz và V=+310Vdc, Tải tiêu thụ=200W mắc song song với tụ điện) |
14-09-2008, 10:59 PM | #11 |
Nhập môn đệ tử
Tham gia ngày: Sep 2008
Bài gửi: 3
: |
Anh namqn hỏi chút về pcpwm của pic18f4431. Trong chế độ hoạt động của complementary PWM, trong datasheet viết: "PDC0 register controls PWM1/PWM0 outputs", cái này có phải là trong một chu kỳ PWM, PWM0 sẽ ở mức cao trong suốt thời gian của duty cycle, sau đó chuyển xuống mức thấp, tiếp theo là khoảng thời gian deadtime, rồi PWM1 sẽ chuyển lên mức cao trong khoảng thời gian còn lại của chu kỳ?
Giả sử em muốn tạo ra dạng sóng sinpwm điều khiển cầu H, trong nửa đầu của chu kỳ sin, tín hiệu điều khiển lấy từ PWM0 (gồm nhiều chu kỳ xung pwm mang tín hiệu sin, trong suốt khoảng thời gian này PWM1 ở mức 0), sau đó đến deadtime, rồi đến bán kỳ sau của sin thì PWM0 ở mức 0, còn PWM 1 sẽ là tín hiệu điều khiển gồm nhiều chu kỳ xung PWM mang tín hiệu sin.. Em chưa rõ là pic18f4431 có hỗ trợ nào khác so với pic16f877A không? |
15-09-2008, 06:28 PM | #12 | |
Trưởng lão PIC bang
|
Trích:
Hình 17-18 trong datasheet đã minh họa rõ ràng dead-time được thêm vào như thế nào. Với dạng sóng tín hiệu điều khiển cho PWM1 và PWM0 mà bạn đặt yêu cầu, tôi cho là chế độ complementary không phù hợp. Câu hỏi về sự khác nhau trong hỗ trợ của PIC18F4431 và PIC16F877A của bạn chưa rõ ràng. Không rõ bạn muốn so sánh về sự hỗ trợ cho những tính năng gì. 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 |
|
02-09-2009, 12:35 AM | #13 |
Đệ tử 3 túi
Tham gia ngày: Jul 2009
Bài gửi: 46
: |
bác nào có file HEX của chương trình namqn viết ko,cả mô hình mạch nữa.gửi cho mình với.mình cũng đagn điều chế sóng sin,nhưng dùng dspic và C30.
|
28-09-2009, 10:36 AM | #14 |
Nhập môn đệ tử
Tham gia ngày: Sep 2008
Bài gửi: 8
: |
Anh namqn ơi. Em chuyển viết chương trình của anh sang CCS thi thay đổi tần số sóng Sin ra được. Anh chọn giá trị đỉnh có dựa trên cơ sở nao không anh hay là tuỳ mình chọn.
|
07-10-2009, 11:19 PM | #15 |
Nhập môn đệ tử
Tham gia ngày: May 2007
Bài gửi: 6
: |
bác tienminh làm ngon lành rồi thì giời thiệu cho a e đi, e cũng đang rất quan tâm đến vấn đề DC-AC như bác đã nghiên cứu
|
|
|