基于dsp的磁悬浮小灯控制系统0001_第1页
基于dsp的磁悬浮小灯控制系统0001_第2页
基于dsp的磁悬浮小灯控制系统0001_第3页
基于dsp的磁悬浮小灯控制系统0001_第4页
基于dsp的磁悬浮小灯控制系统0001_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于DSP的磁悬浮小灯控制系统I摘要我们组设计的磁悬浮小灯控制系统是基于 TMS320F28377DSP芯片。本设计采用了 上下两个霍尔元件作为感应器,通过DSP中的AD模块去采集这两路信号,然后经过 PID 控制后把输出通过DSP的 DA模块将数据发送到驱动器控制线圈电流大小,以改变磁场 来控制灯的位置使其保持悬浮,整个系统够成了一个闭环控制系统, 抗干扰能力强,新 颖且可广泛于教育领域,增加学生的学习兴趣。Abstract关键词:TMS320F28337S PID控制 闭环控制系统基于DSP的磁悬浮小灯控制系统I摘要 .IAbstract .I引言. 1第一章磁悬浮小灯控制系统的结构 .1

2、1.1电源部分 . 21.2 AD转换部分 . 21.3 PID 部分. 31.4 DA转换部分 . 41.5驱动器部分 . 5第二章程序流程图.6结论. 6致谢. 6参考文献. 7附录. 8磁悬浮小灯控制系统整体结构图,如图1所示。AOs)PID CodtroNerSaturationDAC CLASSI BL1AD.VALUECl- -Anc ADCCL1磁 Channel: 1引言目前在现实生活中,磁悬浮技术得到了广泛的应用 ,本设计采用把磁悬浮技术使得小灯并发亮保持悬浮,改变了传统的照明技术,其中也用到了PID闭环控制。非常新颖,且系统比较稳定,能够很好的应用于教育领域,增加学生的学习

3、兴趣。对 其他领域也有广泛的启发意义。第一章 磁悬浮小灯控制系统的结构分析仪使用DSP28377S开发平台作为基础。整个系统可以分成 5个部分:(1)开关电源部分:给系统提供24V电源。(2) AD采集部分:使用TMS320X28377S内部的AD外设,对待测的的霍尔元件 两端进行模数转换。得到数字量表示的电压值。(3)PID部分:在DSP中,使用AD模块采集到的外部信号,并转化为数字信号作为PID控制器的反馈信号,然后设定期望值,在DSP中经过数字PID计算后通过DA模块传送给驱动器,从而使得驱动模块能够调整电流的大小, 一控制磁场的强度,是灯保持悬浮。(4)驱动模块部分:根据DA传送过来的

4、信号输出相应大小电流给线圈。(5) DA输出部分:使用TMS320F28377S内部的DA外设,把经过PID计算的输 出量传送给外部的驱动器。OUTPUTSENSOR DOWN图1磁悬浮小灯控制系统整体结构图DesiredOFFSETSENSOfi.UPFrd-Order FilerGan2ACC OA8S1-BL1ADC CLASSI BL2Anr ADCCL1Channel: 2Fr-Order FiNerl基于DSP的磁悬浮小灯控制系统211开关电源部分设备的电源部分的目的是为了给整个系统体提供24v的电源图2系统的电源部分12 AD转换部分1.2.11.2.1 ADAD 转换本设计采用

5、TMS320F28377S内部的A/D转换器来采集外部霍尔元件的信号TMS320F28377S内部的A/D转换器的特性如下1.12位或16位的转换精度2.最高25MHz的转换速度、3.16路独立通道。由于控制系统的整体工作频率比这芯片内部 25MHz的最高转换速度慢。为了得 到更加精确的转换值,可以采用采集10次数据,讲采集到的数据就行快速排序,去 掉采集到系统的最高和最低的值,然后将这8次数据求其平均值。把这样处理后的结 果再当做一次采集的数据。1.2.21.2.2 ADAD转化的实现1.配置AD转换的时钟信号ADCCLK,系统预分频。2.配置AD转换的采样模式,本设计才用12位通道,单端模

