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

Thảo luận trong 'Họ 8051'

Đang xem chủ đề này ( Thành viên: 0, Khách: 0)

  1. daotruongpro

    daotruongpro http://vtechpro.vn

    Tham gia ngày:
    4/9/12
    Bài viết:
    382
    Đã được thích:
    499
    Điểm thành tích:
    93
    Giới tính:
    Nam
    Nghề nghiệp:
    Kỹ sư Điện tử - Truyền thông
    Nơi ở:
    Hà Nội
    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.
    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
    
    }
     

    Các file đính kèm:

    Son07101997, Storm Virut, THUONGDTQB8 others thích bài này.
  2. daotruongpro

    daotruongpro http://vtechpro.vn

    Tham gia ngày:
    4/9/12
    Bài viết:
    382
    Đã được thích:
    499
    Điểm thành tích:
    93
    Giới tính:
    Nam
    Nghề nghiệp:
    Kỹ sư Điện tử - Truyền thông
    Nơi ở:
    Hà Nội
    Khi nào cho mạch chạy các bạn nhớ click vào động cơ đổi cái encoder từ 32 thành 200 nhé.:)
     
    BolideBuiBachTuanAnh thích bài này.
  3. Hau Rocker

    Hau Rocker Học sinh phổ thông

    Tham gia ngày:
    20/9/13
    Bài viết:
    3
    Đã được thích:
    0
    Điểm thành tích:
    1
    Giới tính:
    Nam
    Nghề nghiệp:
    sv
    Nơi ở:
    daklak
    Mình đang làm đồ án đo tốc đọ động cơ .cảm ơn tinh thần chia sẻ cao
     
  4. daotruongpro

    daotruongpro http://vtechpro.vn

    Tham gia ngày:
    4/9/12
    Bài viết:
    382
    Đã được thích:
    499
    Điểm thành tích:
    93
    Giới tính:
    Nam
    Nghề nghiệp:
    Kỹ sư Điện tử - Truyền thông
    Nơi ở:
    Hà Nội
    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)!
     
  5. dainv

    dainv http://vntech24h.com/

    Tham gia ngày:
    6/9/12
    Bài viết:
    411
    Đã được thích:
    656
    Điểm thành tích:
    93
    Giới tính:
    Nam
    Nghề nghiệp:
    Engineer Electronic
    Nơi ở:
    Vĩnh Phúc
    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.
     
    daotruongpro thích bài này.
  6. ệp anh

    ệp anh Học sinh phổ thông

    Tham gia ngày:
    3/10/13
    Bài viết:
    1
    Đã được thích:
    0
    Điểm thành tích:
    1
    Giới tính:
    Nam
    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
     
  7. verk00

    verk00 Học sinh phổ thông

    Tham gia ngày:
    10/12/13
    Bài viết:
    2
    Đã được thích:
    1
    Điểm thành tích:
    1
    Giới tính:
    Nam
    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
     
    daotruongpro thích bài này.
  8. mta_cdt

    mta_cdt Super Moderator Staff Member

    Tham gia ngày:
    10/8/12
    Bài viết:
    2,907
    Đã được thích:
    3,594
    Điểm thành tích:
    113
    Giới tính:
    Nam
    Vậy thì bạn đã làm được những gì rồi và còn vướng mắc những gì.
     
    daotruongpro thích bài này.
  9. verk00

    verk00 Học sinh phổ thông

    Tham gia ngày:
    10/12/13
    Bài viết:
    2
    Đã được thích:
    1
    Điểm thành tích:
    1
    Giới tính:
    Nam
    đồ á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 !
     
  10. daotruongpro

    daotruongpro http://vtechpro.vn

    Tham gia ngày:
    4/9/12
    Bài viết:
    382
    Đã được thích:
    499
    Điểm thành tích:
    93
    Giới tính:
    Nam
    Nghề nghiệp:
    Kỹ sư Điện tử - Truyền thông
    Nơi ở:
    Hà Nội
    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 :))
     

Chia sẻ trang này