logo资料库

基于Matlab GUI的直流电机PID调速系统的设计.pdf

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
的直流电机PID调速系统的设计 调速系统的设计 基于基于Matlab GUI的直流电机 基于Matlab GUI(图形用户界面)设计了一种以单片机为控制核心的直流电机PID调速系统。利用GUI作为上位 机对单片机采集的信息进行处理,实现电机转速的波形显示、存储、PID控制等功能。由于该系统的PWM信号 由专门PWM芯片产生,因此降低了单片机程序的复杂程度,提高了系统的可靠性和控制精度。实验结果表明, 该系统运行稳定,界面的人机交互性好,操作简单方便。在对PID参数的选定中可提高对PID算法和电机性能的 直观认识,对自动控制、电机拖动等研究领域具有一定的现实意义。 摘摘 要:要: 基于Matlab GUI(图形用户界面)设计了一种以单片机为控制核心的 关键词: 关键词: 相对于其他类型的电机,直流电机具有很多优点,包括速度的可控性,启动、 制动的稳定性,以及调速的平滑性和经济性 等[1]。运用其中的一些优点可以实现频繁的无极快速起动、制动和反转,能满足生产过程中自动化系统各种不同的特殊要求 [2]。其有很多不同的控制算法和手段,模拟PID控制是最早发展起来的控制策略之一,长期以来形成了典型的控制结构。模拟 PID参数整定方便,能够满足一般控制的要求,但是在实际中,现场的参数是易发生变化的(如温度、湿度等),而模拟PID控制 系统一旦给定参数,则其在整个控制过程中是不能改变的,故其难以使系统达到满意的控制效果[3-4]。随着计算机技术与现代 控制理论的发展,数字PID技术逐渐发展起来,它不仅能够实现模拟PID所完成的控制任务,而且具备控制算法灵活、可靠性 高等优点,应用面也越来越广。Matlab具有强大的数值计算、可视化功能和系统建模仿真能力,在高校和科研机构使用极为广 泛[5]。图形用户界面是目前计算机应用程序界面的主要形式。Matlab为用户提供了功能强大的集成图形用户界面开发环境 (GUI),通过GUI,用户可方便、快捷地设计图形用户界面,开发自己的应用程序。并且GUI平台界面友好、使用简单,运 用十分广泛,能够方便地进行某种技术或方法的演示,将GUI运用到控制系统中也为产品的演示与教学提供了新的途径[6]。 1 系统总体设计 系统总体设计 本设计中,单片机系统作为下位机进行数据采集和控制执行,而Matlab GUI作为上位机主要完成PID调控、命令的发送、数 据的存储、转速波形显示等工作。采用51单片机作为主控制器,通过控制D/A模块产生模拟电压来驱动PWM模块产生相应占 空比PWM信号,从而实现对直流电机转速的控制。单片机的外围器件还包括电机驱动模块、电平转换模块、LCD、键盘等。 系统总体框图如图1所示。 该系统采用 STC89C52 单片机为控制核心,控制DA芯片TLC7528能够产生0~5 V的模拟电压。该模拟电压驱动PWM芯片 STC12C5608产生高精度占空比可调的PWM信号。PWM信号经过驱动芯片BTS7960的功率放大形成了对直流电机的驱动电 压。依靠光电编码器完成对电机转速的获取,上位机接收单片机发送的转速信息,一方面根据PID参数,对电机的转速进行进 一步的调整更正;另一方面,在GUI界面绘制出电机的转速波形。通过GUI界面,可以方便地改变PID参数,调整系统的动态 特性,也可以将转速信息保存下来以备后续分析。该系统采用12 V的电压为驱动单独供电,保证了系统的驱动能力供给充 足,提高了系统的稳定性和可靠性。键盘主要用来复位单片机系统和选择串口通信的波特率,LCD则为波特率的选择和当前转 速的显示提供良好的交互界面。 2 系统硬件模块介绍 系统硬件模块介绍 2.1 DA转换模块设计 转换模块设计 DA芯片采用双路、8位数字/模拟转换器TLC7528,8位的分辨率可以为系统提供较高的转换精度。数模转换电路如图2所 示。
图中,由单片机输出的8位数字量经由DA_0到DA_7输入芯片。DA_CS为控制引脚,控制TLC7528进行转换或者保持模拟 量输出。模拟电压经由DA_OUT输出,用于控制PWM模块产生PWM信号。 2.2 PWM模块设计 模块设计 为了提高PWM信号分辨力,保证系统控制精度,该系统采用单独的PWM模块输出PWM信号。STC12C5608是增强型的 8051CPU,指令代码完全兼容传统8051,但速度比传统8051快8~12倍。针对电机控制、强干扰场合,其内部集成了4路 PWM,8路高速10位A/D转换,编程功能使其成为专用的PWM芯片,其高精度A/D转换功能用来处理TLC7528产生的模拟信 号,从而实现用模拟电压来控制PWM信号占空比的功能。其构成电路如图3所示。 图3中,STC12C5608芯片从AD0引脚接收TLC7528产生的模拟电压,芯片根据其内部对应的程序在PWM0引脚输出相应占 空比的PWM信号。 2.3 驱动模块设计 驱动模块设计 直流电机的驱动芯片采用BTS7960,它是应用于电机驱动的大电流半桥高集成芯片,通态电阻典型值为16 MΩ,驱动电流 可达43 A,能够为系统提供充足的驱动能力。由于BTS7960的芯片内部只有一个半桥,故该模块采用2片对电机进行驱动。电 路如图4所示。 图4中,IN1与IN2是PWM信号输入端,ERO1和ERO2是电流检测输出引脚。PWM信号经过功率放大后在J2两端输出,为 直流电机提供驱动电压。 3 GUI程序设计 程序设计 图形用户界面是指包括文本框、标签、按钮、单选按钮、复选框、图片、菜单、对话框等组件的人机交互界面。在该界面 中,通过单击、双击、拖动鼠标和简单的文字输入就可以轻松地操作计算机,完成所有任务。它既能嵌入已有的仿真程序,又 能把仿真后的图形化结果以人机交互的动态方式直观呈现,使用者不需要知道代码的具体内容,只要了解操作步骤即可很方便 地操作界面。对于熟悉Matlab而不想编写大量VC代码的科研人员来讲,Matlab GUI无疑是一个最佳选择[7]。 图5所示为该系统的GUI界面,大概包含以下几个区域:端口设置区、DA转换区、目的转速设置区、开
3.1 Matlab 串口设置流程 串口设置流程 (1)用serial函数创建一个串口对象 obj = serial('port')  obj=serial('port','PropertyName',PropertyValue,...) (2)用fopen函数打开串口对象 fileID = fopen(filename) fopen()函数括号中为串口对象,如果无法打开,返回-1。 (3)用fread函数读取串口数据 A=fread(fileID) fread函数括号中为串口对象,返回读取到的数据。 (4)用fclose函数、free函数、delete函数和clear函数清除串口对象并释放内存空间。如: fclose(s);%关闭串口对象s free(s);%释放s占用的内存空间 delete(s);%删除串口对象s clear(s);%删除工作空间变量,释放内存 3.2 串口中断设置 串口中断设置 3.2.1 选择中断模式 选择中断模式 (1)串口缓存区达到指定字节数时触发中断,如: s.BytesAvailableFcnMode='byte';%中断类型 s.BytesAvailableFcnCount=31;%指定中断字节数 s.BytesAvailableFcn={@serial_interrupt,handles}; %指定中断函数为serial_interrupt (2)接收到特定字符时触发中断,如: s.BytesAvailableFcnMode='terminator';%中断类型 s.Terminator=′Z′;%当接收到字符′Z′时触发中断 s.BytesAvailableFcn={@serial_interrupt,handles}; %指定中断函数为serial_interrupt 3.2.2 在在.m文件中添加中断函数 文件中添加中断函数 function serial_interrupt(hObject,event,handles) %定义中断函数 3.3 波形绘制与串口数据存储 波形绘制与串口数据存储 3.3.1 波形绘制(电机转速波形) 波形绘制(电机转速波形) 转速的波形绘制主要在串口中断函数中完成,部分代码如下: s_data=fread(s);%串口数据读取 display_length=600;%定义要绘制的点数 time=linspace(0,60,display_length);%定义时间坐标 count=count+1;%计数变量加1用以绘制下一个点 speed=(s_data(27)-48)*1000+(s_data(28)-48)*100+ (s_data(29)-48)*10+(s_data(30)-48); %提取串口中的电机转速数据并转换成整型 rotspeed=[rotspeed,speed];%保存数据用于绘图 plot(handles.axes_speed,time(1:count),rotspeed(1:count)); %绘图 set(handles.axes_speed,'XLim',[time(1),time(end)]); if count==600 %画满600点后重新开始画图 count=0; rotspeed=speed; end 3.3.2 串口数据存储 串口数据存储 本程序默认把数据存储到s_text.txt中。部分代码如下: fid=fopen(get(handles.edit_save,'String'),'at'); %以添加文本方式打开文件 s_text=fread(s);%读串口数据 fprintf(fid,'%s\n',s_text);%向文件写入数据并换行 3.4 闭环控制算法 闭环控制算法 PID控制是在经典控制理论中技术最成熟、研究最广泛和应用最多的一种控制方式。图6所示为整理后的闭环相应曲线,其 中P参数为0.5,I参数为0.05,D参数为0,目的转速为3 000 r/min。 部分程序如下: current_speed=data.param;%得到当前的转速 spect_speed=data.target;%得到目标转速 error=spect_speed-current_speed; %求得误差信号 sum=sum+error;%误差信号累加 P=str2double(get(handles.edit_p,'String')); %从GUI界面得到P参数 I=str2double(get(handles.edit_i,'String')); %从GUI界面得到I参数 D=str2double(get(handles.edit_d,'String')); %从GUI界面得到D参数
result=P*error+I*sum+D*(error-error_1);%驱动信号 基于Matlab GUI开发了一种具有友好用户界面的PID直流电机调速系统。通过该界面,用户能够直观地观察到电机转速变化 的波形,并且可以对PID参数进行实时调整以观察电机的动态响应特性。同时GUI的数据保存功能能够保存串口发送过来的所 有数据以备后续的分析和研究。由于该系统的PWM信号由专门PWM芯片产生,降低了单片机程序的复杂度,提高了系统的可 靠性和控制精度。该系统运行稳定,操作简单方便,在自动控制、电机拖动等众多领域具有一定的应用价值。 参考文献 参考文献 [1] 庹朝永.基于单片机的直流电机PWM调速系统设计与开发[J].煤炭技术,2011,30(6):62-63. [2] 王晓峰,郝潇.基于单片机实现视域下直流电机PWM控制策略的探讨[J].煤炭技术,2012,31(7):232-233. [3] 王葳,张永科,刘鹏鹏,等.无刷直流电机模糊PID控制系统研究与仿真[J].计算机仿真,2012,29(4):196-199,254. [4] 王毅,王平,苏伟达,等.基于数字PID控制的直流电机控制系统的设计[J].福建师范大学学报,2010,26(4):59-62. [5] 杜世民,杨润萍.基于MATLAB GUI的“信号与系统”教学仿真平台开发[J].实验技术与管理,2012,29(3):87-90. [6] 金波.基于Matlab的“信号与系统”实验演示系统[J].实验技术与管理,2010,27(12):104-107. [7] 钟可君,张海林.基于Matlab GUI设计的光学实验仿真[J].实验室研究与探索,2010,29(10):52-52,80.
分享到:
收藏