6、式3.配置AD转换的通道以及转换完成后中断标志清零。基于DSP的磁悬浮小灯控制系统31.3 PID控制部分1.3.11.3.1 PIDPID控制原理PID控制器是一个在工业控制应用中常见的反馈回路部件。这个控制器把收集 到的数据和一个参考值进行比较,然后把这个差别用于计算新的输入值,这个新的 输入值的目的是可以让系统的数据达到或者保持在参考值。和其他简单的控制运算 不同,PID控制器可以根据历史数据和差别的出现率来调整输入值,这样可以使系 统更加准确,更加稳定。可以通过数学的方法证明,在其他控制方法导致系统有稳 定误差或过程反复的情况下,一个 PID反馈回路却可以保持系统的稳定。1.3.21.

7、3.2 PIDPID控制的实现在DSP中,使用AD模块采集到的外部信号,并转化为数字信号作为 PID控制器 的反馈信号,然后设定期望值,在 DSP中经过数字PID计算后通过DA模块传送给驱 动器,从而使得驱动模块能够调整电流的大小, 一控制磁场的强度,是灯保持悬浮。1定义变量floatek1 = 0;/偏差ek-1floatKp = -2.2;/定义比例系数floatKi = 0;/定义积分常数floatKd = -0.03;/定义微分常数floatdelta = 0;/定义误差floatuk = 0;uk2.采用PD控制实现程序float PID( float ek)基于DSP的磁悬浮小灯控

