Chia sẻ Đồ án đo tốc độ động cơ hiển thị LED 7 đoạn

daotruongpro

http://vtechpro.vn
#1
Chia sẻ với các bạn đồ án đo tốc động cơ, đồ án này làm từ 2012
Lập trình theo phần cứng của KIT8051 -LY5A-L2A bên Pnlab.vn cái này làm hộ người bạn bên HV Kỹ thuật Quân sự. Do không yêu cầu cao về độ chính xác nên mình để tốc độ tăng mỗi lần 4 vòng. Chương trình sử dụng ngắt ngoài đọc encoder (do độ phân dải encoder bình thường nên chưa dùng counter), Hiển thị lên Led7 đoạn. sai số vẫn hơi nhiều. mọi ngừơi tham khảo nhé

2013-09-17_130042.png

Code:
Mã:
/******************************************************************************

Chip type : STC89C52

Program type : Application

Clock frequency : 12 MHz

Project : DO TOC DO DONG CO

Version : V1.0

Date : 17/02/2013

Author : DAO XUAN TRUONG

Mobile : 0979.20.90.10

My Company :

Comments: Chuong trinh viet do toc do dong co mot chieu

Dau ra Encorder duoc dua vao chan ngat INT0

Encoder su dung la Encoder 32 xung

******************************************************************************/

#include<regx52.h>

#define Outled P0

#define true 1

#define false 0

#define THx15536/256

#define TLx 15536%256

sbit E0= P1^0;

sbit E1= P1^1;

sbit E2= P1^2;

sbit E3= P1^3;

sbit L0 = P2^0;

sbit L1 = P2^1;

sbit L2 = P2^2;

sbit L3 = P2^3;

sbit L4 = P2^1;

sbit L5 = P2^2;

sbit L6 = P2^3;

sbit L7 = P2^7;

sbit S1 = P3^4;

sbit S2 = P3^5;

sbit S3 = P3^6;

sbit S4 = P3^7;

sbit Sp = P1^5;

bit StTest=false;

bit chuki=false;

unsigned char k;

unsigned int Dem=10;

unsigned int Soxung,Demxung,Vong,n;

unsigned char time=0;

