一、前言
二、模塊介紹及原理說明
三、硬件連接
四、程序說明
五、效果演示
六、代碼鏈接
一、前言
直流電機控制系統(tǒng),通過按鍵對直流電機進行控制;可以調(diào)節(jié)直流電機的速度等級,旋轉(zhuǎn)方向,并將其顯示在LCD1602液晶顯示屏上;簡單的直流電機控制可以應(yīng)用在遙控車上,還可安裝在自制小風(fēng)扇等多種小型電器上,但此設(shè)計中直流電機控制不是很準(zhǔn)確,在一些精密直流電機控制上使用效果較差。
二、模塊介紹及原理說明
單片機最小系統(tǒng):

單片機最小系統(tǒng)完成系統(tǒng)運行的最基本電路,單片機最小系統(tǒng)可配合其他模塊或自行搭建電路完成各種實驗功能,單片機最小系統(tǒng)接口設(shè)計靈活,電路簡潔,可完成基本的驅(qū)動任務(wù)。單片機最小系統(tǒng)包括晶振電路、復(fù)位電路。復(fù)位電路我使用按鍵復(fù)位,方便系統(tǒng)的重啟。
LCD1602顯示屏:

LCD顯示屏有64行,每行有128列,每8列對應(yīng)1字節(jié)的8位,即每行由16字節(jié),共16×8=128個點組成。
字符型液晶顯示模塊是一種專門用于顯示字母、數(shù)字和符號等的點陣式LCD。一般的LCD1602字符型液晶顯示器能夠顯示英文字母、阿拉伯?dāng)?shù)字、日文片假名和一般性符號。

電機驅(qū)動:

NPN三極管Q7、Q9控制電機正轉(zhuǎn),當(dāng)Q7、Q9導(dǎo)通后,OUT控制Q1、Q3三極管導(dǎo)通與關(guān)閉的時間來調(diào)節(jié)直流電機的速度。同理NPN三極管Q5、Q8控制電機正轉(zhuǎn),當(dāng)Q5、Q8導(dǎo)通后,OUT控制Q2、Q4三極管導(dǎo)通與關(guān)閉的時間來調(diào)節(jié)直流電機的速度。
三、硬件連接

仿真連接
P1^0~P1^3為按鍵控制端口。P1^0控制電機正轉(zhuǎn);P1^1控制電機反轉(zhuǎn);P1^2加速;P1^3減速。
P0^7~P0^7為顯示屏數(shù)據(jù)傳輸端口。P0^7~P0^7與顯示屏D0~D7連接。
P2^2、P2^3、P2^4為顯示屏控制端口。P2^2、P2^3、P2^4分別于RS、RW、E相連。
P2^0、P2^1電機正反轉(zhuǎn)控制。
P2^5電機PWM控制。
四、程序說明

主程序,用以調(diào)用不同的函數(shù)??刂扑俣鹊募訙p,電機的正反轉(zhuǎn),調(diào)用LCD1602顯示函數(shù)。
void main (void)
{  
int S=0;
char displaytemp[16];//定義顯示區(qū)域臨時存儲數(shù)組               
PWM_ON=0;
LCD_Init();         //初始化液晶屏
Init_Timer0();    //初始化定時器0
LCD_Write_String(2,1,"V:");	   //正轉(zhuǎn)
while (1)         //主循環(huán)
  {
   if(key3==0)//第三個按鍵,速度等級增加
      {
	  DelayMs(10);    //消抖
	  if(key3==0)
	    {
	       if(PWM_ON=12)S=12;
	    }
		while(!key3);
	  }	
   else if(key4==0)//第四個按鍵,速度等級減小
          {
	         DelayMs(10);
	         if(key4==0)
	           {
	             if(PWM_ON>0)
	                PWM_ON--;
					S--;
					if(S<=0)S=0;
	           }
	   	     while(!key4);
	      }
	if(key1==0)//第一個按鍵,正轉(zhuǎn)
      {
	  DelayMs(10);
	  if(key1==0)
	    {
	       m=1;n=0;
		   LCD_Write_String(0,0,"T");	   //正轉(zhuǎn)顯示T
	    }
		while(!key1);
	  }	
   else if(key2==0)//第二個按鍵,反轉(zhuǎn)
          {
	         DelayMs(10);
	         if(key2==0)
	           {
	             m=0;n=1;
				 LCD_Write_String(0,0,"N");	   //反轉(zhuǎn)顯示N
	           }
	   	     while(!key2);
	      }	  	
	sprintf(displaytemp,"%3d",S);
    LCD_Write_String(4,1,displaytemp);	//顯示速度等級,一共分為十二個等級
  }
})>
定時器函數(shù),用來控制PWM值占空比的輸出。
void Timer0_isr(void) interrupt 1 
{
 static unsigned char count;
 TH0=(65536-2000)/256;        //重新賦值 2ms
 TL0=(65536-2000)%256;
 
if (count==PWM_ON) 
   {
   DCOUT = 0;        //如果定時等于on的時間,
             //說明作用時間結(jié)束,輸出低電平
   }
  count++;
if(count == CYCLE)    //反之低電平時間結(jié)束后返回高電平
   {
   count=0;
    if(PWM_ON!=0)   //如果開啟時間是0 保持原來狀態(tài)
      DCOUT = 1;   
   }
}
?
LCD1602顯示函數(shù)
/*------------------------------------------------
              寫入命令函數(shù)
------------------------------------------------*/
 void LCD_Write_Com(unsigned char com) 
 {  
// while(LCD_Check_Busy()); //忙則等待
 DelayMs(5);
 RS_CLR; 
 RW_CLR; 
 EN_SET; 
 DataPort= com; 
 _nop_(); 
 EN_CLR;
 }
