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 27-08-2008, 07:38 PM   #1
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 tienminh View Post
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?
Code của bạn chỉ đặt mỗi cấu hình HS cho bộ dao động, còn những phần cấu hình khác đã bị chú thí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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-08-2008, 09:49 PM   #2
tienminh
Đệ tử 3 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 50
:
Trích:
Nguyên văn bởi namqn View Post
Code của bạn chỉ đặt mỗi cấu hình HS cho bộ dao động, còn những phần cấu hình khác đã bị chú thí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,
Có chú thích cấu hình hay không cũng chẳng khác gì, vẫn chỉ chạy được một chút rồi nó cố định luôn độ rộng xung không biến đổi nữa.
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?
tienminh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-08-2008, 10:07 PM   #3
tmtm
Đệ tử 4 túi
 
Tham gia ngày: Dec 2006
Bài gửi: 79
:
Trích:
Nguyên văn bởi tienminh View Post
Có chú thích cấu hình hay không cũng chẳng khác gì, vẫn chỉ chạy được một chút rồi nó cố định luôn độ rộng xung không biến đổi nữa.
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?
Bác đừng nặng lời vậy. Em cũng chưa giải quyết được bài toán này, nhưng em có được đọc một tài liệu có liên quan mà vấn đề phức tạp hơn đã được giải quyết. Do vấn đề bản quyền nên em ko tiện up lên diễn đàn. Bác có thể vào link sau:
http://www2.hcmut.edu.vn/~nxbac/data/
tìm đến tài liệu có tên: QUANG_LVTN_hoanchinh.pdf
tmtm vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-08-2008, 10:34 PM   #4
tienminh
Đệ tử 3 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 50
:
Trích:
Nguyên văn bởi tmtm View Post
Bác đừng nặng lời vậy. Em cũng chưa giải quyết được bài toán này, nhưng em có được đọc một tài liệu có liên quan mà vấn đề phức tạp hơn đã được giải quyết. Do vấn đề bản quyền nên em ko tiện up lên diễn đàn. Bác có thể vào link sau:
http://www2.hcmut.edu.vn/~nxbac/data/
tìm đến tài liệu có tên: QUANG_LVTN_hoanchinh.pdf
Cảm ơn bạn đã cung cấp thông tin, trong LV này tôi đã xem trước đây và thấy rằng nó chưa thật giống với mục đích của tôi, tôi muốn tạo ra tín hiệu sine chuẩn có độ mịn cao nên cần một bộ tạo PWM có thời gian update nhanh, số bit lớn, và kèm theo tính năng tạo deadtime cho cầu H.
Hiện nay chỉ thấy có PIC và AVR là tạo deadtime tin cậy mà lại phổ biến .
Tôi làm mạch thực tế và thấy thời gian update dutycycle của hai loại là khác nhau, với PIC4431 thời gian update 50us là chạy không ổn định lắm , sau một lúc sẽ đứng im không phát xung nữa.
Một chút so sánh của tôi trong trường hợp tạo SPWM giữa hai loại:
- PIC18F4431 có 4 kênh PWM , AT90PWM có 2 hoặc 3 bộ
- Clock đầu vào cực đại PWM của PIC4431 là 10MHz (PLLx4) và của AT90 là 60MHz
- Đều có tạo deadtime linh động
Tôi thực sự rất muốn dùng PIC4431 trong trường hợp này, và tôi nghĩ rằng chương trình tôi viết cơ bản là đúng, có bác nào nhìn thấy sai sót mong các bác chỉ bảo trên cơ sở giúp đỡ thực sự .thanks
tienminh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-08-2008, 12:15 AM   #5
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 tienminh View Post
...
Một chút so sánh của tôi trong trường hợp tạo SPWM giữa hai loại:
- PIC18F4431 có 4 kênh PWM , AT90PWM có 2 hoặc 3 bộ
- Clock đầu vào cực đại PWM của PIC4431 là 10MHz (PLLx4) và của AT90 là 60MHz
- Đều có tạo deadtime linh động
Tôi thực sự rất muốn dùng PIC4431 trong trường hợp này, và tôi nghĩ rằng chương trình tôi viết cơ bản là đúng, có bác nào nhìn thấy sai sót mong các bác chỉ bảo trên cơ sở giúp đỡ thực sự .thanks
Nếu bạn muốn nói đến duty cycle thì clock của PIC18F4431 là 40 MHz nếu tần số xung nhịp cho CPU là 40 MHz. Clock cho bộ timer tạo chu kỳ thì được lấy từ clock thực thi lệnh (có tần số = tần số xung nhịp/4), nhưng thanh ghi xác định duty cycle lại được so sánh với số đếm của timer kết hợp với các Q-bit. Do đó, độ phân giải của duty cycle cao hơn độ phân giải của bộ đếm timer 4 lần. Bạn hãy xem hình 17-11 trong datasheet của PIC18F4431.

