《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 基于单片机的伺服电机控制系统设计
基于单片机的伺服电机控制系统设计
2015年微型机与应用第24期
白 涛,吴 振,陈若谜
(哈尔滨工程大学 自动化学院,黑龙江 哈尔滨 150001)
摘要: 通过对BE系列伺服电机工作原理的分析,利用STC89C52单片机设计了一种电机控制器。通过单片机I/O口向TLC5618数模转换芯片发送数据,输出电压信号经运放加法电路放大控制转速。运放输出末端放置一双刀双掷继电器,驱动芯片为ULN2003,改变输出电压正负极性可实现转向控制,并通过USB转串口与上位机通信。最后,将驱动器反馈的方波信号频率、转速和转向显示在液晶屏上。该设计可以实现伺服电机的平稳控制和精确调速,能够满足工业现场的需要。
Abstract:
Key words :

  摘  要: 通过对BE系列伺服电机工作原理的分析,利用STC89C52单片机设计了一种电机控制器。通过单片机I/O口向TLC5618数模转换芯片发送数据,输出电压信号经运放加法电路放大控制转速。运放输出末端放置一双刀双掷继电器,驱动芯片为ULN2003,改变输出电压正负极性可实现转向控制,并通过USB转串口与上位机通信。最后,将驱动器反馈的方波信号频率、转速和转向显示在液晶屏上。该设计可以实现伺服电机的平稳控制和精确调速,能够满足工业现场的需要。

  关键词: 单片机;伺服电机;转向控制;精确调速

0 引言

  伺服电机的定位精度相当高,现代位置控制系统已越来越多地采用交流伺服电机作为主要部件[1]。本设计采用的BE系列伺服电机以其体积小、驱动能力强、应用广泛成为了多种场合的通用驱动设备,也是学习伺服电机控制的良好对象。但与其配套的控制器价格较高,并不适合一般小型试验的需求。本文给出了一种低成本的控制方案,使其在52单片机的控制下也能充分发挥其功能。

1 伺服电机控制系统设计方案

  本设计以STC89C52RC单片机作为控制器,充分利用其价格低廉、编程方便、技术成熟等优点,并以TLC5618作为模拟信号输出芯片,经OP07运放搭建的加法电路,使DA芯片的双路输出电压相加,最大值可达到10 V,精度为0.002 4 V。设计出一款转速调节精度高、转向可控、成本较低的伺服电机控制器,可以显示实时采集的转速数和转向,并能够将采集到的方波信号频率转化为十进制数一同显示在液晶屏上。此外,本系统还利用CH340G芯片连接USB线,通过上位机软件对BE系列伺服电机进行转速转向的控制,实现了上下位机通信、数模转换、电压放大、电机精确调速、数据显示等一系列功能和过程。

2 系统硬件设计

  本设计采用STC89C52RC单片机构建了一个最小系统,通过数模转换、运放、转向控制和隔离继电器等模块实现电机正反转智能切换,而且实现了伺服电机的精确调速控制[2]。其控制系统组成如图1所示。

001.jpg

  通过LCD1602显示模块将转速、转向以及脉冲频率显示在液晶屏上;利用串口通信模块接收上位机发送的数据,并将该数据发送给DA转换输出模块;转换后的模拟电压通过运算放大器将输出电压放大,用来控制电机的转速和转向。

  2.1 单片机最小系统电路设计

  系统采用STC89C52RC单片机,5 V电源供电[3]。两个外围电路分别为复位电路和晶振电路,晶振频率为11.059 2 MHz,电容30 pF。晶振两端与单片机XTAL1、XTAL2连接,使其产生一个周期固定的交流电流,单片机可以根据这个电流的周期来确定工作周期。最小系统原理图如图2所示。

