吳 成,葉春生
(華中科技大學(xué) 材料科學(xué)與工程學(xué)院,湖北 武漢 430074)
基于STM32的多電機(jī)驅(qū)動(dòng)及液晶顯示控制系統(tǒng)設(shè)計(jì)
吳 成,葉春生
(華中科技大學(xué) 材料科學(xué)與工程學(xué)院,湖北 武漢 430074)
基于STM32設(shè)計(jì)了多步進(jìn)電機(jī)驅(qū)動(dòng)及液晶實(shí)時(shí)顯示控制系統(tǒng)。電機(jī)驅(qū)動(dòng)模塊以STM32F103VBT6為控制核心,控制三個(gè)步進(jìn)電機(jī)的運(yùn)動(dòng),利用按鍵實(shí)現(xiàn)電機(jī)及對(duì)應(yīng)工作模式的選擇。液晶顯示模塊以STM32F103C8T6為控制核心,用于顯示按鍵選擇的工作模式及電機(jī)工作狀態(tài)。兩模塊利用串口通信模塊實(shí)時(shí)通信。該系統(tǒng)具有結(jié)構(gòu)簡(jiǎn)單、操作簡(jiǎn)潔、界面友好和可移植性強(qiáng)等優(yōu)點(diǎn)。
STM32;步進(jìn)電機(jī);液晶顯示;串口通信;模塊化設(shè)計(jì)
步進(jìn)電機(jī)因其結(jié)構(gòu)簡(jiǎn)單、控制方便和具有較高的定位精度等優(yōu)點(diǎn),在工業(yè)控制領(lǐng)域應(yīng)用廣泛[1-2]。在工業(yè)實(shí)際應(yīng)用中,有時(shí)需要使用多個(gè)步進(jìn)電機(jī),并涉及多種工作模式,例如單步往返、連續(xù)往復(fù)和轉(zhuǎn)動(dòng)固定角度等,這對(duì)控制系統(tǒng)的功能多樣性和操作的簡(jiǎn)潔性提出了高要求。而步進(jìn)電機(jī)的工作狀態(tài)有運(yùn)動(dòng)中、運(yùn)動(dòng)完成和處于某一角度等,利用液晶屏將電機(jī)的運(yùn)動(dòng)狀態(tài)實(shí)時(shí)顯示出來(lái),能使控制系統(tǒng)更加人性化,便于操作人員實(shí)時(shí)觀(guān)察電機(jī)的狀態(tài)。
該系統(tǒng)共分為四個(gè)功能模塊。電機(jī)驅(qū)動(dòng)模塊以STM32F103VBT6為控制核心,利用按鍵控制兩個(gè)帶驅(qū)動(dòng)器的步進(jìn)電機(jī)和一個(gè)兩相四線(xiàn)微型步進(jìn)電機(jī)。液晶顯示模塊以STM32F103C8T6為控制核心,驅(qū)動(dòng)以KS0108為控制器的LCD12864液晶屏。串口通信模塊以MAX3232為主芯片,用于電機(jī)驅(qū)動(dòng)模塊和液晶顯示模塊之間的通信,達(dá)到實(shí)時(shí)顯示按鍵操作指令和電機(jī)運(yùn)動(dòng)狀態(tài)的目的。電源模塊則用于給控制系統(tǒng)供電。系統(tǒng)整體架構(gòu)圖如圖1所示。
圖1 系統(tǒng)整體架構(gòu)圖
表1列出了系統(tǒng)需要實(shí)現(xiàn)的功能及實(shí)現(xiàn)方法??紤]到在工控領(lǐng)域需要的步進(jìn)電機(jī)工作模式是多種多樣的,因而在系統(tǒng)功能設(shè)計(jì)過(guò)程中選擇了多種較為常見(jiàn)的工作模式。
表1 系統(tǒng)功能特點(diǎn)表
圖2 步進(jìn)電機(jī)1驅(qū)動(dòng)電路原理圖
圖3 液晶顯示模塊電路原理圖
本系統(tǒng)中的6個(gè)按鍵分別對(duì)應(yīng)電機(jī)選擇、工作模式選擇、角度/距離加、角度/距離減、確認(rèn)和停止功能。
在液晶實(shí)時(shí)顯示的過(guò)程中,為了使界面更加友好并具有較高的可移植性,需要對(duì)液晶的顯示界面進(jìn)行設(shè)計(jì)。LCD12864液晶能顯示4行8列,最多32個(gè)漢字(或64個(gè)字符)[3]。由于在本系統(tǒng)中需要利用按鍵實(shí)現(xiàn)電機(jī)、工作模式和角度的設(shè)置,而且3個(gè)電機(jī)的工作狀態(tài)需要實(shí)時(shí)顯示,據(jù)此將液晶屏根據(jù)行劃分為四個(gè)顯示區(qū)。第一行用于按鍵選擇實(shí)時(shí)顯示,包括電機(jī)類(lèi)型、工作模式和角度三個(gè)顯示單元;第二行至第四行依次為3個(gè)電機(jī)實(shí)時(shí)顯示區(qū),包括電機(jī)類(lèi)型、工作模式、角度和工作狀態(tài)四個(gè)顯示單元。其中當(dāng)電機(jī)1和電機(jī)2處于運(yùn)動(dòng)狀態(tài)時(shí),液晶的工作狀態(tài)顯示單元顯示“…”,電機(jī)2停止時(shí)工作狀態(tài)顯示為當(dāng)前所處角度。微型電機(jī)運(yùn)動(dòng)時(shí)工作狀態(tài)顯示為“√”,停止則不顯示。按鍵中的“確認(rèn)”按鈕被按下時(shí),就將第一行設(shè)定好的電機(jī)、工作模式和角度更新到第二行至第四行對(duì)應(yīng)電機(jī)所在的行。
圖4 串口通信模塊電路原理圖
兩個(gè)采用驅(qū)動(dòng)器驅(qū)動(dòng)的步進(jìn)電機(jī),控制信號(hào)包括電機(jī)使能、步進(jìn)脈沖和運(yùn)動(dòng)方向,均為5 V信號(hào)。由于目前大部分采用驅(qū)動(dòng)器的步進(jìn)電機(jī)的控制信號(hào)均為5 V,因而該模塊電路具有較好的可移植性。步進(jìn)電機(jī)1的電路原理圖如圖2所示,步進(jìn)電機(jī)2的電路原理圖與此類(lèi)似。兩相四線(xiàn)微型電機(jī)共有A+、A-、B+和B-四個(gè)控制信號(hào)[4],利用STM32的普通IO口加上L298N驅(qū)動(dòng)板實(shí)現(xiàn)控制。兩相四線(xiàn)微型電機(jī)驅(qū)動(dòng)電路的設(shè)計(jì),使得電機(jī)驅(qū)動(dòng)模塊電路功能更加多樣化,具有一定的普適性。
本系統(tǒng)中液晶屏采用并行數(shù)據(jù)傳輸方式,本身不帶字庫(kù)功能,采用5 V電壓驅(qū)動(dòng)。液晶顯示模塊電路原理圖如圖3所示。電路中的74HC244芯片為8路正相緩沖器,用于提高STM32引腳的帶負(fù)載能力及實(shí)現(xiàn)數(shù)據(jù)緩沖作用[5]。電路圖左側(cè)的RS、RW、E、CS1、CS2和RET為液晶屏控制信號(hào),對(duì)應(yīng)表示數(shù)據(jù)/命令信號(hào)、讀寫(xiě)信號(hào)、使能信號(hào)、片選信號(hào)、片選信號(hào)和復(fù)位信號(hào)。DB0-DB7為液晶屏并行數(shù)據(jù)輸入端口。液晶屏利用排插與液晶顯示控制板相連。
串口通信模塊電路采用MAX3232作為控制芯片,采用RS232標(biāo)準(zhǔn)接口,使得控制板具有很高的可移植性。串口通信模塊電路原理圖如圖4所示。
按鍵控制程序利用STM32的外部中斷改變對(duì)應(yīng)控制的標(biāo)志位,本系統(tǒng)中利用STM32的PE10控制電機(jī)選擇、PE11控制工作模式選擇、PE12控制角度/距離加、PB14控制角度/距離減、PB15控制確定、PD8控制停止。以PE12控制角度加為例,關(guān)鍵代碼如下:
EXTI_Key_Config();
// 按鍵引腳IO口初始化、中斷初始化
NVIC_key_Configuration();
//按鍵中斷向量寄存器初始化
void EXTI15_10_IRQHandler()
{
delay_ms(10);
//延時(shí)消抖
if(EXTI_GetITStatus(EXTI_Line12)!= RESET)
{
if(angle_set == 90)
//設(shè)置角度最大90°
angle_set = 90;
else
angle_set++;
angle_info_usart[1] = angle_set;
for(i=0; i<3; i++)
//串口發(fā)送,實(shí)時(shí)顯示
{
USART_SendData(USART1,angle_info_usart[i]);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) != SET);
}
}
EXTI_ClearITPendingBit(EXTI_Line12);
}
圖5 電機(jī)轉(zhuǎn)動(dòng)固定角度邏輯控制圖
對(duì)于電機(jī)1和電機(jī)2,由于采用步進(jìn)電機(jī)驅(qū)動(dòng)器驅(qū)動(dòng),利用STM32的定時(shí)器來(lái)進(jìn)行脈沖輸出來(lái)驅(qū)動(dòng)電機(jī),并利用定時(shí)器的溢出中斷來(lái)進(jìn)行脈沖計(jì)數(shù),達(dá)到旋轉(zhuǎn)固定角度或者直線(xiàn)移動(dòng)固定距離的目的。以定時(shí)器3控制電機(jī)2正向轉(zhuǎn)動(dòng)固定角度為例,邏輯控制圖如圖5所示。
而微型電機(jī)由于是兩相四線(xiàn)結(jié)構(gòu),共有A1、A2、B1和B2四路信號(hào)。在對(duì)其進(jìn)行控制時(shí),采用A+B+、A+B-、A-B-、A-B+的通電順序驅(qū)動(dòng)電機(jī)正轉(zhuǎn),采用A+B+、A-B+、A-B-、A+B-的通電順序驅(qū)動(dòng)電機(jī)反轉(zhuǎn),其中A+表示A相通正向電壓,A-表示A相通反向電壓,其他依此類(lèi)推[6]。在本系統(tǒng)中,利用主函數(shù)輪詢(xún)來(lái)判斷按鍵是否選擇了微型電機(jī)及對(duì)應(yīng)工作模式,實(shí)現(xiàn)對(duì)微型電機(jī)的控制,微型電機(jī)正轉(zhuǎn)代碼如下所示:
void micromotor_rotate_pst(void)
//正轉(zhuǎn),通斷次序:A+B+、A+B-、A-B-,A-B+
{
Coil_A1B1();
// A+B+
delay_ms(1);
Coil_A1B2();
// A+B-
delay_ms(1);
Coil_A2B2();
// A-B-
delay_ms(1);
Coil_A2B1();
// A-B+
delay_ms(1);
}
在主函數(shù)中,輪詢(xún)微型電機(jī)選擇和模式選擇的狀態(tài)標(biāo)志位,達(dá)到利用按鍵控制微型電機(jī)工作模式的目的。關(guān)鍵代碼如下:
int main(void)
{
……
while(1)
//主函數(shù)輪詢(xún)
{
if(motor_confirm == micromotor && mode_confirm == rotate_pst_mode)
micromotor_rotate_pst();
}
……
}
對(duì)液晶顯示的控制主要包括了讀忙狀態(tài)、寫(xiě)數(shù)據(jù)、寫(xiě)指令和讀數(shù)據(jù)四個(gè)操作。在對(duì)液晶進(jìn)行讀寫(xiě)操作前,必須檢測(cè)液晶屏的忙狀態(tài)[7]。只有當(dāng)液晶屏處于空閑狀態(tài)時(shí),才能對(duì)其進(jìn)行讀寫(xiě)操作,代碼如下:
uint8_t Read_Busy(void)
// 讀忙狀態(tài)
{
uint8_t If_Busy_flag = 0;
Port_IN_Config();
// 配置并行數(shù)據(jù)輸入
Set(RS, 0);
// RS=0,指令
Set(RW, 1);
// RW=1,讀操作
OCM12864_Enable();
Delay_ms(2);
//延時(shí),確保使能完成
If_Busy_flag=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_7);
// 讀取忙標(biāo)志位
OCM12864_Disable();
// 使能液晶屏
return If_Busy_flag;
//當(dāng)讀寫(xiě)操作已添加足夠延時(shí),可設(shè)置返回0
}
對(duì)液晶進(jìn)行寫(xiě)指令、寫(xiě)數(shù)據(jù)和讀數(shù)據(jù)操作前,必須先檢測(cè)液晶的忙狀態(tài)。需要選擇相應(yīng)的讀寫(xiě)模式和數(shù)據(jù)命令模式,寫(xiě)數(shù)據(jù)功能的代碼如下:
void Write_LCD_Data(u8 data)
{
while(Read_Busy()== IS_Busy);
//忙檢測(cè)
Port_OUT_Config();
//并行數(shù)據(jù)輸出
Set(RS, 1);
//RS=1
Set(RW, 0);
//RW=0
GPIOA->ODR=((GPIOA->ODR & 0xff00) | data);
//寫(xiě)數(shù)據(jù)到并行口
OCM12864_Enable();
//使能液晶屏
Delay_ms(1);
//延時(shí),確保寫(xiě)數(shù)據(jù)完成
OCM12864_Disable();
//失能液晶屏
}
由于該液晶屏本身不帶字庫(kù),因而首先需要利用字模軟件將字符提取出字模并寫(xiě)入程序中[8]。在液晶屏上實(shí)現(xiàn)任意坐標(biāo)顯示字符的代碼如下:
void show(u8 x,u8 y,u8 xl,u8 yl,u8 row_xl,u8 row_yl,u8*chn)
{
u8 n1,n2,k,i,a;
for(i=0;i { for(k=0;k { for(n2=0;n2 { Set_Page(0); //設(shè)置頁(yè) Set_Line(x+i*xl+n2); //設(shè)置行 Set_Column(y+k*yl); //設(shè)置列 a=i*xl*yl*row_yl+k*xl*yl+n2*yl; for(n1=0;n1 Write_LCD_Data(chn[a+n1]); //寫(xiě)入點(diǎn)陣 Delay_ms(1); } } } } 通過(guò)系統(tǒng)軟硬件調(diào)試后,該系統(tǒng)能同時(shí)控制兩個(gè)帶驅(qū)動(dòng)器的步進(jìn)電機(jī)和一個(gè)兩相四線(xiàn)步進(jìn)電機(jī),并能利用按鍵設(shè)置電機(jī)的多種工作模式,液晶顯示屏能實(shí)時(shí)顯示按鍵的設(shè)置過(guò)程和電機(jī)的工作狀態(tài),達(dá)到了預(yù)期的設(shè)計(jì)目標(biāo)。該系統(tǒng)結(jié)構(gòu)簡(jiǎn)單,操作簡(jiǎn)潔,界面友好,功能較為全面。由于采用模塊化設(shè)計(jì),該控制系統(tǒng)具有較強(qiáng)的可移植性,適用性較為廣泛。 [1] 劉慧英,范寶山. 基于STM32的多步進(jìn)電機(jī)控制系統(tǒng)研究[J]. 測(cè)控技術(shù),2010,29(6):54-57. [2] Wang Yanwen, Zhang Yanping, Ge Biao. Design of stepper motor drive based on AMIS30512[C]. Information and Communication Engineering (EICE2012),2012:6. [3] 李壯輝,朱清慧,任擁偉. 液晶顯示應(yīng)用控制系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J]. 液晶與顯示,2013,28(6):889-894. [4] 趙曉光,李建初. 基于A(yíng)T89C52單片機(jī)的步進(jìn)電機(jī)控制系統(tǒng)研究[J]. 硅谷,2013(3):80-81. [5] 包敬海,樊東紅,陸安山,等. 基于DS18B20的多點(diǎn)體溫檢測(cè)系統(tǒng)的研究[J]. 自動(dòng)化與儀表,2010,25(2):20-22. [6] 向海健. 基于L297/298的步進(jìn)電機(jī)工作模式的單片機(jī)接口[J]. 微計(jì)算機(jī)信息,2007,23(26):302-303. [7] 孫林軍,賀鋒濤. 基于STM32控制液晶的接口實(shí)現(xiàn)[J]. 電視技術(shù),2013,37(1):77-79. [8] 楊偉,肖義平. 基于STM32F103C8T6單片機(jī)的LCD顯示系統(tǒng)設(shè)計(jì)[J]. 微型機(jī)與應(yīng)用,2014,33(20):29-31. Design of control system of multiple motors driving and LCD display based on STM32 Wu Cheng, Ye Chunsheng (School of Material Science and Engineering, Huazhong University of Science and Technology, Wuhan 430074, China) The control system of multiple stepper motors driving and LCD real-time display based on STM32 is designed. The motor driving module takes STM32F103VBT6 as the control core, controls the motion of three stepper motors, and uses keys to select the motors and the corresponding modes. The LCD module takes STM32F103C8T6 as the control core, which is used to display the working modes selected by keys and the working states of the motors. The two modules use serial communication module to achieve real-time communication. The system has the advantages of simple structure and operation, friendly interface and high portability. STM32; stepper motor; liquid-crystal display; serial communication; modular design TP391 A 10.19358/j.issn.1674- 7720.2017.20.002 吳成,葉春生.基于STM32的多電機(jī)驅(qū)動(dòng)及液晶顯示控制系統(tǒng)設(shè)計(jì)[J].微型機(jī)與應(yīng)用,2017,36(20):6-9. 2017-03-31) 吳成(1992-),男,在讀碩士研究生,主要研究方向:裝備自動(dòng)化、嵌入式控制系統(tǒng)。 葉春生(1962-),通信作者,男,博士,副教授,主要研究方向:材料加工裝備及自動(dòng)化。E-mail:csye@hust.edu.cn。4 結(jié)論
網(wǎng)絡(luò)安全與數(shù)據(jù)管理2017年20期