Chương trình bạn viết có những chỗ sai cơ bản, tôi thử nghiệm code sửa đổi xong sẽ post lên cho bạn xem.

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-08-2008, 02:23 PM   #6
tienminh
Đệ tử 3 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 50
:
Nếu được bác ra tay giúp đỡ, tôi xin cảm ơn nhiều.
tienminh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-08-2008, 09:56 PM   #7
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
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,
__________________
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 24-02-2009, 03:31 PM   #8
cuongthinh
Đệ tử 2 túi
 
Tham gia ngày: Jan 2007
Bài gửi: 34
:
Trích:
Nguyên văn bởi tmtm View Post
Bác đừng nặng lời vậy. Em cũng chưa giải quyết được bài toán này, nhưng em có được đọc một tài liệu có liên quan mà vấn đề phức tạp hơn đã được giải quyết. Do vấn đề bản quyền nên em ko tiện up lên diễn đàn. Bác có thể vào link sau:
http://www2.hcmut.edu.vn/~nxbac/data/
tìm đến tài liệu có tên: QUANG_LVTN_hoanchinh.pdf
Bác tmtm ơi sao cái trang này giờ không vao được vậy? Em đang làm đồ án tốt nghiệp về món này mà kô có tài liệu. Bác có thể cho em link khác được không ạ?

thay đổi nội dung bởi: cuongthinh, 25-02-2009 lúc 10:25 AM.
cuongthinh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-04-2009, 11:29 PM   #9
truongqt
Đệ tử 2 túi
 
truongqt's Avatar
 
Tham gia ngày: Apr 2007
Nơi Cư Ngụ: Quảng Trị - Đà Nẵng
Bài gửi: 43
:
Cool Bảng Sin

Bảng Sin được nêu trong bài này là làm thế nào mà có được vậy các bạn, ai biết ko chỉ giúp mình với, hay là chỉ cóp rồi sửa lại cái có sẵn. Ví dụ như ở trang 1, trong chuơng trình CCS có bảng sin 800 phần tử, vậy cách tìm ra chúng theo đúng yêu cầu, chẳng hạn với tuơng ứng tần số fx nào đó của sóng sin, thì thế nào? Mong các cao thủ chỉ giáo. Thanks. // ý mình là cách tìm ra các giá trị của bảng đó, 1 cách chính xác (vì nếu ko chính xác thì e...).

thay đổi nội dung bởi: truongqt, 21-04-2009 lúc 11:41 PM.
truongqt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-04-2009, 11:51 PM   #10
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 truongqt View Post
Bảng Sin được nêu trong bài này là làm thế nào mà có được vậy các bạn, ai biết ko chỉ giúp mình với, hay là chỉ cóp rồi sửa lại cái có sẵn. Ví dụ như ở trang 1, trong chuơng trình CCS có bảng sin 800 phần tử, vậy cách tìm ra chúng theo đúng yêu cầu, chẳng hạn với tuơng ứng tần số fx nào đó của sóng sin, thì thế nào? Mong các cao thủ chỉ giáo. Thanks. // ý mình là cách tìm ra các giá trị của bảng đó, 1 cách chính xác (vì nếu ko chính xác thì e...).
Bạn có thể dùng MS Excel để tạo ra bảng dữ liệu trên. Cách làm đơn giản như sau:

- Chọn giá trị đỉnh, ví dụ là 400, khi đó bạn sẽ cộng thêm offset bằng giá trị đỉnh để các giá trị trong bảng luôn luôn không âm.

- Chọn số phần tử trong bảng, ví dụ là 1000

- Trong bảng tính, tạo ra một cột với các giá trị chỉ số chạy từ 0 đến 999 (1000 hàng, tương ứng với 1000 phần tử).

- Ở cột bên cạnh, nhập công thức tính giá trị = 400*sin(giá trị của ô bên trái*2*pi/1000) + 400. Chẳng hạn, giả thiết cột A chứa các chỉ số từ 0 đến 999, ô B1 sẽ có công thức = 400*sin(A1*2*pi/1000) + 400

Sau đó xuất cột B ra một tập tin văn bản, rồi cắt/dán vào mã nguồn, và thêm các dấu "," vào những vị trí cần thiết. Nếu dùng MATLAB thì có thể tự động xử lý toàn bộ phần định dạng, rồi xuất ra tập tin văn bản, sau đó chỉ cần cắt/dán vào mã nguồn.

Lập trình khéo hơn một chút thì chỉ cần lưu 1/4 bảng trên vào flash/ROM là đủ.

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 22-04-2009, 12:14 AM   #11
truongqt
Đệ tử 2 túi
 
truongqt's Avatar
 
Tham gia ngày: Apr 2007
Nơi Cư Ngụ: Quảng Trị - Đà Nẵng
Bài gửi: 43
:
Hi

Thanks trưởng lão.

