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,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/zhishi/a/1703971531257039.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:基于STM32的多电机驱动及液晶显示控制系统设计.doc
本文 PDF 下载地址:基于STM32的多电机驱动及液晶显示控制系统设计.pdf
留言与评论(共有 0 条评论) |