Thông báo

Collapse
No announcement yet.

PWM đơn giản với 8051

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • PWM đơn giản với 8051

    Gần đây trên diễn đàn thấy một số bạn cần tìm code về PWM để tham khảo, vì vậy mình post lên đây một đoạn code cơ bản về PWM để ai cần thì xem. Mặc dù là cơ bản nhưng chương trình đã chạy tốt (đối với thiết bị điện DC). Các câu lệnh mình đều chú thích rõ ràng. Chúc các bạn tìm thấy điều hữu ích cho mình.
    Code:
    ;PHAN KHAI BAO CAC BIT NGO VAO
    PWM		BIT	P1.6			;BIT DIEU KHIEN THIET BI
    UP		BIT	P3.4			;TANG GIA TRI PWM
    DOWN		BIT	P3.5			;GIAM GIA TRI PWM		
    ;PHAN KHAI BAO BIEN LED
    PWM_VALUE	EQU	31H
    ;KHAI BAO CAC VECTOR NGAT
    ORG 0000H
    	LJMP 	SETUP				;KHOI DONG CHUONG TRINH KHI CAP NGUON
    ORG 	000BH
    	LJMP 	T0_ISR				;NGAT TIMER 0 DIEU RONG XUNG
    ORG 0030H
    SETUP:
    	SETB 	EA				;CHO PHEP NGAT TOAN CUC
    	SETB	ET0				;CHO PHEP NGAT TIMER 0
    	CLR	PWM				;TAT THIET BI
    	MOV 	TMOD,#11H
    	MOV	TH0,#HIGH(-200)	;\		;TA 12MHZ => 200us x 100% = 20000us = 20ms
    	MOV	TL0,#LOW(-200)	;/		CHU KY DIEU XUNG		
    	MOV	PWM_VALUE,#0			;MAC DINH GIA TRI PWM = 0
    	MOV	R7,#0				;BIEN XAC DINH SO LAN NGAT TIMER
    	SETB	TR0				;CHO PHEP TIMER HOAT DONG
    MAIN:
    	JB 	UP,CHECK_DOWN	;NEU PHIM UP = '1' THI KIEM TRA PHIM DOWN
    	LCALL	DELAY200MS	;NEU PHIM UP = '0' THI CHO CHONG XUNG NAY		
    	INC	PWM_VALUE	;TANG GIA TRI PWM
    	MOV	A,PWM_VALUE
    	CJNE	A,#101,EXIT_UP	;CHUA TOI NGUONG TREN THI THOAT THU TUC NHAN PHIM
    	MOV	PWM_VALUE,#100	;DO DAY XUNG DAT 100%
    EXIT_UP:
    	JMP	MAIN
    CHECK_DOWN:
    	JB	DOWN,MAIN	
    	LCALL	DELAY200MS
    	DEC	PWM_VALUE
    	MOV	A,PWM_VALUE
    	CJNE	A,#-1,EXIT_DOWN	;CHUA TOI NGUONG DUOI THI THOAT THU TUC NHAN PHIM
    	MOV	PWM_VALUE,#0	;DO DAY XUNG BANG 0
    EXIT_DOWN:
    	JMP	MAIN
    T0_ISR:				;NGAT TIMER DUNG DE DIEU RONG XUNG
    	PUSH	ACC
    	MOV	7FH,C
    	CLR	TR0
    	MOV	TH0,#HIGH(-200)
    	MOV	TL0,#LOW(-200)
    	SETB	TR0
    	MOV	A,PWM_VALUE
    	CJNE	A,#0,EN_PWM		;DO DAY XUNG <> 0 THI CHO DIEU XUNG
    	JMP	EXIT_ISR		;DO DAY XUNG = 0 THI THOAT KHOI THU TUC NGAT
    EN_PWM:
    	INC	R7			;TANG BIEN DEM NGAT
    	MOV	A,R7
    	CJNE	A,PWM_VALUE,OFF_PULSE	;DU THOI GIAN DAY XUNG THI TAT THIET BI
    	CLR	PWM			;TAT THIET BI
    OFF_PULSE:
    	CJNE	A,#100,EXIT_ISR		;CHUA HET CHU KY DIEU XUNG THI THOAT NGAT
    	SETB	PWM			;TOI ROI THI MO THIET BI
    	MOV	R7,#0			;RESET LAI BIEN DEM
    EXIT_ISR:
    	MOV	C,7FH
    	POP	ACC
    	RETI
    DELAY50MS:	
    	MOV	TH1,#HIGH(-50000)	; CHUONG TRINH CON TRE 50MS GIAY	
    	MOV	TL1,#LOW(-50000)	;  SU DUNG THACH ANH 12MHZ
    	SETB	TR1
    	JNB	TF1,$
    	CLR	TR1
    	CLR	TF1
    	RET
    DELAY200MS:
    	LCALL DELAY50MS
    	LCALL DELAY50MS
    	LCALL DELAY50MS
    	LCALL DELAY50MS
    	RET
    END
    Công ty TNHH Tự Động Hóa Đạt Lân
    32/36, Ông Ích Khiêm, F14, Q11
    ĐT: 08.3974 7308 - 0937.197.001
    email:
    Webite:

  • #2
    giá bác viet bang c thi tot ! du sao cung thank

    Comment


    • #3
      thank bác nhìu nhen

      Comment


      • #4
        Nguyên văn bởi lactran_nd Xem bài viết
        giá bác viet bang c thi tot ! du sao cung thank
        Có cái này, các bạn xem tham khảo này: Kỹ thuật điều chế độ rộng xung PWM
        Mua bán thiết bị điện công nghiệp tại Hà Nội, toàn quốc.
        http://diencongnghiep360.com/
        http://tudienhathe.vn/

        Comment


        • #5
          có bác nào co code viét bằng c thi cho mình xin với

          Comment


          • #6
            Code:
            #include <REGX51.H>
            sbit    PWM = P2^3;
            sbit    TANG = P1^2;
            sbit    GIAM = P1^5;
            unsigned char dem=0,tocdo=25;
            
            bit TANG1=1,TANG0=1,GIAM0=1,GIAM1=1;
            
            void timer0(void) interrupt 1
            {
            TR0 = 0;
            TF0 = 0;
            dem++;
            if(dem > 100)
            dem = 0;
            if(dem<tocdo)
            PWM = 1;
            else
            PWM = 0;
            TR0 = 1;
            }
            
            void phimnhan()
            {
            //////////////////////////
            TANG0=TANG1;TANG1=TANG;
            if((TANG0==1)&&(TANG1==0))
            tocdo=tocdo+5;
            if(tocdo==55)tocdo=50;
            
            /////////////////////////////////
            GIAM0=GIAM1;GIAM1=GIAM;
            if((GIAM0==1)&&(GIAM1==0))
            tocdo=tocdo-5;
            if(tocdo==-5)tocdo=0;
            }
            
            void main(void)
            {
            TMOD = 0X02;
            IE = 0X82;
            TH0=TL0=-50; // tao tan so 0.05 ms
            TR0 = 1;
            PWM=0;
            while(1)
            {
            phimnhan();
            }
            }
            Nguyễn Huy Biên - 01649 802 694
            gmail :

            Comment


            • #7
              Pwm 89c2051

              Nguyên văn bởi chjpchjp1991
              Thanks các bạn..code đọc dễ hiểu lắm..^^
              Click image for larger version