002.jpg

  2.2 液晶显示模块

  这里LCD1602只需进行写操作不需要读操作,故直接将RW脚接地,VEE是液晶显示偏压信号,即调节液晶屏幕显示的对比度,将其接到滑动变阻器上,实现液晶显示的对比度调节。RS是数据命令选择端,即在程序中选择给显示屏发送命令或是发送数据[4]。写指令时RS为低电平,写数据时RS为高电平。余下的DB0~DB7与单片机P0口连接,BLA和BLK是液晶显示屏背光供电端口,分别接5 V电源和地。其具体电路如图3所示。

003.jpg

  2.3 串口通信模块

  根据方案设计思路,单片机需要接收上位机发送的数据,那么需要一个串口通信模块来实现上下位机之间的通信。STC89C52RC单片机要接收数据需要从RXD和TXD脚接收TTL电平,采用CH340G能将USB口发送的数据转换成TTL电平,送到单片机SBUF寄存器中。单片机程序只需调取SBUF中的数值就可以实现对I/O口的控制。

  单片机与上位机通信的波特率为9 600 b/s,无校验。其具体电路如图4所示。

004.jpg

  2.4 D/A转换输出模块

  由TLC5618性质和原理可知,首先将TLC5618的GND端接到系统模拟地,实现最佳的接地连接[5]。同时在VDD与GND之间应接0.1 ?滋F的独立旁路电容,滤除电源与地之间的高频干扰。此外,基准电压一定要保证精度,且在基准电压输出端接0.1 ?滋F的瓷片电容,以降低系统噪声对转换精度的影响。分别将CS接P2.2、SCLK接P2.1、DIN接P2.0,两个DAC模拟输出即可完成对DA转换芯片的控制。

  2.5 运放输出模块

  运放模块用到OP07芯片,它是一种低噪声,非斩波稳零的双极性运算放大器集成电路。OP07具有非常低的输入失调电压,一般不需要额外的调零措施。OP07同时具有输入偏置电流低和开环增益高的特点,这种低失调、高开环增益的特性使得OP07特别适合于高增益的测量设备和放大传感器的微弱信号等方面。经运放放大输出的电压最大值可达到10 V,精度可达0.002 4 V,从而实现电机转速精准控制[6]。其具体电路如图5所示。

005.jpg

  2.6 转向控制模块

  单片机I/O口输出电流无法使继电器工作,设计中采用ULN2003来提高带载能力。ULN2003属于高压大电流达林顿晶体管阵列系列产品,其电流增益和工作电压都很高且温度范围宽,带载能力强,而且输入端只需和单片机I/O口相连接,5 V供电无需外接电路。这里用P2.5口控制继电器的工作与否,P2.5输出一个高电平,ULN2003接收到该高电平就可以驱动继电器工作,改变输出电压极性。其具体电路如图6所示。

006.jpg

