• Webdien.com - Cầu nối dân điện


    1. [HOT] - Webdien đang tuyển các vị trí quản lý cao cấp


  • Trang 1 của 2 12 CuốiCuối
    Kết quả 1 đến 10 của 12
    1. #1
      Tham gia
      14-06-2012
      Bài viết
      8
      Cảm ơn
      1
      Được cảm ơn 0 lần, trong 0 bài

      Mặc định Đ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:


    2. #2
      Tham gia
      18-05-2010
      Địa chỉ
      Long Hải
      Bài viết
      1,565
      Cảm ơn
      226
      Được cảm ơn 909 lần, trong 605 bài

      Mặc định Ðề: Đo tốc độ động cơ, hiển thị ra LED 7 đoạn !!

      Trích dẫn Gửi bởi m4ito4n Xem bài viết
      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??
      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

    3. The Following 2 Users Say Thank You to caovanhuong For This Useful Post:


    4. #3
      Tham gia
      14-06-2012
      Bài viết
      8
      Cảm ơn
      1
      Được cảm ơn 0 lần, trong 0 bài

      Mặc định Ðề: Đo tốc độ động cơ, hiển thị ra LED 7 đoạn !!

      Trích dẫn Gửi bởi caovanhuong Xem bài viết
      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.
      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);
      }}





    5. #4
      Tham gia
      12-01-2012
      Địa chỉ
      VN
      Bài viết
      15
      Cảm ơn
      0
      Được cảm ơn 9 lần, trong 8 bài

      Mặc định Ðề: Đ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ơ.

    6. #5
      Tham gia
      12-05-2012
      Bài viết
      56
      Cảm ơn
      11
      Thanked 3 Times in 1 Post

      Mặc định Ðề: Đ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ý

    7. #6
      Tham gia
      07-09-2012
      Bài viết
      2
      Cảm ơn
      0
      Được cảm ơn 0 lần, trong 0 bài

      Mặc định Ðề: Đ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

    8. #7
      Tham gia
      11-04-2012
      Địa chỉ
      HCM
      Bài viết
      173
      Cảm ơn
      17
      Được cảm ơn 44 lần, trong 42 bài

      Mặc định Ðề: Đo tốc độ động cơ, hiển thị ra LED 7 đoạn !!

      Trích dẫn Gửi bởi windysky17 Xem bài viết
      chủ đề này nói chung là rất khó, mong anh em nhiệt tình chỉ bảo
      Cái này cũng không khó lắm, mại muốn làm thì cứ nghiêng cứu là ra, không ai rảnh mà chỉ cho các bạn từ a-z hết cả, các bạn phải làm, không ổn người khác mới giúp
      a

    9. #8
      Tham gia
      16-04-2012
      Bài viết
      90
      Cảm ơn
      0
      Được cảm ơn 38 lần, trong 25 bài

      Mặc định Ðề: Đ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

    10. The Following 2 Users Say Thank You to tantravinh For This Useful Post:


    11. #9
      Tham gia
      12-11-2011
      Bài viết
      3
      Cảm ơn
      1
      Được cảm ơn 0 lần, trong 0 bài

      Mặc định Ðề: Đ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

    12. #10
      Tham gia
      09-05-2012
      Bài viết
      10
      Cảm ơn
      0
      Được cảm ơn 0 lần, trong 0 bài

      Mặc định Ðề: Đ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)

    Trang 1 của 2 12 CuốiCuối

    Trả lời với tài khoản Facebook

    Văn Võ Trạng Nguyên
    Hắc Hiệp Đại Chiến Thánh Bài 2
    Đặc Cảnh Diệt Ma
    Khử Ma Đạo Trưởng
    Cương Thi Diệt Tà
    Sự Hình Thành Của Đế Chế Mông Cổ
    NHỮNG KHOẢNH KHẮC ĐÁNG NHỚ CỦA GIẢI GOLF PHÚ MỸ HƯNG 2016