2023年12月31日發(作者:小故事大道理故事)

基于STM32的多電機驅動及液晶顯示控制系統設計
吳成;葉春生
【摘 要】基于STM32設計了多步進電機驅動及液晶實時顯示控制系統.電機驅動模塊以STM32F103VBT6為控制核心,控制三個步進電機的運動,利用按鍵實現電機及對應工作模式的選擇.液晶顯示模塊以STM32F103C8T6為控制核心,用于顯示按鍵選擇的工作模式及電機工作狀態.兩模塊利用串口通信模塊實時通信.該系統具有結構簡單、操作簡潔、界面友好和可移植性強等優點.
【期刊名稱】《微型機與應用》
【年(卷),期】2017(036)020
【總頁數】4頁(P6-9)
【關鍵詞】STM32;步進電機;液晶顯示;串口通信;模塊化設計
【作 者】吳成;葉春生
【作者單位】華中科技大學 材料科學與工程學院,湖北 武漢430074;華中科技大學
材料科學與工程學院,湖北 武漢430074
【正文語種】中 文
【中圖分類】TP391
步進電機因其結構簡單、控制方便和具有較高的定位精度等優點,在工業控制領域應用廣泛[1-2]。在工業實際應用中,有時需要使用多個步進電機,并涉及多種工作模式,例如單步往返、連續往復和轉動固定角度等,這對控制系統的功能多樣性和操作的簡潔性提出了高要求。而步進電機的工作狀態有運動中、運動完成和處于
某一角度等,利用液晶屏將電機的運動狀態實時顯示出來,能使控制系統更加人性化,便于操作人員實時觀察電機的狀態。
該系統共分為四個功能模塊。電機驅動模塊以STM32F103VBT6為控制核心,利用按鍵控制兩個帶驅動器的步進電機和一個兩相四線微型步進電機。液晶顯示模塊以STM32F103C8T6為控制核心,驅動以KS0108為控制器的LCD12864液晶屏。串口通信模塊以MAX3232為主芯片,用于電機驅動模塊和液晶顯示模塊之間的通信,達到實時顯示按鍵操作指令和電機運動狀態的目的。電源模塊則用于給控制系統供電。系統整體架構圖如圖1所示。
表1列出了系統需要實現的功能及實現方法。考慮到在工控領域需要的步進電機工作模式是多種多樣的,因而在系統功能設計過程中選擇了多種較為常見的工作模式。
本系統中的6個按鍵分別對應電機選擇、工作模式選擇、角度/距離加、角度/距離減、確認和停止功能。
在液晶實時顯示的過程中,為了使界面更加友好并具有較高的可移植性,需要對液晶的顯示界面進行設計。LCD12864液晶能顯示4行8列,最多32個漢字(或64個字符)[3]。由于在本系統中需要利用按鍵實現電機、工作模式和角度的設置,而且3個電機的工作狀態需要實時顯示,據此將液晶屏根據行劃分為四個顯示區。第一行用于按鍵選擇實時顯示,包括電機類型、工作模式和角度三個顯示單元;第二行至第四行依次為3個電機實時顯示區,包括電機類型、工作模式、角度和工作狀態四個顯示單元。其中當電機1和電機2處于運動狀態時,液晶的工作狀態顯示單元顯示“…”,電機2停止時工作狀態顯示為當前所處角度。微型電機運動時工作狀態顯示為“√”,停止則不顯示。按鍵中的“確認”按鈕被按下時,就將第一行設定好的電機、工作模式和角度更新到第二行至第四行對應電機所在的行。
兩個采用驅動器驅動的步進電機,控制信號包括電機使能、步進脈沖和運動方向,
均為5 V信號。由于目前大部分采用驅動器的步進電機的控制信號均為5 V,因而該模塊電路具有較好的可移植性。步進電機1的電路原理圖如圖2所示,步進電機2的電路原理圖與此類似。兩相四線微型電機共有A+、A-、B+和B-四個控制信號[4],利用STM32的普通IO口加上L298N驅動板實現控制。兩相四線微型電機驅動電路的設計,使得電機驅動模塊電路功能更加多樣化,具有一定的普適性。
本系統中液晶屏采用并行數據傳輸方式,本身不帶字庫功能,采用5 V電壓驅動。液晶顯示模塊電路原理圖如圖3所示。電路中的74HC244芯片為8路正相緩沖器,用于提高STM32引腳的帶負載能力及實現數據緩沖作用[5]。電路圖左側的RS、RW、E、CS1、CS2和RET為液晶屏控制信號,對應表示數據/命令信號、讀寫信號、使能信號、片選信號、片選信號和復位信號。DB0-DB7為液晶屏并行數據輸入端口。液晶屏利用排插與液晶顯示控制板相連。
串口通信模塊電路采用MAX3232作為控制芯片,采用RS232標準接口,使得控制板具有很高的可移植性。串口通信模塊電路原理圖如圖4所示。
按鍵控制程序利用STM32的外部中斷改變對應控制的標志位,本系統中利用STM32的PE10控制電機選擇、PE11控制工作模式選擇、PE12控制角度/距離加、PB14控制角度/距離減、PB15控制確定、PD8控制停止。以PE12控制角度加為例,關鍵代碼如下:
EXTI_Key_Config();
NVIC_key_Configuration();
void EXTI15_10_IRQHandler()
{
delay_ms(10);
if(EXTI_GetITStatus(EXTI_Line12)!= RESET)
{
if(angle_t == 90)
angle_t = 90;
el
angle_t++;
angle_info_usart[1] = angle_t;
for(i=0; i<3; i++)
{
USART_SendData(USART1,angle_info_usart[i]);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) != SET);
}
}
EXTI_ClearITPendingBit(EXTI_Line12);
}
對于電機1和電機2,由于采用步進電機驅動器驅動,利用STM32的定時器來進行脈沖輸出來驅動電機,并利用定時器的溢出中斷來進行脈沖計數,達到旋轉固定角度或者直線移動固定距離的目的。以定時器3控制電機2正向轉動固定角度為例,邏輯控制圖如圖5所示。
而微型電機由于是兩相四線結構,共有A1、A2、B1和B2四路信號。在對其進行控制時,采用A+B+、A+B-、A-B-、A-B+的通電順序驅動電機正轉,采用A+B+、A-B+、A-B-、A+B-的通電順序驅動電機反轉,其中A+表示A相通正向電壓,A-表示A相通反向電壓,其他依此類推[6]。在本系統中,利用主函數輪詢來判斷按鍵是否選擇了微型電機及對應工作模式,實現對微型電機的控制,微型電機正轉代碼如下所示:
void micromotor_rotate_pst(void)
{
Coil_A1B1();
delay_ms(1);
Coil_A1B2();
delay_ms(1);
Coil_A2B2();
delay_ms(1);
Coil_A2B1();
delay_ms(1);
}
在主函數中,輪詢微型電機選擇和模式選擇的狀態標志位,達到利用按鍵控制微型電機工作模式的目的。關鍵代碼如下:
int main(void)
{
……
while(1)
{
if(motor_confirm == micromotor && mode_confirm == rotate_pst_mode)
micromotor_rotate_pst();
}
……
}
對液晶顯示的控制主要包括了讀忙狀態、寫數據、寫指令和讀數據四個操作。在對液晶進行讀寫操作前,必須檢測液晶屏的忙狀態[7]。只有當液晶屏處于空閑狀態
時,才能對其進行讀寫操作,代碼如下:
uint8_t Read_Busy(void)
{
uint8_t If_Busy_flag = 0;
Port_IN_Config();
Set(RS, 0);
Set(RW, 1);
OCM12864_Enable();
Delay_ms(2);
If_Busy_flag=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_7);
OCM12864_Disable();
return If_Busy_flag;
}
對液晶進行寫指令、寫數據和讀數據操作前,必須先檢測液晶的忙狀態。需要選擇相應的讀寫模式和數據命令模式,寫數據功能的代碼如下:
void Write_LCD_Data(u8 data)
{
while(Read_Busy()== IS_Busy);
Port_OUT_Config();
Set(RS, 1);
Set(RW, 0);
GPIOA->ODR=((GPIOA->ODR & 0xff00) | data);
OCM12864_Enable();
Delay_ms(1);
OCM12864_Disable();
}
由于該液晶屏本身不帶字庫,因而首先需要利用字模軟件將字符提取出字模并寫入程序中[8]。在液晶屏上實現任意坐標顯示字符的代碼如下:
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); Set_Line(x+i*xl+n2); Set_Column(y+k*yl); a=i*xl*yl*row_yl+k*xl*yl+n2*yl; for(n1=0;n1 Write_LCD_Data(chn[a+n1]); Delay_ms(1); } } } } 通過系統軟硬件調試后,該系統能同時控制兩個帶驅動器的步進電機和一個兩相四線步進電機,并能利用按鍵設置電機的多種工作模式,液晶顯示屏能實時顯示按鍵的設置過程和電機的工作狀態,達到了預期的設計目標。該系統結構簡單,操作簡潔,界面友好,功能較為全面。由于采用模塊化設計,該控制系統具有較強的可移植性,適用性較為廣泛。 【相關文獻】 [1] 劉慧英,范寶山. 基于STM32的多步進電機控制系統研究[J]. 測控技術,2010,29(6):54-57. [2] Wang Yanwen, Zhang Yanping, Ge Biao. Design of stepper motor drive bad on AMIS30512[C]. Information and Communication Engineering (EICE2012),2012:6. [3] 李壯輝,朱清慧,任擁偉. 液晶顯示應用控制系統設計與實現[J]. 液晶與顯示,2013,28(6):889-894. [4] 趙曉光,李建初. 基于AT89C52單片機的步進電機控制系統研究[J]. 硅谷,2013(3):80-81. [5] 包敬海,樊東紅,陸安山,等. 基于DS18B20的多點體溫檢測系統的研究[J]. 自動化與儀表,2010,25(2):20-22. [6] 向海健. 基于L297/298的步進電機工作模式的單片機接口[J]. 微計算機信息,2007,23(26):302-303. [7] 孫林軍,賀鋒濤. 基于STM32控制液晶的接口實現[J]. 電視技術,2013,37(1):77-79. [8] 楊偉,肖義平. 基于STM32F103C8T6單片機的LCD顯示系統設計[J]. 微型機與應用,2014,33(20):29-31. 
本文發布于:2023-12-31 05:25:31,感謝您對本站的認可!
本文鏈接:http://m.newhan.cn/zhishi/a/1703971531257039.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:基于STM32的多電機驅動及液晶顯示控制系統設計.doc
本文 PDF 下載地址:基于STM32的多電機驅動及液晶顯示控制系統設計.pdf
| 留言與評論(共有 0 條評論) |