一、前言
二、模塊介紹及原理說明
三、硬件連接
四、程序說明
五、效果演示
六、代碼鏈接
一、前言
直流電機(jī)控制系統(tǒng),通過按鍵對(duì)直流電機(jī)進(jìn)行控制;可以調(diào)節(jié)直流電機(jī)的速度等級(jí),旋轉(zhuǎn)方向,并將其顯示在LCD1602液晶顯示屏上;簡(jiǎn)單的直流電機(jī)控制可以應(yīng)用在遙控車上,還可安裝在自制小風(fēng)扇等多種小型電器上,但此設(shè)計(jì)中直流電機(jī)控制不是很準(zhǔn)確,在一些精密直流電機(jī)控制上使用效果較差。
二、模塊介紹及原理說明
單片機(jī)最小系統(tǒng):
![pYYBAGK9V16AYE5CAABLgft5QfU993.png](https://file.elecfans.com/web2/M00/4E/E7/pYYBAGK9V16AYE5CAABLgft5QfU993.png)
單片機(jī)最小系統(tǒng)完成系統(tǒng)運(yùn)行的最基本電路,單片機(jī)最小系統(tǒng)可配合其他模塊或自行搭建電路完成各種實(shí)驗(yàn)功能,單片機(jī)最小系統(tǒng)接口設(shè)計(jì)靈活,電路簡(jiǎn)潔,可完成基本的驅(qū)動(dòng)任務(wù)。單片機(jī)最小系統(tǒng)包括晶振電路、復(fù)位電路。復(fù)位電路我使用按鍵復(fù)位,方便系統(tǒng)的重啟。
LCD1602顯示屏:
![pYYBAGK9V3CABA9MAAAkCA37-4s357.png](https://file.elecfans.com/web2/M00/4E/E7/pYYBAGK9V3CABA9MAAAkCA37-4s357.png)
LCD顯示屏有64行,每行有128列,每8列對(duì)應(yīng)1字節(jié)的8位,即每行由16字節(jié),共16×8=128個(gè)點(diǎn)組成。
字符型液晶顯示模塊是一種專門用于顯示字母、數(shù)字和符號(hào)等的點(diǎn)陣式LCD。一般的LCD1602字符型液晶顯示器能夠顯示英文字母、阿拉伯?dāng)?shù)字、日文片假名和一般性符號(hào)。
![pYYBAGK9V4CAGoAwAABakL-wn6w295.png](https://file.elecfans.com/web2/M00/4E/E7/pYYBAGK9V4CAGoAwAABakL-wn6w295.png)
電機(jī)驅(qū)動(dòng):
![poYBAGK9V42AeeVAAABLv_UUSsI239.png](https://file.elecfans.com/web2/M00/4E/4C/poYBAGK9V42AeeVAAABLv_UUSsI239.png)
NPN三極管Q7、Q9控制電機(jī)正轉(zhuǎn),當(dāng)Q7、Q9導(dǎo)通后,OUT控制Q1、Q3三極管導(dǎo)通與關(guān)閉的時(shí)間來調(diào)節(jié)直流電機(jī)的速度。同理NPN三極管Q5、Q8控制電機(jī)正轉(zhuǎn),當(dāng)Q5、Q8導(dǎo)通后,OUT控制Q2、Q4三極管導(dǎo)通與關(guān)閉的時(shí)間來調(diào)節(jié)直流電機(jī)的速度。
三、硬件連接
![pYYBAGK9V5qAHSrJAACQa4imacg170.png](https://file.elecfans.com/web2/M00/4E/E7/pYYBAGK9V5qAHSrJAACQa4imacg170.png)
仿真連接
P1^0~P1^3為按鍵控制端口。P1^0控制電機(jī)正轉(zhuǎn);P1^1控制電機(jī)反轉(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電機(jī)正反轉(zhuǎn)控制。
P2^5電機(jī)PWM控制。
四、程序說明
![poYBAGK9V6OAKz2XAAEEXyIzXgo112.png](https://file.elecfans.com/web2/M00/4E/4C/poYBAGK9V6OAKz2XAAEEXyIzXgo112.png)
主程序,用以調(diào)用不同的函數(shù)。控制速度的加減,電機(jī)的正反轉(zhuǎn),調(diào)用LCD1602顯示函數(shù)。
void main (void)
{
int S=0;
char displaytemp[16];//定義顯示區(qū)域臨時(shí)存儲(chǔ)數(shù)組
PWM_ON=0;
LCD_Init(); //初始化液晶屏
Init_Timer0(); //初始化定時(shí)器0
LCD_Write_String(2,1,"V:"); //正轉(zhuǎn)
while (1) //主循環(huán)
{
if(key3==0)//第三個(gè)按鍵,速度等級(jí)增加
{
DelayMs(10); //消抖
if(key3==0)
{
if(PWM_ON=12)S=12;
}
while(!key3);
}
else if(key4==0)//第四個(gè)按鍵,速度等級(jí)減小
{
DelayMs(10);
if(key4==0)
{
if(PWM_ON>0)
PWM_ON--;
S--;
if(S<=0)S=0;
}
while(!key4);
}
if(key1==0)//第一個(gè)按鍵,正轉(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)//第二個(gè)按鍵,反轉(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); //顯示速度等級(jí),一共分為十二個(gè)等級(jí)
}
})>
定時(shí)器函數(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; //如果定時(shí)等于on的時(shí)間,
//說明作用時(shí)間結(jié)束,輸出低電平
}
count++;
if(count == CYCLE) //反之低電平時(shí)間結(jié)束后返回高電平
{
count=0;
if(PWM_ON!=0) //如果開啟時(shí)間是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)移動(dòng)設(shè)置*/
DelayMs(5);
LCD_Write_Com(0x0C); /*顯示開及光標(biāo)設(shè)置*/
}
延時(shí)函數(shù),用于按鍵的消抖,以及程序的延時(shí)。
/*------------------------------------------------
uS延時(shí)函數(shù),含有輸入參數(shù) unsigned char t,無返回值
unsigned char 是定義無符號(hào)字符變量,其值的范圍是
0~255 這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編,大致延時(shí)
長度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
while(--t);
}
/*------------------------------------------------
mS延時(shí)函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
unsigned char 是定義無符號(hào)字符變量,其值的范圍是
0~255 這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編
------------------------------------------------*/
void DelayMs(unsigned char t)
{
while(t--)
{
//大致延時(shí)1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
五、效果演示
仿真演示
https://live.csdn.net/v/220628
六、代碼鏈接
歡迎留言評(píng)論分享自己的看法,如有錯(cuò)誤歡迎指正。關(guān)注公眾號(hào):“小小創(chuàng)客者”回復(fù)“直流電機(jī)控制系統(tǒng)設(shè)計(jì)“獲得源碼及仿真。
審核編輯:湯梓紅
-
單片機(jī)
+關(guān)注
關(guān)注
6043文章
44621瀏覽量
638570 -
控制系統(tǒng)
+關(guān)注
關(guān)注
41文章
6659瀏覽量
110888 -
直流電機(jī)
+關(guān)注
關(guān)注
36文章
1710瀏覽量
70412
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
51單片機(jī)的直流電機(jī)控制
單片機(jī)在汽車駕駛模擬器中的應(yīng)用
基于STM32單片機(jī)的直流電機(jī)控制系統(tǒng)加減速正反轉(zhuǎn)設(shè)計(jì)方案原理圖程序資料下載
基于單片機(jī)直流電機(jī)控制系統(tǒng)
怎樣去設(shè)計(jì)基于51單片機(jī)的直流電機(jī)控制系統(tǒng)
如何實(shí)現(xiàn)STM32單片機(jī)的直流電機(jī)控制系統(tǒng)加減速正反轉(zhuǎn)的設(shè)計(jì)?
基于單片機(jī)的直流電機(jī)控制系統(tǒng)在動(dòng)態(tài)送風(fēng)裝置中的應(yīng)用
基于TB6612FNG和單片機(jī)的直流電機(jī)控制系統(tǒng)設(shè)計(jì)
![基于TB6612FNG和<b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>直流電機(jī)</b><b class='flag-5'>控制系統(tǒng)</b>設(shè)計(jì)](https://file1.elecfans.com//web2/M00/A5/B0/wKgZomUMOZqAdJu7AABtF36dXYo496.jpg)
基于AVR單片機(jī)的無刷直流電機(jī)控制系統(tǒng)設(shè)計(jì)
![基于AVR<b class='flag-5'>單片機(jī)</b>的無刷<b class='flag-5'>直流電機(jī)</b><b class='flag-5'>控制系統(tǒng)</b>設(shè)計(jì)](https://file.elecfans.com/web2/M00/49/70/pYYBAGKhtFCAce6DAAALF85Omh0819.jpg)
TB6612FNG簡(jiǎn)介及其與單片機(jī)的直流電機(jī)控制系統(tǒng)設(shè)計(jì)
基于單片機(jī)的紅外遙控直流電機(jī)控制系統(tǒng)設(shè)計(jì)
基于單片機(jī)電機(jī)控制系統(tǒng)仿真設(shè)計(jì)-單片機(jī)設(shè)計(jì)
![基于<b class='flag-5'>單片機(jī)電機(jī)</b><b class='flag-5'>控制系統(tǒng)</b>仿真設(shè)計(jì)-<b class='flag-5'>單片機(jī)</b>設(shè)計(jì)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
基于STM32單片機(jī)的直流電機(jī)控制系統(tǒng)加減速正反轉(zhuǎn)設(shè)計(jì)方案原理圖程序
![基于STM32<b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>直流電機(jī)</b><b class='flag-5'>控制系統(tǒng)</b>加減速正反轉(zhuǎn)設(shè)計(jì)方案原理圖程序](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
基于51單片機(jī)的直流電機(jī)控制系統(tǒng)Proteus仿真
基于單片機(jī)的直流電機(jī)控制系統(tǒng)模擬汽車行駛過程中受到的回正力矩
![基于<b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>直流電機(jī)</b><b class='flag-5'>控制系統(tǒng)</b>模擬汽車行駛過程中受到的回正力矩](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論