unsigned char CharCode[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//for number 0->9

void Sys_init();

void Display(unsigned int dem);

/******************************************************************************

Chuong trinh ngat INT0

******************************************************************************/

void NGAT0(void) interrupt 0

{

Demxung++;

}

void NGAT1(void) interrupt 2

{

StTest=!StTest;

}

/******************************************************************************

Chuong trinh ngat timer1 thoi gian tran 0.05s

******************************************************************************/

void ngat_time1(void) interrupt 3

{

time++ ;//tang bien dem thoi gian

if(Demxung>0)L7=!L7;

if(Demxung==0)

{

L7=1;

if(time==10)chuki=true;

}

if(time==80)//TIME = 4s chuan

{

TR1=0;//dung bo dinh thoi

chuki=true;//bao het thoi gian dem xung

time=0;

}

TH1=THx;TL1=TLx;//dat cho lan sau

}

/******************************************************************************

Chuong trinh tre

******************************************************************************/

void delay_us(unsigned long int d)

{

for(n=0;n<d;n++);

}

/******************************************************************************

Chuong trinh hien thi Led 7 doan

******************************************************************************/

void Display(unsigned int dem)

{

if(dem>=9999)//hien thi 4 so khi gia tri hien thi > 9999

{dem=9999;

L0=L1=L2=L3=0;

E0=0;

Outled=CharCode[dem/1000];

delay_us(1);

E0=1;

P0=0XFF;

E1=0;

Outled=CharCode[(dem%1000)/100];

delay_us(1);

E1=1;

P0=0XFF;

E2=0;

Outled=CharCode[(dem%100)/10];

delay_us(1);

E2=1;

P0=0XFF;

E3=0;

Outled=CharCode[dem%10];

delay_us(1);

E3=1;

P0=0XFF;

}

else if((dem<=999)&&(dem>99))//hien thi 3 so khi gia tri hien thi <999

{

L0=L1=L2=0;L3=1;

E0=1;

E1=0;

Outled=CharCode[(dem%1000)/100];

delay_us(1);

E1=1;

P0=0XFF;

E2=0;

Outled=CharCode[(dem%100)/10];

delay_us(1);

E2=1;

P0=0XFF;

E3=0;

Outled=CharCode[dem%10];

delay_us(1);

E3=1;

P0=0XFF;

}

else if((dem<=99)&&(dem>9)) //hien thi 2 so khi gia tri hien thi <99

{

L0=L1=0;L2=L3=1;

E1=E0=1;

E2=0;

Outled=CharCode[(dem%100)/10];

delay_us(1);

E2=1;

P0=0XFF;

E3=0;

Outled=CharCode[dem%10];

delay_us(1);

E3=1;

P0=0XFF;

}

else if((dem<=9))//hien thi 1 so khi gia tri hien thi <9

{

L0=0;L1=L2=L3=L4=L5=L6=1;

E2=E1=E0=1;

E3=0;

Outled=CharCode[dem%10];

delay_us(1);

E3=1;

P0=0XFF;

}

}

/******************************************************************************

Chuong trinh chinh

******************************************************************************/

void main(void)

{

Sys_init(); // goi chuong trinh khoi tao

P2=0X00;

Sp=0;

delay_us(8000);

Sp=1;

P2=0XFF;

while(true)

{

while(!chuki)

{

Vong=(Soxung/200)*15; // soxung(trong 4s)*15 = so vong trong 1phut

Display(Vong);

};

Soxung= Demxung;//luu gia tri so xung vua dem

Demxung=0;//dat lai so xung

TR1=1;//dat lai thoi gian

chuki=false;

while(StTest)

{

Display(Dem);

if(!S4)

{

delay_us(20);

while(!S4);

if(Dem<999)Dem+=1;

}

if(!S3)

{

delay_us(20);

while(!S3);

if(Dem<999)Dem+=2;

}

if(!S2)

{

delay_us(20);

while(!S2);

if(Dem>0)Dem-=1;

}

if(!S1)

{

delay_us(20);

while(!S1);

if(Dem>0) Dem-=2;

}

}

};

}

/******************************************************************************

Chuong trinh khoi tao

******************************************************************************/

void Sys_init()

{

TMOD=0x10;//cho time1 chay

EX0=1;//cho phep ngat ngoai 0

IT0=1;//cho phep ngat suon am

EX1=1;//cho phep ngat ngoai 1

IT1=1;//cho phep ngat suon am

TH1=THx;TL1=TLx;//dat gia tri cho time 1

TR1=1;//dat thoi gian bat dau chay

ET1=1;//cho phep ngat time 1

EA=1;//cho phep ngat toan cuc

}
 

Đính kèm

Hau Rocker

Học sinh phổ thông
#3
Mình đang làm đồ án đo tốc đọ động cơ .cảm ơn tinh thần chia sẻ cao
 

daotruongpro

http://vtechpro.vn
#4
Mình đang làm đồ án đo tốc đọ động cơ .cảm ơn tinh thần chia sẻ cao
Cái này làm là ăn luôn đấy. không cần chỉnh sửa gì đâu. Muốn chính xác đến 1 vòng (tăng 1 vòng mỗi lần thì code thêm thôi)!
 

dainv

http://vntech24h.com/
#5
Nếu Encordor sử dụng có số xung lớn thì bạn nên đọc Encordor bằng chân time. Khi đó đảm bảo độ chính xác cao mà không bị ảnh hưởng quá nhiều đến xử lý của chip.
 

ệp anh

Học sinh phổ thông
#6
các anh cho em biết cách sử dụng và cách đếm xung của encoder như thế nào không? hay có tài liệu nào nói về cách điều khiển động cơ bằng encoder k?em đang muốn học về encoder điều khiển động cơ nên mong mọi người chỉ giúp em vơi
 

verk00

Học sinh phổ thông
#7
em đang cần làm cái đồ án đo tốc độ động cơ dùng encoder và led 7 thanh dùng 3 nút ấn start stop và mode. Nguyên lý là ấn start động cơ chạy ở chế độ 1, ấn mode động cơ chuyển sang chế độ 2 và ngược lại, Ấn stop động cơ dùng, tốc độ động cơ được hiển thị trên led 7 thanh. Pro nào giúp e với e cảm ơn
 

mta_cdt

Super Moderator
Thành viên BQT
#8
em đang cần làm cái đồ án đo tốc độ động cơ dùng encoder và led 7 thanh dùng 3 nút ấn start stop và mode. Nguyên lý là ấn start động cơ chạy ở chế độ 1, ấn mode động cơ chuyển sang chế độ 2 và ngược lại, Ấn stop động cơ dùng, tốc độ động cơ được hiển thị trên led 7 thanh. Pro nào giúp e với e cảm ơn
Vậy thì bạn đã làm được những gì rồi và còn vướng mắc những gì.
 

verk00

Học sinh phổ thông
#9
đồ án yêu cầu khi ấn mode sẽ chuyển từ chế độ đo vòng/p sang chế độ đo vòng/s . E đang không biết làm ntn. bác có thể giúp em phần mô phỏng và thiết kế mạch được k ak. e xin cảm ơn !
 

daotruongpro

http://vtechpro.vn
#10
đồ án yêu cầu khi ấn mode sẽ chuyển từ chế độ đo vòng/p sang chế độ đo vòng/s . E đang không biết làm ntn. bác có thể giúp em phần mô phỏng và thiết kế mạch được k ak. e xin cảm ơn !
Vòng/p thì 1 phút cập nhật 1 lần. vòng/s thì 1 s cập nhật 1 lần cái này có gì đâu :))
 

Quảng cáo Google