Professional Documents
Culture Documents
Chu kỳ xung
PHẦN CỨNG:
VI ĐIỀU KHIỂN PIC16F877A:
• Các nút nhấn bao gồm :
- OFF : kết nối với chân : 33 RBO/INT
- FOR : kết nối với chân : 34 RB1
- REV : kết nối với chân : 35 RB2
- T1 : kết nối với chân : 36 RB3/PG
- T2 : kết nối với chân : 37 RB4
- T3 : kết nối với chân : 38 RB5
- T4 : kết nối với chân : 39 RB6/PGC
- T5 : kết nối với chân : 40 RB7/PGD
Nguồn 5V, thạch anh 20MHz.
MẠCH ĐIỀU KHIỂN ĐỘNG CƠ DC:
• Mạch gồm các Transistor, điện trở và Diode.
Nguyên lý như sau :
- Khi A, B cùng ở mức 1 : Q1, Q2 dẫn làm cho
Q5, Q6 dẫn, Q3, Q4 không dẫn, điện áp ở 2 cực
động cơ bằng nhau nên động cơ đứng yên.
- khi A, B cùng ở mức thấp : Q1, Q2 không dẫn
làm cho Q3, Q4 dẫn, Q5, Q6 không dẫn, động
cơ đứng yên.
- Khi A ở mức cao, B ở mức thấp : Q4, Q5 dẫn,
động cơ quay.
- Khi B ở mức cao, A ở mức thấp : Q3, Q6
dẫn, động cơ quay theo chiểu ngược lại.
LƯU ĐỒ:
Begin
Đ Xử lý biến
Nhấn nút
chạy thuận
chạy
thuận
S
Đ Xử lý biến
Nhấn nút
chạy nghịch
chạy
nghịch
S
Nhấn nút Đ Xử lý biến tốc
tốc độ 1 độ
Nhấn nút Đ
tốc độ 2
Nhấn nút Đ
tốc độ 3
Nhấn nút Đ
tốc độ 4
S
Nhấn nút Đ
tốc độ 5
Nhấn nút Đ
OFF
S
Điều khiển động Ngừng động
cơ quay cơ
End
Chương trình:
#include <16F877A.h>
#include <def_16f877a.h>
#fuses
NOWDT,PUT,HS,NOPROTECT,NOLVP
#use delay(clock=10000000)
#use fast_io(b)
#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
#define tocdo4 496 //4/5 toc do cuc dai
#define tocdo5 620 //toc do cuc dai
int16 duty1=0;
int16 duty2=0;
int8 bientocdo=0;
int1 bienthuan=0;
int1 biennghich=0;
void main() //bo PMW1 dk
dco quay thuan
{ //bo PMW2 dk dco
quay nghich
set_tris_b(0x0ff);//khoi tao port B la
port nhap
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);
set_pwm2_duty(duty2);
//gia tri duty cua PWM duoc tinh
theo cong thuc duty1*t2div/clock
//khoi tao duty=0 -> tat
dong co
while(true)
{
bientocdo=5;
next:
if (!bit_test(portb,0)) //neu nhan
phim OFF
{
duty1=tocdo0;
duty2=tocdo0;
set_pwm1_duty(duty1); //cho duty cua 2
bo PMW=0 de
set_pwm2_duty(duty2); //tat dong co
bienthuan=0;
biennghich=0;
bientocdo=0; //xoa bien toc do
}
if (bienthuan)
{
duty2 = tocdo0;
switch (bientocdo)
{
case 1: duty1= tocdo1;
break;
case 2: duty1= tocdo2;
break;
case 3: duty1= tocdo3;
break;
case 4: duty1= tocdo4;
break;
case 5: duty1= tocdo5;
break;
default : duty1 = td_macdinh;
break;
}
set_pwm1_duty(duty1); //cho dco chay
thuan
set_pwm2_duty(duty2);
}
if (biennghich)
{
duty1 = tocdo0;
switch (bientocdo)
{
case 1: duty2= tocdo1;
break;
case 2: duty2= tocdo2;
break;
case 3: duty2= tocdo3;
break;
case 4: duty2= tocdo4;
break;
case 5: duty2= tocdo5;
break;
default : duty2 = td_macdinh;
break;
}
set_pwm1_duty(duty1); //cho dco
chay nghich
set_pwm2_duty(duty2);
}
}
}
Mô phỏng: