第5章电子负载操控体系软件规划
5.1软件架构
研讨课题的软件体系较为简略,首要使命是依据电流、电压的AD采样成果,经过数字操控环运算,由DA输出运算成果,这是最重要也是实时性最高的使命。
此外,还要处理人机交互的使命,比如串口通讯、按键,显现等等,这些使命并不是时刻都存在的,实时性要求不高。
软件的架构由前台和后台两部分组成。前台是一个预设输入和成果输出,如图5.1左图所示,包含读取按键编码值、LCD显现所在的测验形式和串口通讯数据进行处理。后台如图5.1右图所示,以事情管理器A周期匹配中止为中心中止,整个反应回路都是以此中止为根底,完结AD采样,数字操控环核算,更DA输出,实时调整负载电流。在软件体系中,需求确保实时性的使命只要反应环的使命,在TMS320LF2812的ISR进行中,不能进行嵌套中止,其他中止是不能得到DSP呼应的。
为了防止串口中止(后台履行程序)的ISR履行时刻过长,影响到反应环的履行,在串口中止的ISR中防止代码的冗繁。主循环经过检测标志位,检查串口通讯的事情产生,然后到指定方位读取相应数据,最大极限的防止数字操控环的履行被打断。
5.2数字操控环软件规划
采样操控体系都是有推迟的,确保操控环的数字处理和推迟时刻在一个最小的周期以内,是本课题研讨的要点。因为事情管理器的定时器中止和AD采样中止服务处理程序的指令数固定,而AD转化的时刻由硬件决议,因而每周期内AD采样关于数字环履行周期,占用的时刻是固定的。规划如图5.2所示的结构。
在整个数字操控环的履行周期内,包含AD转化,AD转化成果的保存,操控算法的调用和履行,运算成果的保存和输出,履行周期内预留下必定的闲暇时刻,便利调用不同的操控算法时留下必定的时刻余量。整个操控算法履行周期为4奇妙,每个周期DA履行一次输出。
(1)中止
主程序里边一共开放了三个中止,T1定时器周期中止,串口接纳中止和PDPA中止。周期中止发动A/D转化,开端采样电压、电流值,并保存成果进入数字操控环;串口接纳中止,用于SCI接纳中止,并置发标志;PDPA中止,用于维护功率模块,一旦PDPA关脚为低便封闭输出。其间T1的周期中止程序不答应被打断,因为该程序呼应用于DA的输出,呼应速度要求很快,PDPA是维护中止程序,一般不会呼应,这两个中止都不答应中止嵌套。SCI串口输出答应被打断,但在中止程序的最初要加上EINT,开中止,答应中止嵌套。
事情管理器A即EVA的定时器Timer1的定时器中止,在此定时器中止的中止服务处理程序ISR中,发动2路AD转化。设置EVA Timer1的周期寄存器设置EVATimer1的周期为512(约为3.4奇妙),通用定时器装备为接连增减形式,周期匹配中止。
(2)AD采样
DSP2812内部有一个12位带流水线的模/数转化模块,共有16个通道,可经过寄存器装备为2个独立的8通道模块,别离服务于事情管理器A和B,2个独立的8通道模块也可以级联构成1个16通道模块,一起对16个通道进行采样,ADC要求输入的模仿电压规模为0~3V.A/D转化单元担任电流操控环的电流和电压值,规划顶用事情管理器发动对ADCINA0和ADCINB0一起采样,一起对两个通道的输入信号进行转化。TMS320LF2812虽然有12位精度,但在实践的运用进程中,咱们发现,ADC的转化成果差错较大,假如直接将此转化成果用于操控回路,必然会下降操控精度,最大的转化差错可以到达9%,为了进步操控的精度,有必要进步A/D的采样的精度。
硬件视点:加RC硬件滤波,滤除搅扰信号;电路布线时留意不要让ADCIN引脚运转在接近数字信号通路的当地,这样能使耦合到ADC输入端的数字信号开关噪声大大下降。选用阻隔技能,将ADC模块电源引脚和数字电源阻隔;软件视点:屡次采样取平均值算法,最为简略,但消耗很多时刻,对数字操控环在短时刻内履行完一切的程序是一对对立体;数字滤波算法,例如选用中值滤波法,详细办法为:接连采样20个数据,对这些数据进行排序之后,去掉最小的5个和最大的5个,然后取中心10个采样数据的平均值,这也要支付时刻上的献身,不太合适本规划;软件校对算法。TMS320LF的ADC转化精度较差的首要原因是存在增益差错(Gain Error)和偏置差错(Offset Error),要进步转化精度就有必要对两种差错进行补偿,这也是本规划中选用的进步A/D模块的补偿办法。
抱负的12位ADC是没有增益差错和偏置差错的,其转化的核算公式为:
可是,实践上TMS320LF2812的A/D是存在增益差错和偏置差错的,其转化的核算公式如式5.1所示:
其间,ma=actual gain(实践的增益)mb=actual offset(偏置差错)
实践的和抱负的转化核算曲线如图5.3所示:
用规范的0~3V信号经过A/D转化器,由示波器测出电压信号的准确值,调用CCS的A/D转化成果寄存器数值,换算成模仿值,核算出牢靠的增益差错和偏置差错。在数字操控环中直接运用公式5.1得到的模数转化成果。
5.3软件体系代码的编写
通用DSP的源代码开发可以用两个办法:一种是运用汇编指令编写源代码,然后经汇编器和链接器汇编链接后生成可履行方针代码;另一种办法是用规范C/C++言语在CCS环境下编写源代码,经C/C++编译器、汇编器和链接器进行编译链接,生成可履行方针代码。这两种代码开发办法都需求花费很多的时刻,耗时又耗力,大大的添加了产品开发难度,延长了产品开发的周期,然后影响到开发的功率。
Math Works公司和TI公司联合开发的东西包—MATLAB Link for CCS Development Tools,把MATLAB和TI的DSP集成开发环境CCS(Code Composer Stadiu)及方针DSP衔接起来。用此东西可以来便利的操做DSP的存储器或寄存器设置,像操作MATLAB变量相同,整个方针DSP关于MATLAB像通明的相同,在MATLAB环境下,开发人员可以便利的完结对CCS的操作。MATLAB Link for CCS Development Tools支撑CCS识其他任何方针板,包含TI公司EVM板、DSK板和用户自己开发的DSP板。假如再把MATLAB Link for CCS Development Tools与别的一个东西包Embedded Target for the TI TMS320C2000 DSP Platform合作(MathWorks公司和TI公司联合开发的)合作运用,则可以直接由MATLAB里边的Simulink模型生成DSP的可履行代码,即在MATLAB环境完结DSP开发的进程。
首要,依据体系的规划在MATLAB/Simulink平台下树立体系模型(.mdl),仿真满足后,经过MATLAB供给的Real Time Workshop(RTW)生成面向TI编译器的工程文件代码(.prj)并进一步完结代码的编译,运转仿真模型产生C代码程序,而且生成DSP可履行机器码(.out),最终下载到方针DSP板上,运转测验程序,完结体系的开发。
上述开发进程悉数在MATLAB/Simulink环境下进行,开发人员不需求写任何代码,只是需求运用MATLAB的模型模块,就可以完结体系的规划。而且开发人员在体系规划进程中可随时对体系进行仿真验证,确保体系规划的正确性。下图5.4即为DSP代码主动生成的开发流程图。
依据规划的操控算法,运用MATLAB Link for CCS Development Tools东西包和Simulink东西包里边的功用模块,树立出操控体系的仿真模型,TMS320LF2812是一款32位定点DSP,为了能进行浮点运算,咱们一般在DSP数据处理中会运用IQmath库,用定点运算替代浮点运算,在建模进程中要处理好数据格局的设置,在树立模型的进程中特别要留意那些前后两级都有衔接的模块,选用一致的Q格局。遇到模仿信号时用采样坚持器和量化器把模仿接连信号离散化和数字化,数字操控环的时刻选用为3.3微秒,如下图5.5所示。
然后依据实践电路中操控效果,改动装备的PID参数巨细,使操控效果到达最佳。本文中依据实践情况,只选用了PI操控。最终需求留意的是,建模的时分必定要参加F2812 eZdsp模块,在主动生成代码的时分需求对一些模块进行相关参数设置。F2812 eZdsp模块首要的装备信息包含:DSPBoardLabel和BuildAction,其间,BuildAction装备代码生成的四种功用形式:①Code(代码)形式,只生成C代码;②Project(工程)形式,只生成工程文件;③Build(编写)形式,生成工程文件并编译链接;④Build and Load(编写下载)形式,生成工程文件,编译链接并下载到方针板。DSPBoardLabel装备仿真器类型,所用仿真器为F2812 XDS510 Emulator,挑选Build and load功用形式。然后进入Simulink的Simulation-Configuration Parameters,单击实时作业室Real-Time Workshop进入装备界面。进行如下装备:
System target file:ti_c2000_grt.tle
Make command:make_rtw
Template makefile:ti_c2000_grt.tmf
最终在Real-Time Workshop界面中,点击generate code按键,MATLAB依据设置主动生成DSP工程文件,而且主动衔接翻开CCS开发环境,对C代码进行编译,链接、下载到方针板上。经过CCS IDE,咱们可以看到代码生成进程中主动树立的Project.prj工程文件,工程文件中包含:源文件,库文件,链接文件等。
实时作业站针对不同的方针体系,产生相应的代码,首要包含方针体系相关的I/O驱动和中止服务程序(ISR)。产生代码的进程中MATLAB环境会实时的供给相关的信息,如一些正告或犯错信息,用户可以依据提示修正相应的模块的设置。因为生成的代码是C代码,咱们还可以依据详细的需求,在后期的时分便利的修正生成的代码,以完善规划。
5.4 LCD显现程序规划
在电子负载操控体系中,本体系选用的信号板液晶显现屏是由长沙太阳人公司供给的SMG12864ZK字符型液晶,内置ST7920接口型液晶显现操控器。因为DSP2812的最高时钟频率可作业在150MHZ,周期为6.67ns,而ST7920操控器中指令与指令输入之间的时刻距离都是在几十微秒或毫秒,小液晶的效果首要是显现当时的测验形式,详细的实时处理数据的显现由电脑来完结。
在液晶编程规划进程中,怎么可以操控好个操控参数的时序是至关重要的,本款液晶的读写时序如图5.6所示。
因为DSP对ST7920等的拜访不需求运用判“忙”进程,故没有判“忙”函数的规划。在程序规划时,要特别留意GPIO的操控,在装备时必定要添加EALLOW维护,否则会导致装备数据时产生数据丢掉或数据抵触,液晶驱动初始化装备程序如下:
void main(void)
{
InitSysCtrl();//初始化体系操控寄存器、PLL、看门狗和时钟
DINT; //制止和铲除一切CPU中止向量表
InitPieCtrl();//初始化PIE操控寄存器
IER=0x0000; //制止一切CPU中止
IFR=0x0000; //铲除一切中止标志
InitPieVectTable(); //初始化中止向量表
EALLOW; //答应更改受维护的寄存器
GpioMuxRegs.GPBMUX.all=0; //使相关I/O作业在GPIO形式
……
GpioMuxRegs.GPBDIR.bit.GPIOB0=1; // RS(操控液晶屏的数据指令挑选引脚)
GpioMuxRegs.GPBDIR.bit.GPIOB11=1; // RW(操控液晶屏的数据读写挑选引脚)
GpioMuxRegs.GPBDIR.bit.GPIOB12=1; // E(操控液晶屏的使能引脚)
GpioMuxRegs.GPBDIR.bit.GPIOB1=1;//引脚用于操控74LVX3245(U1)方向挑选GpioMuxRegs.GPBDIR.bit.GPIOB2=1;//引脚用于操控74LVX3245(U2)方向挑选GpioDataRegs.GPBSET.bit.GPIOB2=1; //将方向挑选引脚置高
EDIS; //制止更改受维护的寄存器
lcdreset(); //初始化LCD屏
lcdwc(0x01);//铲除显现
delay(50); //延时50*66.7ns
hzklib(); //调用显现函数……
}
5.5键盘程序规划
键盘程序选用查询办法来完结键值的辨认。履行主程序前,首要调用按键的查询程序,判别挑选的测验形式。键盘输入信息规划思维如下所示。
(1)判别是否有键按下
按键被按下时,相应DSP的GPIO口输入线的电平被拉低。因而,判别是否有键按下,读取DSP端口值即可,若端口为低电平,则标明有按键键按下;若端口仍为高电平,无键按下。
(2)承认按下的键值
本规划顶用到的按键少,一个按键对应一个GPIO口,经过读取不同的GPIO口的值,就可以知道当时按键的键值。
(3)等候按键开释
承认按键的键值今后,依然需求判别按键的开释,延时一断时刻后调用履行相应的子程序。
(4)消抖处理
因为选用的按键是机械触点,因而用手按动一个键时,按键的断开和闭合瞬间会呈现电压动摇,如图5.7所示。
为了确保按键键值的辨认,电压颤动的时分不能进行状况的输入查询。为此,程序中添加消抖算法,DSP取得按键被按下信息后,并立刻承认按键的键值,而是延时1ms后再次检测相应端口,假如按键仍处于低电平,则阐明按键的确被按下。同理,在DSP检测到按键开释时,GPIO口康复高电平,程序相同也延时1ms,进行后沿的消抖,然后再辨认键值。
5.6串行通讯规划
因为研讨的是根据DSP的试验样机,在操控精度足够高的情况下,才干完结整机的成型,监控体系是在今后深化的研讨的内容,现在仅在CCS环境下进行了调试测验,只对通讯做了简略的研讨。
串行通讯选用SCI异步通讯接口,SCI模块选用规范的非归零数据格局,可以完结CPU和其他具有SCI端口的外设进行数据通讯。进行通讯协议的规划,首要要进行信息帧结构的规划,串行异步通讯以帧为单位,每次传送一个数据帧。
TMS320LF2812的数据发送和接纳由数据发送单元和接纳单元来完结。算法程序运转一次就不断的查询是否接纳到串口收到的数据,判别标志位tran_flag是否为1,一旦接纳到数据,就将该数据发送出去,并清tran_flag,一起康复串口为接纳形式。DSP2812 SCI与核算机通讯,选用超级中止接纳数据,DSP每隔4奇妙向核算机发送个数据。
vvoid main(void)
{
……
SciReg.SCICTL2.TXINTENA = 1;// 使能SCI发送中止
while (1)
Interrupt void SCI_TX_isr (void )
{
int i;
for ( i= 0 ; i 10 ; i ++ ); // 软件延时1.5微秒,从头初始化PIE,为SCI预备下一次中止
SciRegs.SCITXBUF=pid_cc.pid_out_reg3 + InitOut;
PieCtrlRegs.PIEACK.all = 0x0100;// 呼应中止
while ( SciRegs.SCICTL2.bit.tran_flag = = 0 );;// 状况检测形式,等候发送标志为空
}
void InitSci(void) // SCI初始化
{
EALLOW;
GpioMuxRegs.GPFMUX.all = 0x0030; // 装备SCI –TX
EDIS;
SciaRegs.SCICCR.all = 0x07;// 8位字符长度
SciaRegs.SCICTL1.all = 0x03; // 使能 TX
SciaRegs.SCIHBAUD = 243 >> 8;// 波特率:19200
SciaRegs.SCILBAUD = 243 0x00FF
SciaRegs.SC%&&&&&%TL1.all = 0x0023;// SCI退出复位
}