Kết quả 1 đến 10 của 12
-
27-06-2012, 18:44 #1
Đo tốc độ động cơ, hiển thị ra LED 7 đoạn !!
Vấn đề là mình muốn dùng Timer 0 để đếm xung từ encoder, Timer 1 để trích mẫu và Timer 2 để điều chế PWM. Từ số xung trả về, hiển thị lên led 7 đoạn, nhưng mình viết mãi mà nó hok hiển thị, Mình nghĩ nếu dùng hết 3 timer thì chắc hàm Delay hok có tác dụng ???
Ai có thể giải thích dùm ko??-------------------------------------------------------------------------------- Xem bài viết cùng chuyên mục:
- viết chương trình hiển thị ra led 7 đoạn từ 0-9.viết cụ thể nha.thank nhiu !
- Các đề tài VDK 8051
- Tập Lệnh 8051
- 89c51 ai biết hướng dẫn dùm
- Tạo mạch chữ chạy
- Đo tốc độ động cơ bằng encoder
- Mạch đo nhiệt độ dùng 8051 hiển thị lên led 7 đoạn
- mạch chỉnh lưu có điều khiển dùng scr
- thiết kế mạch điều khiển nhiệt độ lò ấp trứng
- mạch đồng hồ thới gian thực 8051
- Mạch đếm 74LS192
- Cách viết chương trình cho ic chạy chử
- chế tạo mạch điểu khiển từ xa
- Mạch Đèn Giao Thông Ngã 4 dùng 89c52
- mong được giúp đỡ về led 7 đoạn
-
-
27-06-2012, 19:56 #2
Ðề: Đo tốc độ động cơ, hiển thị ra LED 7 đoạn !!
1. khi bạn hỏi thì phải hỏi rõ ràng. sử dụng vdk gì, viết bằng gì và quan trọng nhất là phải có cái code kèm theo.
2. cái yêu cầu của bạn đúng là phải sử dụng 3 timer. 1 cái là đếm xung, 1 cái là PWM, 1 cái là tạo thời gian đếm. còn nếu có sử dụng hàm delay thì phải sử dụng các lệnh thông thường chứ không sử dụng timer được. 3 cái timer đã được sử dụng rồi thì không được đụng đến nó nữa.Cao Văn Hưởng
Email: vanhuongcao@gmail.com
-
The Following 2 Users Say Thank You to caovanhuong For This Useful Post:
-
27-06-2012, 23:34 #3
Ðề: Đo tốc độ động cơ, hiển thị ra LED 7 đoạn !!
Mình dùng PIC 16f877a, ngôn ngữ ccs, điều khiển động cơ DC có gắn encoder giao tiếp máy tính qua Visual Basic. Vấn đề của mình là không hiển thị được tốc độ động cơ lên led 7 đoạn. Đây là code:
#include <16f877a.h>
#fuses NOWDT,HS,NOPUT,NOPROTECT,NODEBUG,NOBROWNOUT,NOLVP, NOCPD,NOWRT
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)
#use fast_io(c)
#use fast_io(a)
#use fast_io(b)
#use fast_io(d)
#use fast_io(e)
#byte porta=0x5
#byte portc=0x7
#byte porte=0x9
#byte portd=0x8
#byte timer0 = 0x01
#byte option = 0x81
#bit p5 = option.5
#bit p4 = option.4
#bit p3 = option.3
#bit e1=porte.1
#bit e2=porte.2
#bit c1=portc.1
#bit c2=portc.2
#bit c3=portc.3
#bit c4=portc.4
#bit c5=portc.5
int data,x,chuc,donvi,hc,dv,i;
int16 dem,sovong,giatri;
char nhan;
int a[10]={48,49,50,51,52,53,54,55,56,57};
void hienthi();
#int_rda
void ngatrs232()
{
nhan=getc();//NHAN TU VB
if((nhan!='a')&&(nhan!='b')&&(nhan!='c')&&(nhan!=' d')&&(nhan!='e')&&(nhan!='f'))
{data=nhan;}
if(nhan=='e')//on
{e2=1;}//
if(e2==1)
{if(nhan=='f')//off
{
porte=0;
portd=0;
setup_ccp1(ccp_pwm);
set_pwm1_duty(0);
setup_ccp2(ccp_pwm);
set_pwm2_duty(0);
setup_timer_2(t2_div_by_16,255,1); }
if(nhan=='a')//quay thuan
{c3=1;//
e1=0;
setup_ccp2(ccp_pwm);
set_pwm2_duty(0);
setup_timer_2(t2_div_by_16,255,1);
delay_ms(500);
c1=0;
setup_ccp1(ccp_pwm);
set_pwm1_duty(x);
setup_timer_2(t2_div_by_16,255,1);}
if(nhan=='b')//quay nghich
{e1=1;
c3=0;
setup_ccp1(ccp_pwm);
set_pwm1_duty(0);
setup_timer_2(t2_div_by_16,255,1);
delay_ms(500);
c2=0;
setup_ccp2(ccp_pwm);
set_pwm2_duty(x);
setup_timer_2(t2_div_by_16,255,1);}
if(nhan=='c')//cham dan
{while(x>=1)
{x=x-1;
while(c3==1)
{c1=0;
setup_ccp1(ccp_pwm);
set_pwm1_duty(x);
setup_timer_2(t2_div_by_16,255,1);
break;}
while(e1==1)
{c2=0;
setup_ccp2(ccp_pwm);
set_pwm2_duty(x);
setup_timer_2(t2_div_by_16,255,1);
break;}
break;}}
if(nhan=='d')//nhanh dan
{while(x<=255)
{x=x+1;
while(c3==1)
{c1=0;
setup_ccp1(ccp_pwm);
set_pwm1_duty(x);
setup_timer_2(t2_div_by_16,255,1);
break;}
while(e1==1)
{c2=0;
setup_ccp2(ccp_pwm);
set_pwm2_duty(x);
setup_timer_2(t2_div_by_16,255,1);
break;}
break;}}}
delay_us(100);}
#int_timer0
void ngat1()
{dem=dem+1; //DEM 200 XUNG
set_timer0(55);
}
#int_timer1
void ngat2()
{giatri=giatri+1;
if(giatri==2)//THOI GIAN LA 1 GIAY
{sovong=dem;
giatri=0;
set_timer0(55);
set_timer1(3035);//500ms
dem=0;
hienthi();
}}
void main()
{
set_tris_a(0b10000);
set_tris_c(0b10000000);
set_tris_d(0);
set_tris_e(0);
enable_interrupts(int_timer1);
enable_interrupts(int_rda);
enable_interrupts(global);
enable_interrupts(int_timer0);
setup_timer_1(t1_INTERNAL|t1_div_by_8);
set_timer1(3035);
set_timer0(55);
p3=1;
p4=1;
p5=1;
e1=0;
c2=0;
c3=0;
x=250;
dem=0;
giatri=0;
portd=0x01;
hienthi();
while(1)
{
chuc=sovong/10;
donvi=sovong%10;
putc(chuc+48);
putc(donvi+48);
delay_ms(50);
if(data==nhan)
{if((sovong>data)&&(x>=1))
{x=x-1;
while(c3==1)
{c1=0;
setup_ccp1(ccp_pwm);
set_pwm1_duty(x);
setup_timer_2(t2_div_by_16,255,1);
break;}
while(e2==1)
{c2=0;
setup_ccp2(ccp_pwm);
set_pwm2_duty(x);
setup_timer_2(t2_div_by_16,255,1);
break;}}
if((sovong<data)&&(x<=255))
{x=x+1;
while(c3==1)
{c1=0;
setup_ccp1(ccp_pwm);
set_pwm1_duty(x);
setup_timer_2(t2_div_by_16,255,1);
break;}
while(c3==1)
{c2=0;
setup_ccp2(ccp_pwm);
set_pwm2_duty(x);
setup_timer_2(t2_div_by_16,255,1);
break;}}}
}}
void hienthi()
{
For(i=0;i<=2;i++)
{
Int ht[10]={192,249,164,176,153,146,130,248,128,144};
c5=0;
c4=1;
portd=ht[chuc];
delay_ms(50);
c5=1;
c4=0;
portd=ht[donvi];
delay_ms(50);
}}
-
09-07-2012, 17:32 #4
Ðề: Đo tốc độ động cơ, hiển thị ra LED 7 đoạn !!
Ts : chu kỳ trích mẫu, đơn vị là (s);
A : số xung đọc về trong thời gian Ts, đơn vị là (xung);
B : độ phân dải encode, đơn vị là (xung/vòng)
V : tốc độ động cơ, đơn vị là (vòng/phút);
V = A/(B*Ts*60) vòng/phút;
Hiển thị giá trị V lên Led 7 thanh là ok.
Chú ý :
- Hiển thị giá trị bất kỳ lên Led;
- Kiểm tra lại các giá trị đặt trong các Timer xem có đúng yêu cầu không?
- Tính giá trị V;
- Test từng phần nhỏ trước : Hiển thị Led => Đọc xung+hiển thị Led => Đặt Ts + Đọc xung+hiển thị Led => Các bước cơ bản làm xong mới thêm, PWM, nút ấn, truyền thông…
- Sau khi kết thúc thời gian trích mẫu =>không đếm xung nữa và tính toán V => hiển thị ra Led 7 thanh => sau đó mới đếm xung ở chu kỳ trích mẫu tiếp theo.
- Chọn Ts phù hợp(1ms->10ms).
Nâng cao : Dùng thuật toán PID để điều khiển động cơ.
-
22-08-2012, 11:18 #5
Ðề: Đo tốc độ động cơ, hiển thị ra LED 7 đoạn !!
Anh có thể cho em toàn bộ tài liệu và code của nó không ạ?
Nếu được có mô phỏng proteus càng tốt hj.
em tham khảo tý
-
07-09-2012, 14:35 #6
Ðề: Đo tốc độ động cơ, hiển thị ra LED 7 đoạn !!
chủ đề này nói chung là rất khó, mong anh em nhiệt tình chỉ bảo
-
07-09-2012, 16:24 #7
-
25-09-2012, 01:26 #8
Ðề: Đo tốc độ động cơ, hiển thị ra LED 7 đoạn !!
welcometo97!
Có tinh thần học tập. Mà bạn còn đang học hay ra trường rồi? Những điều ban hỏi mình thấy rất chuyên.
http://www.youtube.com/watch?v=3MCIw16x0oo
-
The Following 2 Users Say Thank You to tantravinh For This Useful Post:
-
26-09-2012, 12:07 #9
Ðề: Đo tốc độ động cơ, hiển thị ra LED 7 đoạn !!
tình hình là em cần 1 chương trình đo tốc độ động cơ hiển thị ra led 7 đoạn, anh nào giúp em với ^!^
em có đo tốc độ mà hiển thị ra LCD, ông giảng viên ko chấp nhận hic hic
-
03-10-2012, 17:58 #10
Ðề: Đo tốc độ động cơ, hiển thị ra LED 7 đoạn !!
xin chào mọi người, mình đang làm cái đồ án điều khiển tốc độ động cơ DC, khi minh cấp nguồn trực tiếp cho động cơ thì thấy động cơ quay rất mạnh, còn khi cấp qua mạch công suất, mình kích thử ở tín hiệu điều khiển thì thấy động cơ quay chậm hơn(chỉ tầm 1 nửa khi cấp trực tiếp), cho mình hỏi bây giờ mình phải thay con FET bao nhiêu để động cơ có thể quay nhanh lên được, cảm ơn mọi người nhiều.(mình đang dùng FET IR 540, mình kích bằng nguồn 12V,5A)