Em vừa mới chân ướt chân ráo nhận đồ án. Em làm mạch đo và hiển thị(LED) tốc độ động cơ DC. Sử dụng Vi xử lý 8051+encoder. Nhưng e không biết mạch nguyên lý, sơ đồ khối, cần những con IC nào và bắt đầu từ đâu hết? Mong các anh và chị cho em chút tư vấn và tài liệu! xin cảm ơn. Nếu chủ đề này có trùng mong các anh chị đừng xóa và chỉ đường link dùm em!
Thông báo
Collapse
No announcement yet.
Mạch đo và hiển thị động cơ DC!
Collapse
X
-
Code hiển thị led 7 đoạn. bạn tham khảoCode:#include <REGX51.H> sbit A1 = P1^0; sbit A2 = P1^1; sbit A3 = P1^2; sbit A4 = P1^3; sbit TANG=P1^4; sbit GIAM=P1^5; unsigned char so[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsigned long xung,i; unsigned int k; unsigned char dem,tocdo; /////////////////////////////////////// void delay(int time) // ham delay phuc vu quet led {int n; for(n=0;n<time;n++) { ; } } ////////////////////////////////////// void quetled7() // ham quet led 7 { //////////////// hang nghin A1 = 1; P2 = so[i/1000]; delay(50); A1 = 0; P2=0xff; ////////////////////////// hang tram A2=1; P2=so[(i/100)%10]; delay(50); A2=0; P2=0xff; ///////////////////////////////// hang chuc A3=1; P2=so[(i/10)%10]; delay(50); A3=0; P2=0xff; //////////////////////////////// hang don vi A4=1; P2=so[i%10]; delay(50); A4=0; P2=0xff; } ///////////////////////////////////// void khoitaotimer() // { TMOD = 0x21; // timer0 che do 1 IE = 0x8A; TH0 = 0xC3; // tre 50us TL0 = 0x50; ET0 = 1; TR0 = 1; TH1 = -100; TL1 = -100; ET1 = 1; TR1 = 1; } //////////////////////////// void khoitaongatngoai() { EA=0; EX0=1; IT0=1; EA=1; } /////////////////////////////////////////// void isr_timer0() interrupt 1 { TF0=0; TR0=0; quetled7(); k++; TH0=0xC3; // gia tri nap lai TL0=0x50; if(k==20) // lay mau 1s { i=((xung*60)/32); // vong/phut encoder dung loai 32x k=0; xung=0; } TR0=1; } ///////////////////////////////////////// void isr_timer1() interrupt 3 { TF1=0; TR1=0; dem++; if(dem>100) dem=0; if(dem<tocdo) P1_6=1; else P1_6=0; TR1=1; } /////////////////////// phim nhan void phimnhan() { ////////////////////////// if((TANG==0)&&(GIAM==1)) { while(!TANG); tocdo=tocdo+10; if(tocdo==110)tocdo=100; } //////////////////////////////// if((GIAM==0)&&(TANG==1)) {while(!GIAM); tocdo=tocdo-10; if(tocdo==-10)tocdo=0; } } /////////////////////////////////// ham ngat ngoai void isr_ex0() interrupt 0 { xung++; } ////////////////////////////////////// ham chinh void main() {P1_6=1; khoitaotimer(); khoitaongatngoai(); while(1) {phimnhan(); } }Nguyễn Huy Biên - 01649 802 694
gmail :
Comment
-
Mấy bạn cứ xin đồ ăn sẵn vậy.
nếu không yêu cầu hiển thị chiều quay thì bạn cho đầu ra từ encoder vào chân nhắt của vdk đếm số xung trong 1 khoảng thời gian xác định nào đó rồi suy ra tốc độ thôi. nếu encoder có 2 đầu ra thì bạn có thể dùng chế độ x2 x4 số xung để tăng độ chính xác
còn việc hiển thị bạn có thể dùng các mạch chốt, ghi dịch để giữ trang thái của đèn, hoặc trực tiếp để cho vdk liên tục quét qua các led để hiển thị
Comment
-
http://www.dientuvietnam.net/forums/...54/#post642781Nguyên văn bởi youaremylife Xem bài viếtMấy bạn cứ xin đồ ăn sẵn vậy.
nếu không yêu cầu hiển thị chiều quay thì bạn cho đầu ra từ encoder vào chân nhắt của vdk đếm số xung trong 1 khoảng thời gian xác định nào đó rồi suy ra tốc độ thôi. nếu encoder có 2 đầu ra thì bạn có thể dùng chế độ x2 x4 số xung để tăng độ chính xác
còn việc hiển thị bạn có thể dùng các mạch chốt, ghi dịch để giữ trang thái của đèn, hoặc trực tiếp để cho vdk liên tục quét qua các led để hiển thị
anh ơi tư vấn giúp e với
Comment
-
Nguyên văn bởi bienhou Xem bài viếtCode hiển thị led 7 đoạn. bạn tham khảoCode:#include <REGX51.H> sbit A1 = P1^0; sbit A2 = P1^1; sbit A3 = P1^2; sbit A4 = P1^3; sbit TANG=P1^4; sbit GIAM=P1^5; unsigned char so[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsigned long xung,i; unsigned int k; unsigned char dem,tocdo; /////////////////////////////////////// void delay(int time) // ham delay phuc vu quet led {int n; for(n=0;n<time;n++) { ; } } ////////////////////////////////////// void quetled7() // ham quet led 7 { //////////////// hang nghin A1 = 1; P2 = so[i/1000]; delay(50); A1 = 0; P2=0xff; ////////////////////////// hang tram A2=1; P2=so[(i/100)%10]; delay(50); A2=0; P2=0xff; ///////////////////////////////// hang chuc A3=1; P2=so[(i/10)%10]; delay(50); A3=0; P2=0xff; //////////////////////////////// hang don vi A4=1; P2=so[i%10]; delay(50); A4=0; P2=0xff; } ///////////////////////////////////// void khoitaotimer() // { TMOD = 0x21; // timer0 che do 1 IE = 0x8A; TH0 = 0xC3; // tre 50us TL0 = 0x50; ET0 = 1; TR0 = 1; TH1 = -100; TL1 = -100; ET1 = 1; TR1 = 1; } //////////////////////////// void khoitaongatngoai() { EA=0; EX0=1; IT0=1; EA=1; } /////////////////////////////////////////// void isr_timer0() interrupt 1 { TF0=0; TR0=0; quetled7(); k++; TH0=0xC3; // gia tri nap lai TL0=0x50; if(k==20) // lay mau 1s { i=((xung*60)/32); // vong/phut encoder dung loai 32x k=0; xung=0; } TR0=1; } ///////////////////////////////////////// void isr_timer1() interrupt 3 { TF1=0; TR1=0; dem++; if(dem>100) dem=0; if(dem<tocdo) P1_6=1; else P1_6=0; TR1=1; } /////////////////////// phim nhan void phimnhan() { ////////////////////////// if((TANG==0)&&(GIAM==1)) { while(!TANG); tocdo=tocdo+10; if(tocdo==110)tocdo=100; } //////////////////////////////// if((GIAM==0)&&(TANG==1)) {while(!GIAM); tocdo=tocdo-10; if(tocdo==-10)tocdo=0; } } /////////////////////////////////// ham ngat ngoai void isr_ex0() interrupt 0 { xung++; } ////////////////////////////////////// ham chinh void main() {P1_6=1; khoitaotimer(); khoitaongatngoai(); while(1) {phimnhan(); } }
bạn có thể post sơ đồ nguyên lý lên được không
Comment
-
Cảm ơn thuật toán của bạn mình cũng đang có một đề tài cần dùng đến đo tốc độ động cơ đọc qua qua chưa hiểu gì. Nhờ code của bạn giờ hiểu hơn rồi. Thanks...Nguyên văn bởi bienhou Xem bài viếtCode hiển thị led 7 đoạn. bạn tham khảoCode:#include <REGX51.H> sbit A1 = P1^0; sbit A2 = P1^1; sbit A3 = P1^2; sbit A4 = P1^3; sbit TANG=P1^4; sbit GIAM=P1^5; unsigned char so[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsigned long xung,i; unsigned int k; unsigned char dem,tocdo; /////////////////////////////////////// void delay(int time) // ham delay phuc vu quet led {int n; for(n=0;n<time;n++) { ; } } ////////////////////////////////////// void quetled7() // ham quet led 7 { //////////////// hang nghin A1 = 1; P2 = so[i/1000]; delay(50); A1 = 0; P2=0xff; ////////////////////////// hang tram A2=1; P2=so[(i/100)%10]; delay(50); A2=0; P2=0xff; ///////////////////////////////// hang chuc A3=1; P2=so[(i/10)%10]; delay(50); A3=0; P2=0xff; //////////////////////////////// hang don vi A4=1; P2=so[i%10]; delay(50); A4=0; P2=0xff; } ///////////////////////////////////// void khoitaotimer() // { TMOD = 0x21; // timer0 che do 1 IE = 0x8A; TH0 = 0xC3; // tre 50us TL0 = 0x50; ET0 = 1; TR0 = 1; TH1 = -100; TL1 = -100; ET1 = 1; TR1 = 1; } //////////////////////////// void khoitaongatngoai() { EA=0; EX0=1; IT0=1; EA=1; } /////////////////////////////////////////// void isr_timer0() interrupt 1 { TF0=0; TR0=0; quetled7(); k++; TH0=0xC3; // gia tri nap lai TL0=0x50; if(k==20) // lay mau 1s { i=((xung*60)/32); // vong/phut encoder dung loai 32x k=0; xung=0; } TR0=1; } ///////////////////////////////////////// void isr_timer1() interrupt 3 { TF1=0; TR1=0; dem++; if(dem>100) dem=0; if(dem<tocdo) P1_6=1; else P1_6=0; TR1=1; } /////////////////////// phim nhan void phimnhan() { ////////////////////////// if((TANG==0)&&(GIAM==1)) { while(!TANG); tocdo=tocdo+10; if(tocdo==110)tocdo=100; } //////////////////////////////// if((GIAM==0)&&(TANG==1)) {while(!GIAM); tocdo=tocdo-10; if(tocdo==-10)tocdo=0; } } /////////////////////////////////// ham ngat ngoai void isr_ex0() interrupt 0 { xung++; } ////////////////////////////////////// ham chinh void main() {P1_6=1; khoitaotimer(); khoitaongatngoai(); while(1) {phimnhan(); } }
Let's go!!!
Comment
Bài viết mới nhất
Collapse
-
bởi chinhnguyen9
Điến âp vào 24V;Điên áp ra 30V;Dòng điện ra 10A
Trên nền tảng mạch Boost thay đổi như sau: cự âm tụ lọc C không nối mas mà nối vào Vc +24V
Mach phản hồi tao điê áp trên tụ lọc này ổn đinh ở 6V
Kết quả:
· Điện áp ra =24V+ 6V=30V
· Công...-
Channel: Hướng dẫn sử dụng diễn đàn
21-03-2026, 19:33 -
-
bởi chinhnguyen92. Các yếu tố để dòng điện đầu ra không bị "thiếu"
Dòng điện đầu ra bị "thiếu" có thể hiểu là không đủ 10A theo yêu cầu hoặc bị sụt áp khi tải thay đổi. Để đảm bảo điều này, bạn cần xem xét các yếu tố sau:
a. Khả năng chịu dòng của cuộn cảm- Dòng bão hòa (I_sat): Như
-
Channel: Hướng dẫn sử dụng diễn đàn
21-03-2026, 19:06 -
bởi chinhnguyen9
1. Tính toán cuộn cảm (Inductor)
Để tính giá trị cuộn cảm, chúng ta cần thực hiện các bước sau:
a. Xác định chu kỳ nhiệm vụ (Duty Cycle - D)
Với mạch tăng áp lý tưởng, chu kỳ nhiệm vụ được tính theo công thức :
D=1-VinVout=1-24V30V=0.2
Vậy D = 0.2 (20%)
b....-
Channel: Hướng dẫn sử dụng diễn đàn
21-03-2026, 19:03 -
-
bởi chinhnguyen9Công thức
Gain (dB) = 20 × log₁₀(A)
Thí dụ 1; 60dB
log₁₀(A)=60/20=3
⇒ A=V_out / V_in = 10³ = 1.000
Thí dụ 2; 100dB
log₁₀(A)=100/20=5
⇒ A=V_out / V_in = 105 = 100.000
Tí dụ 3; LM 358
Large Signal Open Loop Voltage Gain AVOL V/mV RL = 2.0...-
Channel: Hướng dẫn sử dụng diễn đàn
19-03-2026, 08:44 -
-
Trả lời cho Mạch 3s bị giảm điện áp đầu rabởi minhtri0405chả biết bạn xử lý được chưa , kích sạc hoặc điện áp > điện áp khối pin vào 2 chân P - P+ , nhiều mạch phải yêu cầu có kích lần đầu sau đó mới chạy...
-
Channel: Điện tử dành cho người mới bắt đầu
18-03-2026, 10:01 -
-
bởi minhtri0405đây có phải là 1 cách để test mosfet xịn hay dỏm khi mua đồ tàu không nhỉ , vì ko thể đập ra để coi lõi rồi trả hàng được....
-
Channel: Tâm tình dân kỹ thuật
18-03-2026, 09:57 -
-
Trả lời cho Giúp mình vẽ sơ đồ và phân tích nguyên lý làm việc của khảo sát các mạch nguồn ổn áp vớibởi Tuyenvc345
-
Channel: Hỗ trợ học tập
16-03-2026, 18:05 -
-
Trả lời cho Giúp mình vẽ sơ đồ và phân tích nguyên lý làm việc của khảo sát các mạch nguồn ổn áp vớibởi Tuyenvc345
-
Channel: Hỗ trợ học tập
16-03-2026, 18:04 -

Comment