3 系统软件设计

  针对上述硬件各个模块功能编写各模块需要子程序,主程序部分注意使用的P1.0的引脚功能,头文件包含regx52.h,其对T2CON寄存器有定义,否则无法完成程序的编译[7]。此外,还需定义变量的类型、名称及相关延时函数;显示模块程序需要对其进行初始化设置,写出命令输入子程序、数据输入子程序、数字字符转换程序;串口通信模块程序需要对其进行初始化设置,采用T2定时器作为波特率发生器,编写一串口中断函数,将SBUF的值赋予各个变量;方波采集程序对T0和T1进行初始化设置,其中T0计时,T1计数。定义一中断函数重新给T0、T1赋值;D/A转换输出模块程序需要用单片机的I/O口对其写入16 bit的数据,分两次发送,先发送高字节,后发送低字节。最先发送的D12~D15位为可编程位控制字,用以确定数据的传送方式。在片选信号的上升沿把数据送到DAC寄存器开始D/A转换。

  3.1 系统主程序

  主程序内需声明各个变量名称和类型,直接调用子程序即可。然后定义一个while循环等待中断发生。其主函数如下:

  void main()

  {  PS=1;

  CK_init();//初始化串口

  init_jishu();//初始化T0、T1

  display();//调用显示函数

  while(1)//等待中断的发生

  {  Write_A_B(UA,UB,Channal_AB,1);

  t0=0;

  H1=TH1;

  L1=TL1;

  TL1=0;

  TH1=0;

  i=H1*256+L1;

  digit_to_Char(i);}}

  3.2 串口通信子模块

  寄存器T2CON的TCLK和RCLK位允许从定时器1或定时器2获得串行口发送和接收的波特率。当TCLK=0时,定时器1作为串行口发送波特率发生器;当TCLK=1时,定时器2作为串行口发送波特率发生器。RCLK对串行口接收波特率有同样的作用。模式1和模式3的波特率=振荡器频率/32×[65636-(RCAP2H,RACP2L)],式中(RCAP2H,RCAP2L)是RCAP2H和RCAP2L中的16位无符号数。故T2CON寄存器中的数为00110100B,即16进制数0x34。其部分程序如下:

  void init_CK()

  {SCON=0x50;

  PCON=0x00;

  T2CON=0x34;

  EA=1;

  ES=1;

  RCAP2H=(65 536-36)/256;

  RCAP2L=(65 536-36)%256;

  T2MOD=0;

  TL2=RCAP2L;

  TH2=RCAP2H;}

  3.3 方波频率采集模块

  定时器1负责计数,定时器0负责定时。单片机在使用定时器或计数器功能时,通常需要设置两个与定时器有关的寄存器分别为定时器/计数器工作方式寄存器TMOD和定时器/计数器控制寄存器TCON[8]。设计中T1选择计数方式C/T=1,故该系统的TMOD=0×51,由于需要设定一个50 ms的计时中断,要给TH0、TH1寄存器赋予初值。初值的计算方法是:THX=(65 536-N)/256,TLX=(65 536-N)%256,其中N=t/T,T是机器周期,即12×(1/11 059 200)≈1.09 ?滋s。所以TH0=(65 536-46 081)/256,TL0=(65 536-46 081)%256。其部分程序如下所示:

  void init_jishu()

  {  EA=1;

  ET0=1;

  TMOD=0x51;

  TH0=(65 536-46 081)/256;

  TL0=(65 536-46 081)%256;

  TL1=0;

  TH1=0;

  TR0=1;

  TR1=1;}

  void jishi()interrupt 1

  {  TH0=(65 536-46 081)/256;

  TL0=(65 536-46 081)%256;

  t0++;}

  3.4 D/A转换输出模块

  本设计中只需选中TLC5618并向SLCK发送一个时钟信号,DIN发送数据即可,数据为16 bit,前4 bit控制其工作状态,后12 bit控制两路输出电压大小。

4 结论

  此次控制系统设计以单片机作为控制器,对非标准交流伺服电机进行控制,有效利用单片机内部资源以及掌握了相应电机运动控制系统的运行特性,在生产调速电机的配套装置实际应用中,降低了生产成本,提高了系统的性能。

参考文献

  [1] 张国斌,尹岗.基于单片机的交流伺服电机转速控制系统设计[J].电子测量技术,2009,1(11):105-107.

  [2] 陈华林.基于单片机的电机控制系统研究[J].硅谷,2014,17(6):9-10.

  [3] 苗敬利,邹靖.无刷直流电机直接转矩控制系统的设计[J].电子技术应用,2014,40(7):88-91.

  [4] 邹智慧.浅谈直流伺服电机的驱动与应用[J].才智,2010,19(16):65-66.

  [5] 陈德益.基于嵌入式单片机的电机控制系统设计[J].计算机仿真,2010,1(7):359-362.

  [6] 滕莉,李英,阮德林,等.一种基于步进电机的振荡器控制设计[J].微型机与应用,2015,34(8):87-90.

  [7] 曾浩.浅谈AT89C51单片机在SR电机控制中的应用[J].电子测试,2013,5(9):123-124.

  [8] 赵磊,王哈力.基于单片机的交流伺服电机转速控制系统研究[J].现代电子技术,2009,16(12):196-198.


此内容为AET网站原创,未经授权禁止转载。