Name:	Untitled.jpg
Views:	2
Size:	123.6 KB
ID:	1369000



              Xem đi có cả CODE và Mo Phong luôn đó


              89C2051PWM.rar
              ĐT : 01676455880

              Comment


              • #8
                ai có code C để điều chỉnh tốc độ động cơ điện 1 chiều không, theo phương pháp xung áp 1 chiều đó, tks nhìu

                Comment


                • #9
                  Nguyên văn bởi vothanhlong Xem bài viết
                  Gần đây trên diễn đàn thấy một số bạn cần tìm code về PWM để tham khảo, vì vậy mình post lên đây một đoạn code cơ bản về PWM để ai cần thì xem. Mặc dù là cơ bản nhưng chương trình đã chạy tốt (đối với thiết bị điện DC). Các câu lệnh mình đều chú thích rõ ràng. Chúc các bạn tìm thấy điều hữu ích cho mình.
                  Code:
                  ;PHAN KHAI BAO CAC BIT NGO VAO
                  PWM		BIT	P1.6			;BIT DIEU KHIEN THIET BI
                  UP		BIT	P3.4			;TANG GIA TRI PWM
                  DOWN		BIT	P3.5			;GIAM GIA TRI PWM		
                  ;PHAN KHAI BAO BIEN LED
                  PWM_VALUE	EQU	31H
                  ;KHAI BAO CAC VECTOR NGAT
                  ORG 0000H
                  	LJMP 	SETUP				;KHOI DONG CHUONG TRINH KHI CAP NGUON
                  ORG 	000BH
                  	LJMP 	T0_ISR				;NGAT TIMER 0 DIEU RONG XUNG
                  ORG 0030H
                  SETUP:
                  	SETB 	EA				;CHO PHEP NGAT TOAN CUC
                  	SETB	ET0				;CHO PHEP NGAT TIMER 0
                  	CLR	PWM				;TAT THIET BI
                  	MOV 	TMOD,#11H
                  	MOV	TH0,#HIGH(-200)	;\		;TA 12MHZ => 200us x 100% = 20000us = 20ms
                  	MOV	TL0,#LOW(-200)	;/		CHU KY DIEU XUNG		
                  	MOV	PWM_VALUE,#0			;MAC DINH GIA TRI PWM = 0
                  	MOV	R7,#0				;BIEN XAC DINH SO LAN NGAT TIMER
                  	SETB	TR0				;CHO PHEP TIMER HOAT DONG
                  MAIN:
                  	JB 	UP,CHECK_DOWN	;NEU PHIM UP = '1' THI KIEM TRA PHIM DOWN
                  	LCALL	DELAY200MS	;NEU PHIM UP = '0' THI CHO CHONG XUNG NAY		
                  	INC	PWM_VALUE	;TANG GIA TRI PWM
                  	MOV	A,PWM_VALUE
                  	CJNE	A,#101,EXIT_UP	;CHUA TOI NGUONG TREN THI THOAT THU TUC NHAN PHIM
                  	MOV	PWM_VALUE,#100	;DO DAY XUNG DAT 100%
                  EXIT_UP:
                  	JMP	MAIN
                  CHECK_DOWN:
                  	JB	DOWN,MAIN	
                  	LCALL	DELAY200MS
                  	DEC	PWM_VALUE
                  	MOV	A,PWM_VALUE
                  	CJNE	A,#-1,EXIT_DOWN	;CHUA TOI NGUONG DUOI THI THOAT THU TUC NHAN PHIM
                  	MOV	PWM_VALUE,#0	;DO DAY XUNG BANG 0
                  EXIT_DOWN:
                  	JMP	MAIN
                  T0_ISR:				;NGAT TIMER DUNG DE DIEU RONG XUNG
                  	PUSH	ACC
                  	MOV	7FH,C
                  	CLR	TR0
                  	MOV	TH0,#HIGH(-200)
                  	MOV	TL0,#LOW(-200)
                  	SETB	TR0
                  	MOV	A,PWM_VALUE
                  	CJNE	A,#0,EN_PWM		;DO DAY XUNG <> 0 THI CHO DIEU XUNG
                  	JMP	EXIT_ISR		;DO DAY XUNG = 0 THI THOAT KHOI THU TUC NGAT
                  EN_PWM:
                  	INC	R7			;TANG BIEN DEM NGAT
                  	MOV	A,R7
                  	CJNE	A,PWM_VALUE,OFF_PULSE	;DU THOI GIAN DAY XUNG THI TAT THIET BI
                  	CLR	PWM			;TAT THIET BI
                  OFF_PULSE:
                  	CJNE	A,#100,EXIT_ISR		;CHUA HET CHU KY DIEU XUNG THI THOAT NGAT
                  	SETB	PWM			;TOI ROI THI MO THIET BI
                  	MOV	R7,#0			;RESET LAI BIEN DEM
                  EXIT_ISR:
                  	MOV	C,7FH
                  	POP	ACC
                  	RETI
                  DELAY50MS:	
                  	MOV	TH1,#HIGH(-50000)	; CHUONG TRINH CON TRE 50MS GIAY	
                  	MOV	TL1,#LOW(-50000)	;  SU DUNG THACH ANH 12MHZ
                  	SETB	TR1
                  	JNB	TF1,$
                  	CLR	TR1
                  	CLR	TF1
                  	RET
                  DELAY200MS:
                  	LCALL DELAY50MS
                  	LCALL DELAY50MS
                  	LCALL DELAY50MS
                  	LCALL DELAY50MS
                  	RET
                  END
                  Các bác cho em hỏi mình muốn mở rộng lên 4 port thì giải thuật như thế nào
                  Last edited by hoangtoan26; 26-02-2013, 14:48.

                  Comment

                  Về tác giả

                  Collapse

                  vothanhlong Tìm hiểu thêm về vothanhlong

                  Bài viết mới nhất

                  Collapse

                  • Ng.Phuong.5
                    Khi in lỗ khoan ra pdf ở Orcad 9.2
                    bởi Ng.Phuong.5
                    Khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau.
                    Không biết có ai sửa được vấn đề này không ạ? Hay đây là mặc định của orcad 9.2 rồi ạ ?
                    Các cách em xem trên diễn đàn thử rồi nhưng không được ạ...
                    hôm nay, 19:47
                  • Ng.Phuong.5
                    Khi in lỗ khoan ra pdf ở Orcad 9.2
                    bởi Ng.Phuong.5
                    Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
                    Không biết...
                    hôm nay, 19:45
                  • Ng.Phuong.5
                    Vấn đề in lỗ khoan ra pdf ở Orcad 9.2
                    bởi Ng.Phuong.5
                    Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
                    Không biết...
                    hôm nay, 19:45
                  • Ng.Phuong.5
                    Vấn đề in lỗ khoan ra pdf ở Orcad 9.2
                    bởi Ng.Phuong.5
                    Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
                    Mấy con...
                    hôm nay, 19:44
                  • viettinh
                    Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                    bởi viettinh
                    Bác nói đúng quá. Cơ mà muốn mua hàng chính hãng, hàng thương hiệu mà tai lại hợp hàng tầu mới khổ chứ.
                    Đang tính mua cái loa tầu nữa cột đằng sau loa này, Loa sony chỉ để hát nhép thôi, có dc k các bác ...
                    hôm nay, 18:12
                  • nguyendinhvan
                    Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                    bởi nguyendinhvan
                    Theo tôi thì khi hpj sản xuất ra cái loa đó, đã có nhiều chuyên gia kỹ thuật hiệu chỉnh, tính toán các phần tử kỹ lưỡng rồi.
                    Bây giờ tính toán hiệu chỉnh lại cần có đội ngũ tương đương với nhà sản xuất.
                    Cách đơn giản...
                    hôm nay, 00:04
                  • Ng.Phuong.5
                    Vấn đề in lỗ khoan ra pdf ở Orcad 9.2
                    bởi Ng.Phuong.5
                    Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
                    Mấy con...
                    Hôm qua, 22:44
                  • mèomướp
                    Trả lời cho Sửa bộ nguồn DC 60V 45A
                    bởi mèomướp
                    Dạ cháu có ý tốt muốn động viên chú ấy ngâm cứu khoa học thôi ạ. Về phần kiểm tra dao động thì chú ấy chưa biết thì sẽ tìm hiểu được là cần những gì ạ, chắc chắn là khi hướng dẫn phần ấy các cô chú nào đó sẽ lưu ý cần loại sò công suất ra tránh cháy nổ rồi ạ....
                    Hôm qua, 19:02
                  • tuyennhan
                    Trả lời cho Sửa bộ nguồn DC 60V 45A
                    bởi tuyennhan
                    Chủ thớt hỏi có kiểm tra được dao động mà không cấp nguồn thì rõ trình ở mức nào mà mèo còn xúi ngâm cứu nữa ác vậy ....
                    Hôm qua, 15:43
                  • tuyennhan
                    Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                    bởi tuyennhan
                    Loa bass đấu trực tiếp không qua phân tần để thành loa toàn dải xem có thoát tiếng khộng , nếu không thoát cần phải sửa lại mạch cs hay âm sắc nếu đủ trình còn nếu thoát ca hay nhưng chưa vừa ý vì bass kém chăc thì đấu lại như cũ và đấu thêm loa mid treble bên ngoài .
                    Hôm qua, 15:28
                  Đang tải...
                  X