/*------------------------------------------------
              寫入數(shù)據(jù)函數(shù)
------------------------------------------------*/
 void LCD_Write_Data(unsigned char Data) 
 { 
 //while(LCD_Check_Busy()); //忙則等待
 DelayMs(5);
 RS_SET; 
 RW_CLR; 
 EN_SET; 
 DataPort= Data; 
 _nop_();
 EN_CLR;
 }
/*------------------------------------------------
                清屏函數(shù)
------------------------------------------------*/
//void LCD_Clear(void) 
 //{ 
 //LCD_Write_Com(0x01); 
 //DelayMs(5);
 //}
/*------------------------------------------------
              寫入字符串函數(shù)
------------------------------------------------*/
 void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) 
 {     
       
 while (*s) 
 	{     
 LCD_Write_Char(x,y,*s);     
 s++;  x++;   
 	}
 }
/*------------------------------------------------
              寫入字符函數(shù)
------------------------------------------------*/
void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) 
 {     
 if (y == 0) 
 	{     
 	LCD_Write_Com(0x80 + x);     
 	}    
 else 
 	{     
 	LCD_Write_Com(0xC0 + x);     
 	}        
 LCD_Write_Data( Data);  
 }
/*------------------------------------------------
              初始化函數(shù)
------------------------------------------------*/
 void LCD_Init(void) 
 {
   LCD_Write_Com(0x38);    /*顯示模式設(shè)置*/ 
   DelayMs(5); 
   LCD_Write_Com(0x38); 
   DelayMs(5); 
   LCD_Write_Com(0x38); 
   DelayMs(5); 
   LCD_Write_Com(0x38);  
   LCD_Write_Com(0x08);    /*顯示關(guān)閉*/ 
   LCD_Write_Com(0x01);    /*顯示清屏*/ 
   LCD_Write_Com(0x06);    /*顯示光標(biāo)移動設(shè)置*/ 
   DelayMs(5); 
   LCD_Write_Com(0x0C);    /*顯示開及光標(biāo)設(shè)置*/
   }
   
延時函數(shù),用于按鍵的消抖,以及程序的延時。
/*------------------------------------------------
 uS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
 unsigned char 是定義無符號字符變量,其值的范圍是
 0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
 長度如下 T=tx2+5 uS 
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{   
 while(--t);
}
/*------------------------------------------------
 mS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
 unsigned char 是定義無符號字符變量,其值的范圍是
 0~255 這里使用晶振12M,精確延時請使用匯編
------------------------------------------------*/
void DelayMs(unsigned char t)
{
     
 while(t--)
 {
     //大致延時1mS
     DelayUs2x(245);
	 DelayUs2x(245);
 }
}
五、效果演示
仿真演示
https://live.csdn.net/v/220628
六、代碼鏈接
	歡迎留言評論分享自己的看法,如有錯誤歡迎指正。關(guān)注公眾號:“小小創(chuàng)客者”回復(fù)“直流電機控制系統(tǒng)設(shè)計“獲得源碼及仿真。
	審核編輯:湯梓紅
- 
                                單片機
                                +關(guān)注
關(guān)注
6072文章
45273瀏覽量
661623 - 
                                控制系統(tǒng)
                                +關(guān)注
關(guān)注
41文章
6867瀏覽量
113352 - 
                                直流電機
                                +關(guān)注
關(guān)注
36文章
1766瀏覽量
73287 
發(fā)布評論請先 登錄
51單片機的直流電機控制
單片機在汽車駕駛模擬器中的應(yīng)用
基于STM32單片機的直流電機控制系統(tǒng)加減速正反轉(zhuǎn)設(shè)計方案原理圖程序資料下載
基于單片機直流電機控制系統(tǒng)
怎樣去設(shè)計基于51單片機的直流電機控制系統(tǒng)
如何實現(xiàn)STM32單片機的直流電機控制系統(tǒng)加減速正反轉(zhuǎn)的設(shè)計?
基于單片機的直流電機控制系統(tǒng)在動態(tài)送風(fēng)裝置中的應(yīng)用
基于TB6612FNG和單片機的直流電機控制系統(tǒng)設(shè)計
    
TB6612FNG簡介及其與單片機的直流電機控制系統(tǒng)設(shè)計
基于單片機電機控制系統(tǒng)仿真設(shè)計-單片機設(shè)計
    
基于STM32單片機的直流電機控制系統(tǒng)加減速正反轉(zhuǎn)設(shè)計方案原理圖程序
    
基于單片機的直流電機控制系統(tǒng)模擬汽車行駛過程中受到的回正力矩
    
          
        
        
基于單片機的直流電機控制系統(tǒng)設(shè)計
                
 
    
           
            
            
                
            
評論