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

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 19-05-2012, 04:12 PM   #1
vuong_003
Nhập môn đệ tử
 
Tham gia ngày: Oct 2011
Bài gửi: 2
:
PWM chạy không ổn định-pic16f877a

Mọi người cho mình hỏi sao mỗi lần mình bấm nút tăng tốc độ động cơ thì 2 led gắn ở 2 chân RE1 va RE2 sáng loạn cả lên, 2 led đó mình dùng nút nhấn ở chân RA2 va RA3 để điều khiển sáng tắt. mình dùng L298 để điều khiển động cơ, chân Enable của L298 nối với chân RE0 của VDK, động cơ chạy k0 ổn định nữan mỗi lần nhấn nút là mình cho biến tốc độ lên 1, vậy mà khi chạy có khi mình ấn có 1 lần mà tốc độ tự tăng 2 nấc

Đây là code mình viết:
//-----------------------------------------------------------------------------
#include <16f877a.h>
#include <def_877a.h>
#device *=16 ADC=8
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
#define tocdo0 0 //toc do bang 0
#define td_macdinh 80 //toc do mac dinh
#define tocdo1 124 //1/5 toc do cuc dai
#define tocdo2 248 //2/5 toc do cuc dai
#define tocdo3 372 //3/5 toc do cuc dai


int16 duty1=0;
int16 duty2=0;
int8 bientocdo1=0;
int8 bientocdo2=0;
int1 bienthuan=0;
int1 biennghich=0;
void main()
{
set_tris_e(0b000); //các chan cu?a porte deu la chan xuat du lieu
set_tris_a(0b00111100);

PORTE=0;
setup_ccp1(CCP_PWM); //khoi tao bo PWM1
setup_ccp2(CCP_PWM); //khoi tao bo PWM2
setup_timer_2(T2_div_by_16,154,1); //tao chu ky xung 1ms
//(1/clock)*4*t2div*(period+1)
//(1/10e6)*4*16*(154+1)=1e-3=1ms

set_pwm1_duty(duty1); //gia tri duty cua PWM duoc tinh
set_pwm2_duty(duty2); //theo cong thuc duty1*t2div/clock
//khoi tao duty=0 ->tat dong co
while(true)
{
if (bit_test(porta,2))
{
Delay_ms(200);
RE1^=1;


}
if (bit_test(porta,3))
{
Delay_ms(200);
RE2^=1;

}

if (bit_test(porta,4)) //neu nhan phim FO : chay thuan
{
RE0=1;
duty1=tocdo0;
duty2=tocdo0;
set_pwm1_duty(duty1); //cho duty cua 2 bo PMW=0 de
set_pwm2_duty(duty2); //tat dong co
delay_ms(500); //delay 1s de giam quan tinh dc
bienthuan=1;
biennghich=0;

bientocdo1=bientocdo1+1;
if(bientocdo1==4)
bientocdo1=0;


goto next;

}


if(bit_test(porta,5)) //neu nhan phim RE : chay nghich
{
RE0=1;
duty1=tocdo0;
duty2=tocdo0;
set_pwm1_duty(duty1); //cho duty cua 2 bo PMW=0 de
set_pwm2_duty(duty2); //tat dong co
delay_ms(500); //delay 1s de giam quan tinh dc
bienthuan=0;
biennghich=1;

bientocdo2=bientocdo2+1;
if(bientocdo2==4)
bientocdo2=0;


goto next;
}

next:

if (bienthuan)
{
duty2 = tocdo0;
switch (bientocdo1)
{
case 0: duty1= tocdo0;
break;
case 1: duty1= tocdo1;
break;
case 2: duty1= tocdo2;
break;
case 3: duty1= tocdo3;
break;


}

set_pwm1_duty(duty1); //cho dco chay thuan
set_pwm2_duty(duty2);

}

if (biennghich)
{
duty1 = tocdo0;
switch (bientocdo2)
{
case 0: duty2= tocdo0;
break;
case 1: duty2= tocdo1;
break;
case 2: duty2= tocdo2;
break;
case 3: duty2= tocdo3;
break;

}
set_pwm1_duty(duty1); //cho dco chay nghich
set_pwm2_duty(duty2);

}



}
}

//================================================== =============================
vuong_003 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


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à 11:42 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