thay đổi nội dung bởi: truongqt, 29-04-2009 lúc 02:15 PM.
truongqt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-04-2009, 12:30 AM   #12
truongqt
Đệ tử 2 túi
 
truongqt's Avatar
 
Tham gia ngày: Apr 2007
Nơi Cư Ngụ: Quảng Trị - Đà Nẵng
Bài gửi: 43
:
Trích:
Nguyên văn bởi namqn View Post
Bạn có thể dùng MS Excel để tạo ra bảng dữ liệu trên. Cách làm đơn giản như sau:

- Chọn giá trị đỉnh, ví dụ là 400, khi đó bạn sẽ cộng thêm offset bằng giá trị đỉnh để các giá trị trong bảng luôn luôn không âm.

- Chọn số phần tử trong bảng, ví dụ là 1000

- Trong bảng tính, tạo ra một cột với các giá trị chỉ số chạy từ 0 đến 999 (1000 hàng, tương ứng với 1000 phần tử).

- Ở cột bên cạnh, nhập công thức tính giá trị = 400*sin(giá trị của ô bên trái*2*pi/1000) + 400. Chẳng hạn, giả thiết cột A chứa các chỉ số từ 0 đến 999, ô B1 sẽ có công thức = 400*sin(A1*2*pi/1000) + 400

Sau đó xuất cột B ra một tập tin văn bản, rồi cắt/dán vào mã nguồn, và thêm các dấu "," vào những vị trí cần thiết. Nếu dùng MATLAB thì có thể tự động xử lý toàn bộ phần định dạng, rồi xuất ra tập tin văn bản, sau đó chỉ cần cắt/dán vào mã nguồn.

Lập trình khéo hơn một chút thì chỉ cần lưu 1/4 bảng trên vào flash/ROM là đủ.

Thân,
Như vậy các giá trị ta đang tìm chính là giá trị tức thời của hàm
u=400+400*sin(2*pi*f_dieuche*t)
tại các thời điểm t = {0,1,2,....,998,999}
phải ko anh Nam.
Em băn khoăn vì sao biểu thức trong hàm sin anh viết: sin(A1*2*pi/1000), chia cho 1000 là sao vậy anh? Như vậy có phải tần số điều chế là (1/1000). Em chưa hiểu chỗ này.
Đáng lẽ phải thế này chứ: T_dieuche=sophantubangsin*T_pwm =1000*T_pwm
--> f_dieuche=1/T_dieuche = 1/(1000*T_pwm)= f_pwm/1000
Như vậy biểu thức trên phải là: công thức = 400*sin(A1*2*pi*f_pwm/1000) + 400
Anh coi giùm em với.

thay đổi nội dung bởi: truongqt, 22-04-2009 lúc 12:42 AM.
truongqt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-01-2010, 11:44 AM   #13
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
Bạn có thể dùng MS Excel để tạo ra bảng dữ liệu trên. Cách làm đơn giản như sau:

- Chọn giá trị đỉnh, ví dụ là 400, khi đó bạn sẽ cộng thêm offset bằng giá trị đỉnh để các giá trị trong bảng luôn luôn không âm.

- Chọn số phần tử trong bảng, ví dụ là 1000

- Trong bảng tính, tạo ra một cột với các giá trị chỉ số chạy từ 0 đến 999 (1000 hàng, tương ứng với 1000 phần tử).

- Ở cột bên cạnh, nhập công thức tính giá trị = 400*sin(giá trị của ô bên trái*2*pi/1000) + 400. Chẳng hạn, giả thiết cột A chứa các chỉ số từ 0 đến 999, ô B1 sẽ có công thức = 400*sin(A1*2*pi/1000) + 400

Sau đó xuất cột B ra một tập tin văn bản, rồi cắt/dán vào mã nguồn, và thêm các dấu "," vào những vị trí cần thiết. Nếu dùng MATLAB thì có thể tự động xử lý toàn bộ phần định dạng, rồi xuất ra tập tin văn bản, sau đó chỉ cần cắt/dán vào mã nguồn.

Lập trình khéo hơn một chút thì chỉ cần lưu 1/4 bảng trên vào flash/ROM là đủ.

Thân,
Chào anh Nam,
Em mới vào diễn đàn thấy các anh bàn luận hay quá.
Anh có thể giải thichcs giúp em tại sao a lại chọn giá trị đỉnh là 400 được k?
Anh căn cứ vào đâu để chọn như vậy?
Cám ơn anh nhiều!
anhga vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-08-2008, 10:59 PM   #14
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 tienminh View Post
Có chú thích cấu hình hay không cũng chẳng khác gì, vẫn chỉ chạy được một chút rồi nó cố định luôn độ rộng xung không biến đổi nữa.
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?
Bạn tham gia diễn đàn cách đây gần 2 năm mà vẫn không hiểu được ý của tôi.

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
namqn 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à 02:57 PM.


Đượ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