Thông báo

Collapse
No announcement yet.

PWM động cơ DC đk bằng 89

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • PWM động cơ DC đk bằng 89

    Mình làm 1 mạch đo nhiệt độ 6 kênh trên VDK 89 và ý định là sẽ điều khiển tốc độ động cơ DC theo nhiệt độ (động cơ quạt của máy tính dùng nguồn 5V ) bằng pp PWM, mình chưa hiểu về pp này lắm.có nhiều phương án để thiết kế cho mạch PWM, trong ừng dụng của mình chỉ để đk 1 động cơ nhơ như thế này thì nên thiết kế như thế nào?
    mong các bạn chỉ giúp!
    thanks

  • #2
    Nếu bạn đã có kênh ADC cho con 8051 này thì bạn chỉ việc điều khiển PWM theo cái giá trị ADC đó là đc.Với 8051 bạn cần viết PWM cho nó(Vì loại của Atmel ko có PWM -Dùng 89V của Philip thì có sẵn).Để viết PWM cho 8051 bạn dùng timer.


    Add: 97 Quán Nam - Lê Chân - Hải Phòng.
    Tel: 031 518648 Phone: 0904 283 505

    Comment


    • #3
      đây là đoạn code mình làm BT lớn.Tham khảo nhé
      #include <regx51.h>
      unsigned char x_pc=0,x_vdk=0,w=0,d=0;
      unsigned int tg=0;
      #define dao_chieu P1_1
      void init()//khoi tao ban dau cho ngat
      {
      EA=1;//cho phep ngat toan cuc
      ES=1;//cho phep ngat noi tiep
      PS=1;//uu tien ngat noi tiep
      ET0=1;
      EX0=1;
      //----------------thiet lap tna so bus---------------------
      TMOD=0x22;//chon timer 1 che do 8 bit tu lap lai
      TH1=0xFD;//chon toc do bauds la 9600
      SCON=0x50;//chon khung du lieu 8 bit
      TR1=1;//khoi dong timer 1
      TH0=0x0E;//thoi gian ngat ~2us
      TL0=0x0E;//thoi gian ngat ~2us
      IT0=1;//ngat theo suon xuong
      TR0=1;//khoi dong timer 0

      }
      //---------------ham xu ly ngat noi tiep-------------------
      void ngat_noi_tiep(void) interrupt 4
      {
      if(RI==1)//kiem tra co nhan RI
      {
      RI=0;
      x_pc=SBUF;
      }
      }
      void ngat_dinh_thoi_0(void) interrupt 1
      {
      TF0=0;
      d++;
      tg++;
      if(tg==500)//1ms cap nhat toc do 1 lan
      {
      tg=0;
      if(x_vdk < x_pc)
      {
      w++;
      }
      if(w>100)
      {
      w--;
      }
      else if(x_vdk > x_pc)
      {
      w--;
      }
      SBUF=x_vdk;
      while(TI==0){}
      TI=0;
      x_vdk=0;
      }
      }
      void ngat_ngoai_0(void) interrupt 0
      {
      x_vdk ++;
      }
      //---------chuong trinh chinh--------------------------------
      void main()
      {
      init();
      P1=0xF0;
      //---------tao xung tren P3.7--------------------------------
      while(1)
      {
      //nhay led o day
      while(x_pc==0)
      {
      P1_0=0;//tat PWM
      }
      if(d<=w)
      {
      P1_0=1;//setb P1_0-bat PWM
      }
      else if(d>w && d<=100)
      {
      P1_0=0;//xoa PWM
      }
      else
      d=0;
      }

      }


      Add: 97 Quán Nam - Lê Chân - Hải Phòng.
      Tel: 031 518648 Phone: 0904 283 505

      Comment


      • #4
        Nguyên văn bởi hoangdai Xem bài viết
        đây là đoạn code mình làm BT lớn.Tham khảo nhé
        #include <regx51.h>
        unsigned char x_pc=0,x_vdk=0,w=0,d=0;
        unsigned int tg=0;
        #define dao_chieu P1_1
        void init()//khoi tao ban dau cho ngat
        {
        EA=1;//cho phep ngat toan cuc
        ES=1;//cho phep ngat noi tiep
        PS=1;//uu tien ngat noi tiep
        ET0=1;
        EX0=1;
        //----------------thiet lap tna so bus---------------------
        TMOD=0x22;//chon timer 1 che do 8 bit tu lap lai
        TH1=0xFD;//chon toc do bauds la 9600
        SCON=0x50;//chon khung du lieu 8 bit
        TR1=1;//khoi dong timer 1
        TH0=0x0E;//thoi gian ngat ~2us
        TL0=0x0E;//thoi gian ngat ~2us
        IT0=1;//ngat theo suon xuong
        TR0=1;//khoi dong timer 0

        }
        //---------------ham xu ly ngat noi tiep-------------------
        void ngat_noi_tiep(void) interrupt 4
        {
        if(RI==1)//kiem tra co nhan RI
        {
        RI=0;
        x_pc=SBUF;
        }
        }
        void ngat_dinh_thoi_0(void) interrupt 1
        {
        TF0=0;
        d++;
        tg++;
        if(tg==500)//1ms cap nhat toc do 1 lan
        {
        tg=0;
        if(x_vdk < x_pc)
        {
        w++;
        }
        if(w>100)
        {
        w--;
        }
        else if(x_vdk > x_pc)
        {
        w--;
        }
        SBUF=x_vdk;
        while(TI==0){}
        TI=0;
        x_vdk=0;
        }
        }
        void ngat_ngoai_0(void) interrupt 0
        {
        x_vdk ++;
        }
        //---------chuong trinh chinh--------------------------------
        void main()
        {
        init();
        P1=0xF0;
        //---------tao xung tren P3.7--------------------------------
        while(1)
        {
        //nhay led o day
        while(x_pc==0)
        {
        P1_0=0;//tat PWM
        }
        if(d<=w)
        {
        P1_0=1;//setb P1_0-bat PWM
        }
        else if(d>w && d<=100)
        {
        P1_0=0;//xoa PWM
        }
        else
        d=0;
        }

        }
        cám ơn bạn chia sẻ, bạn có thể cho mình biết lưu đồ của pp timer PWM trong 89 không?

        Comment

        Về tác giả

        Collapse

        vankhoakmt Tìm hiểu thêm về vankhoakmt

        Bài viết mới nhất

        Collapse

        Đang tải...
        X