8、制系统4delta = ek-ek1;uk = Kp*ek+Kd/T*delta; ek1 = ek;return uk;1.4 DA 部分1.4.11.4.1 DADA 转换1.4.21.4.2 DADA转换实现1.5驱动器部分PID转换结束后,输出的数据就被存放 DA_value中,传送给驱动器,图4驱动器图基于DSP的磁悬浮小灯控制系统5第二章程序流程图磁悬浮小灯系统程序流程图如下:仁包含所要用到的头文件FincludeHF20 x_Projehl) 2定义各个变量(如血kp, kjj kd* AD_value) 3定义将用到的子函数(ConfigijreADC,PIDFDAC_5end

9、)1引始化系统时钟(InitSysarl()Z初始化中断向量表(InitPieCtrl(rInrtPtefedTableO)工开定时器中断(开三级中断)1. ADMW集来自霍尔元件的两路信号)2. PID (对采集到的信号进行3. DAC_send (把经卩处理的数据发送给驱动器图5 C程序流程图结论本设计实现了基于TMS320F28337S的磁悬浮小灯控制系统。使用了 TMS320F28377S内部的ADC、DAC资源,整个实验设计首先通过 AD采集外部的 信号,然后经过PID计算处理后,再通过DA将数据发送到驱动器控制线圈电流大 小,以改变磁场来控制灯的位置使其保持悬浮。娈重与子函埶mai

10、nlS 数中断函数基于DSP的磁悬浮小灯控制系统6/ Device Headerfile and Examples In clude File致谢参考文献1Texas In strume nt TMS320F2837xS Delfi no Microco ntrollersM丄 iterature Number: SPRUHX5C, 20152Texas Instruments. Using PWM Output as a Digital-to-Analog Converter on a TMS320F28377 Digital Signal Controller M. Application

11、 Report: SPRAA88A, 20083Texas Instruments.主程序清单:#in eludeF28x Project.h void ConfigureADC (void );void SetupADCSoftware (void );void error (void );unsignedlong AD_UP10,AD_DOWN10;float offset=1; / / 设置补偿 float Exp=-1.2;/定义期望int AD_value;float Real;/当前实际电压unsignedlong AD_UP_AVE,AD_DOWN_AVE;floatek1 =

12、0;/ 偏差 ek-1floatKp = -2.2;/定义比例系数floatKi = 0;/定义积分常数floatKd = -0.03;/定义微分常数floatT = 0.001;/定义周期floatsum = 0;floatdelta = 0;floatuk = 0;ukfloat abso (float ek)if ( ek = 65535)i = 65535;else if ( i = 0)i = 0;return i;void DAC_send ( unsigned char Passage,unsignedint dat) _unsignedchar i, mode;un sig n

13、ed int j;switch (Passage)/0 x20 :通道 A 0 x22: 通道 B 0 x24 :通道 C 0 x26 :D.设置软件自动更新case 0:mode = 0 x20;break ;case 1:mode = 0 x22;break ;case 2:mode = 0 x24;break ;case 3:mode = 0 x26;break ;基于DSP的磁悬浮小灯控制系统8default breakfor (i=0;i8;i+)/DA8534_DIN(mode&0 x80);j = mode&0 x80;if (j=0)GpioDataRegs.GPADAT.bi

14、t.GPIO16 = 0;ioport_set_pin_level(PIO_PB8_IDX,IOPORT_PIN_LEVEL_LOW); data=0 elseGpioDataRegs.GPADAT.bit.GPIO16 = 1;ioport_set_pin_level(PIO_PB8_IDX,IOPORT_PIN_LEVEL_HIGH); data=1 DELAY_US(2);GpioDataRegs.GPADAT.bit.GPIO18 = 1; ioport_set_pin_level(PIO_PB10_IDX,IOPORT_PIN_LEVEL_HIGH); clk=1 DELAY_US(

15、2);mode = 1;DELAY_US(2);GpioDataRegs.GPADAT.bit.GPIO18 = 0;/ioport_set_pin_level(PIO_PB10_IDX,IOPORT_PIN_LEVEL_LOW); clk=0DELAY_US(2);for (i=0;i16;i+) /DA8534 DIN(dat&0 x8000);j = dat&0 x8000;if (j=0)GpioDataRegs.GPADAT.bit.GPIO16 = 0;ioport_set_pin_level(PIO_PB8_IDX,IOPORT_PIN_LEVEL_LOW); /data=0 e

16、lse/GpioDataRegs.GPADAT.bit.GPIO16 = 1;ioport_set_pin_level(PIO_PB8_IDX,IOPORT_PIN_LEVEL_HIGH); data=1 DELAY_US(2);GpioDataRegs.GPADAT.bit.GPIO18 = 1; ioport_set_pin_level(PIO_PB10_IDX,IOPORT_PIN_LEVEL_HIGH); clk=1 DELAY_US(2);dat = 1;DELAY_US(2);GpioDataRegs.GPADAT.bit.GPIO18 = 0;/ioport_set_pin_le

17、vel(PIO_PB10_IDX,IOPORT_PIN_LEVEL_LOW); clk=0DELAY_US(2);GpioDataRegs.GPADAT.bit.GPIO19 = 1;基于DSP的磁悬浮小灯控制系统9基于DSP的磁悬浮小灯控制系统10/ioport_set_p inevel(PI0_PB11 _I DX,IOPORT_PIN_LEVEL_HIGH); cs=1void quick (unsignedlong *a, int i, int j)int m, n, temp;int k;m=i;n=j;k=a(i+j)/2;do while (amk&mk&ni) n-;if (m

18、=n) temp=am;am=a n;a n=temp;m+;n-; while (m=n);if (mi) quick(a,i,n);_in terrupt厂un sig nedvoidcpu_timer0srlong i;(void )float ek=0;float Output;/ 变化unsigned long DA_value;CpuTimer O.ln terruptCou nt+;GpioDataRegs.GPADAT.bit.GPIO12 = 1;/tur n on led基于DSP的磁悬浮小灯控制系统11基于DSP的磁悬浮小灯控制系统1 0AD_UP_AVE=O;AD_DO

19、WN_AVE=0;for (i=0;i10;i+)/AD sample 10 timesc on vert, wait for completi on, and store results/start con vers ions immediately via software, ADCAAdcaRegs.ADCSOCFRC1.all = 0 x0003;/SOCO and SOC1/start con vers ions immediately via software, ADCB /wait for ADCA to complete, the n ack no wledge flag wh

20、ile (AdcaRegs.ADCINTFLG.bit.ADCINT1 = 0); AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;AD_UPi = AdcaResultRegs.ADCRESULT0; AD_DOWNi = AdcaResultRegs.ADCRESULT1;quick(AD_UP,0,9);/sortquick(AD_DOWN,0,9);AD_UP0=0;/delete maximun & minimunAD_UP9=0;AD_DOWN0=0;AD_DOWN9=0;for (i=0;i10;i+)AD_UP_AVE+=AD_UPi; AD_DOW

21、N_AVE+=AD_DOWNi;AD_value = ( int )( float )(AD_DOWN_AVE)-(AD_UP_AVE)/8.0);Real = AD_value/1000.0; /calculate Real as suspensionpositionof the plantek = Exp - Real;/ek is suspensionpositionerrorOutput = PID(ek)+offset;DA_value = (unsignedlong )(Output*65535/5.0);/convert Output toDA_value for DAC mod

22、uleDA_value = saturatio n(DA_value);/output saturati onDAC_se nd(0,DA_value);/using DA to sendDA_value to DAC moduleGpioDataRegs.GPADAT.bit.GPIO12 = 0;/turn off led/ Ackno wledge this in terrupt to receive more in terrupts from group 1PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;/variables to store conver

23、sion results Uin t16 AdcaResult0;Uin t16 AdcaResult1;Uint16 sdata = 0 x0000;II send dataUi nt16 rdata;II received datavoid main (void )基于DSP的磁悬浮小灯控制系统1 1/ Step 1.1 nitialize System Control:/ PLL, WatchDog, enable Peripheral Clocks/ This example function is found in the F2837xS_SysCtrl.c file.In itSy

24、sCtrl();/ Step 2. Initialize GPIO:/ This example function is found in the F2837xS_Gpio.c file and/ illustrates how to set the GPIO to its default state.In itGpio();/ I ni tSpiaGpio();/ Step 3. Clear all interrupts and initialize PIE vector table:/ Disable CPU in terruptsDINT;/ I nitialize the PIE co

25、n trol registers to their default state./ The default state is all PIE in terrupts disabled and flags/ are cleared.In itPieCtrl();/ Disable CPU interrupts and clear all CPU interrupt flags:IER = 0 x0000;IFR = 0 x0000;/ I nitialize the PIE vector table with poin ters to the shell In terrupt/ Service

26、Routi nes (ISR).In itPieVectTable();/ Interrupts that are used in this example are re-mapped to/ ISR fun cti ons found within this file.EALLOW; / This is needed to write to EALLOW protected registersPieVectTable.TIMER0NT = & cpu_timer0_isr;EDIS; / This is n eeded to disable write to EALLOW protected

27、 registers/ Step 4. Initialize the Device Peripheral. This function can be/ fou nd in F2837xS_CpuTimers.cIn itCpuTimers();/ For this example, only in itialize the Cpu TimersCon figCpuTimer(&CpuTimer0, 200, 500);CpuTimer0Regs.TCR.all = 0 x4000;/ Use write-o nly in struction to set TSS bit/ Step 5. Us

28、er specific code, en able in terrupts:/ En able TINT0 in the PIE: Group 1 in terrupt 7PieCtrlRegs.PIEIER1.bit.lNTx7 = 1;/Con figure the ADCs and power them upCon figureADC();/Setup the ADCs for software con vers ionsSetupADCSoftware();IER |= MNT1;基于DSP的磁悬浮小灯控制系统1 2/ Enable global Interrupts and high

29、er priority real-time debug events:EINT;/ En able Global in terrupt INTMERTM;/ En able Global realtime in terrupt DBGM/ Step 6. IDLE loop. Just sit and loop forever (opti on al):while (1)/Write ADC con figuratio ns and power up the ADC for both ADC A and ADC B void ConfigureADC (void )EALLOW;/write

30、con figurati onsAdcaRegs.ADCCTL2.bit.PRESCALE = 6;/set ADCCLK divider to /4AdcbRegs.ADCCTL2.bit.PRESCALE = 6; /set ADCCLK divider to /4AdcSetMode(ADC_ADCA, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE); /AdcSetMode(ADC_ADCB, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE);/Set pulse positi ons to lateAd

31、caRegs.ADCCTL1.bit .IN TPULSEPOS = 1; AdcbRegs.ADCCTL1.bit.lNTPULSEPOS = 1;/power up the ADCs AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1; AdcbRegs.ADCCTL1.bit.ADCPWDNZ = 1;/delay for 1ms to allow ADC time to power up DELAY_US(1000);EDIS;void SetupADCSoftware (void )Uin t16 acqps;/determ ine mi ni mum acquisiti on wi ndow (in SYSCLKS) based on resoluti onif (ADC_RESOLUTION_12BIT = AdcaRegs.ADCCTL2.bit.RESOLUTION) acqps = 14;75nselse /resolution is 16-bitacqps = 63;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论