PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > PIC - Thiết kế và Ứng dụng

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

PIC - Thiết kế và Ứng dụng Ý tưởng cho các sản phẩm sử dụng PIC/dsPIC và các sản phẩm của Microchip

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 05-12-2010, 09:12 PM   #1
tuyetmuavienxu
Nhập môn đệ tử
 
Tham gia ngày: Mar 2009
Bài gửi: 2
:
Dùng PIC16F877A điều khiển động cơ DC.

undefinedHiện em đang làm Đồ án điều khiển động cơ DC, trầm trầy trầm trật mãi mới viết được đoạn code, em xin post lên đoạn code nhờ các anh chỉ dùm.
Code:
#include <16F877A.h>
#include <def_877A.h>
#fuses NOWDT,PUT,XT,NOPROTECT
#use delay(clock=20000000)
#use fast_io(b)

#byte portb=0x06

#bit hang1=0x06.0
#bit hang2=0x06.1
#bit hang3=0x06.2
#bit hang4=0x06.3
#bit cot1=0x06.4
#bit cot2=0x06.5
#bit cot3=0x06.6
#bit cot4=0x06.7

#define td_macdinh 80   //toc do mac dinh
#define tocdo1 124      //1/5 toc do cuc dai
#define tocdo2 248      //2/5 toc do cuc dai
#define tocdo3 372      //3/5 toc do cuc dai
#define tocdo4 496      //4/5 toc do cuc dai
#define tocdo5 620      //toc do cuc dai

int quetphim(int sttphim);
int a,sttphim;

int quetphim(int sttphim)
{
   portb=0x01;    //Cho cac hang muc 1
   portb=0x02;    
   portb=0x04;
   portb=0x08;
   portb=0xef;     // Cho cac cot muc 0
   portb=0xdf;
   portb=0xbf;
   portb=0x7f;

   if((!hang1)||(!hang2)||(!hang3)||(!hang4))    // kiem tra hang dc nhan
   {
      if(hang1==0)   // neu hang 1
      {
         portb=0x10;    // cho cac cot muc 1
         portb=0x20;    
         portb=0x40;
         portb=0x80;
         portb=0xfe;   // chuyen hang1 ve muc 0
         if(!cot1) sttphim=0;
         if(!cot2) sttphim=1;
         if(!cot3) sttphim=2;
         if(!cot4) sttphim=3;
      }

      if(hang2==0)
      {
         portb=0x10;   
         portb=0x20;    
         portb=0x40;
         portb=0x80;
         portb=0xfd;   // chuyen hang2 ve muc 0       
         if(!cot1) sttphim=4;
         if(!cot2) sttphim=5;
         if(!cot3) sttphim=6;
         if(!cot4) sttphim=7;
      }
      if(hang3==0)
      {

         portb=0x10;   
         portb=0x20;    
         portb=0x40;
         portb=0x80;
         portb=0xfb;   // chuyen hang3 ve muc 0       
         if(!cot1) sttphim=8;
         if(!cot2) sttphim=9;
         if(!cot3) sttphim=10;
         if(!cot4) sttphim=11;
      }
      if(hang4==0)
      {

         portb=0x10;   
         portb=0x20;    
         portb=0x40;
         portb=0x80;
         portb=0xf7;   // chuyen hang4 ve muc 0       
         if(!cot1) sttphim=12;
         if(!cot2) sttphim=13;
         if(!cot3) sttphim=14;
         if(!cot4) sttphim=15;
      }                   
   }
   return sttphim;
}
void main()
{
   int i=0;
   set_tris_b(0b11110000);
   enable_interrupts(global);
   enable_interrupts(int_RB);
   ext_int_edge(H_to_L);
   setup_ccp1(CCP_PWM);                   //khoi tao bo PWM1
   setup_ccp2(CCP_PWM);                   //khoi tao bo PWM2

   setup_timer_2(T2_div_by_16,154,1);     //tao chu ky xung 1ms
                                          //(1/clock)*4*t2div*(period+1)
                                          //(1/10e6)*4*16*(154+1)=1e-3=1ms
   set_pwm1_duty(0); 
   set_pwm2_duty(0);
   //portb=0;
   while(true)
   {
      
      while(i==0)
      {    
         quetphim(sttphim);
         a=sttphim;
         if(a==6)    goto nhan1;
         if(a==7)    goto nhan2;
         if(a==0)
         {
            delay_ms(5);
            set_pwm1_duty(0);
            set_pwm2_duty(0);
         }
      }
      nhan1:   quetphim(sttphim);
               a=sttphim;
               if(a==1)
               {
                  delay_ms(5);
                  set_pwm1_duty(tocdo1);
                  set_pwm2_duty(0);
               }
               if(a==2)
               {
                  delay_ms(5);
                  set_pwm1_duty(tocdo2);
                  set_pwm2_duty(0);
               }
               if(a==3)
               {
                  delay_ms(5);
                  set_pwm1_duty(tocdo3);
                  set_pwm2_duty(0);
               }
               if(a==4)
               {
                  delay_ms(5);
                  set_pwm1_duty(tocdo4);
                  set_pwm2_duty(0);
               }
               if(a==5)
               {
                  delay_ms(5);
                  set_pwm1_duty(tocdo5);
                  set_pwm2_duty(0);
               };
     nhan2:    quetphim(sttphim);
               a=sttphim;
               if(a==1)
               {
                  delay_ms(5);
                  set_pwm1_duty(0);
                  set_pwm2_duty(1);
               }
               if(a==2)
               {
                  delay_ms(5);
                  set_pwm1_duty(0);
                  set_pwm2_duty(2);
               }
               if(a==3)
               {
                  delay_ms(5);
                  set_pwm1_duty(0);
                  set_pwm2_duty(3);
               }
               if(a==4)
               {
                  delay_ms(5);
                  set_pwm1_duty(0);
                  set_pwm2_duty(4);
               }
               if(a==5)
               {
                  delay_ms(5);
                  set_pwm1_duty(0);
                  set_pwm2_duty(5);
               };
      
   }
}
Đoạn code trên em có dùng hàm quét phím của anh NHH, em chỉ dùng điều khiển mức cho động cơ. Đắn đo mãi em mới dám post lên nhờ mọi người, mong các anh đừng cười. Hic.
Còn đây là file mô phỏng của em. Là file MACH.rar, vì em có chút sửa đổi.
File Kèm Theo
File Type: rar HOAN THANH 4 - LCD - MT.rar (69.2 KB, 1510 lần tải)
File Type: rar MACH.rar (69.5 KB, 1660 lần tải)

thay đổi nội dung bởi: tuyetmuavienxu, 07-12-2010 lúc 08:30 PM.
tuyetmuavienxu vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 10:52 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam