




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于dsp的磁悬浮小灯控制系统摘 要我们组设计的磁悬浮小灯控制系统是基于tms320f28377s dsp芯片。本设计采用了上下两个霍尔元件作为感应器,通过dsp中的ad模块去采集这两路信号,然后经过pid控制后把输出通过dsp的da模块将数据发送到驱动器控制线圈电流大小,以改变磁场来控制灯的位置使其保持悬浮,整个系统够成了一个闭环控制系统,抗干扰能力强,新颖且可广泛于教育领域,增加学生的学习兴趣。abstract关键词:tms320f28337s pid控制 闭环控制系统基于dsp的磁悬浮小灯控制系统目 录摘要abstract引言1第一章 磁悬浮小灯控制系统的结构 11.1 电源部分 21.2 ad转换部分 21.3 pid部分 31.4 da转换部分 41.5 驱动器部分 5第二章 程序流程图6结论6致谢6参考文献7附录8引言目前在现实生活中,磁悬浮技术得到了广泛的应用,本设计采用把磁悬浮技术使得小灯并发亮保持悬浮,改变了传统的照明技术,其中也用到了pid闭环控制。非常新颖,且系统比较稳定,能够很好的应用于教育领域,增加学生的学习兴趣。对其他领域也有广泛的启发意义。第一章 磁悬浮小灯控制系统的结构分析仪使用dsp28377s开发平台作为基础。整个系统可以分成5个部分:(1) 开关电源部分:给系统提供24v电源。(2) ad采集部分:使用tms320x28377s内部的ad外设,对待测的的霍尔元件两端进行模数转换。得到数字量表示的电压值。 (3) pid部分:在dsp中,使用ad模块采集到的外部信号,并转化为数字信号作为pid控制器的反馈信号,然后设定期望值,在dsp中经过数字pid计算后通过da模块传送给驱动器,从而使得驱动模块能够调整电流的大小,一控制磁场的强度,是灯保持悬浮。(4) 驱动模块部分:根据da传送过来的信号输出相应大小电流给线圈。(5) da输出部分:使用tms320f28377s内部的da外设,把经过pid计算的输出量传送给外部的驱动器。磁悬浮小灯控制系统整体结构图,如图1所示。图1 磁悬浮小灯控制系统整体结构图1.1 开关电源部分设备的电源部分的目的是为了给整个系统体提供24v的电源。图 2 系统的电源部分1.2 ad转换部分1.2.1 ad转换本设计采用tms320f28377s内部的a/d转换器来采集外部霍尔元件的信号。tms320f28377s内部的a/d转换器的特性如下1. 12位或16位的转换精度2. 最高25mhz 的转换速度、3. 16路独立通道。由于控制系统的整体工作频率比这芯片内部25mhz的最高转换速度慢。为了得到更加精确的转换值,可以采用采集10次数据,讲采集到的数据就行快速排序,去掉采集到系统的最高和最低的值,然后将这8次数据求其平均值。把这样处理后的结果再当做一次采集的数据。1.2.2 ad转化的实现1. 配置ad转换的时钟信号adcclk,系统预分频。2. 配置ad转换的采样模式,本设计才用12位通道,单端模式。3. 配置ad转换的通道以及转换完成后中断标志清零。1.3 pid控制部分1.3.1 pid控制原理 pid 控制器是一个在工业控制应用中常见的反馈回路部件。这个控制器把收集到的数据和一个参考值进行比较,然后把这个差别用于计算新的输入值,这个新的输入值的目的是可以让系统的数据达到或者保持在参考值。和其他简单的控制运算不同,pid控制器可以根据历史数据和差别的出现率来调整输入值,这样可以使系统更加准确,更加稳定。可以通过数学的方法证明,在其他控制方法导致系统有稳定误差或过程反复的情况下,一个pid反馈回路却可以保持系统的稳定。图 3 pid控制原理图1.3.2 pid控制的实现 在dsp中,使用ad模块采集到的外部信号,并转化为数字信号作为pid控制器的反馈信号,然后设定期望值,在dsp中经过数字pid计算后通过da模块传送给驱动器,从而使得驱动模块能够调整电流的大小,一控制磁场的强度,是灯保持悬浮。 1.定义变量 float ek1 = 0; /偏差ek-1 float kp = -2.2; /定义比例系数 float ki = 0; /定义积分常数 float kd = -0.03; /定义微分常数 float delta = 0; /定义误差 float uk = 0; /uk 2.采用pd控制实现程序float pid(float ek)delta = ek-ek1;uk = kp*ek+kd/t*delta;ek1 = ek;return uk;1.4 da部分1.4.1 da转换1.4.2 da转换实现1.5 驱动器部分pid转换结束后,输出的数据就被存放da_value中,传送给驱动器,图 4 驱动器图第2章 程序流程图磁悬浮小灯系统程序流程图如下:图5 c程序流程图结论本设计实现了基于tms320f28337s的磁悬浮小灯控制系统。使用了tms320f28377s内部的adc、dac资源,整个实验设计首先通过ad采集外部的信号,然后经过pid计算处理后,再通过da将数据发送到驱动器控制线圈电流大小,以改变磁场来控制灯的位置使其保持悬浮。致谢感参考文献1 texas instrument tms320f2837xs delfino microcontrollersm.literature number: spruhx5c,2015 2 texas instruments. using pwm output as a digital-to-analog converter on a tms320f28377 digital signal controller m. application report: spraa88a,20083 texas instruments.附 录主程序清单: #include f28x_project.h / device headerfile and examples include filevoid configureadc(void);void setupadcsoftware(void);void error(void);unsigned long ad_up10,ad_down10;float offset=1;/ /设置补偿float exp=-1.2;/ /定义期望int ad_value;float real; /当前实际电压unsigned long ad_up_ave,ad_down_ave;float ek1 = 0; /偏差ek-1float kp = -2.2; /定义比例系数float ki = 0; /定义积分常数float kd = -0.03; /定义微分常数float t = 0.001; /定义周期float sum = 0;float delta = 0;float uk = 0; /ukfloat abso(float ek)if ( ek = 65535)i = 65535;else if ( i = 0)i = 0;return i;void dac_send(unsigned char passage, unsigned int dat)unsigned char i, mode;unsigned int j;switch(passage)/0x20:通道a0x22: 通道b0x24:通道c0x26:通道d.设置软件自动更新case 0:mode = 0x20;break;case 1:mode = 0x22;break;case 2:mode = 0x24;break;case 3:mode = 0x26;break;default :break;for(i=0;i8;i+)/da8534_din(mode&0x80);j = mode&0x80;if (j=0)gpiodataregs.gpadat.bit.gpio16 = 0;/ioport_set_pin_level(pio_pb8_idx,ioport_pin_level_low); /data=0elsegpiodataregs.gpadat.bit.gpio16 = 1;/ioport_set_pin_level(pio_pb8_idx,ioport_pin_level_high); /data=1delay_us(2);gpiodataregs.gpadat.bit.gpio18 = 1;/ioport_set_pin_level(pio_pb10_idx,ioport_pin_level_high); /clk=1delay_us(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&0x8000);j = dat&0x8000;if (j=0)gpiodataregs.gpadat.bit.gpio16 = 0;/ioport_set_pin_level(pio_pb8_idx,ioport_pin_level_low); /data=0elsegpiodataregs.gpadat.bit.gpio16 = 1;/ioport_set_pin_level(pio_pb8_idx,ioport_pin_level_high); /data=1delay_us(2);gpiodataregs.gpadat.bit.gpio18 = 1;/ioport_set_pin_level(pio_pb10_idx,ioport_pin_level_high); /clk=1delay_us(2);dat = 1;delay_us(2);gpiodataregs.gpadat.bit.gpio18 = 0;/ioport_set_pin_level(pio_pb10_idx,ioport_pin_level_low); /clk=0delay_us(2);gpiodataregs.gpadat.bit.gpio19 = 1;/ioport_set_pin_level(pio_pb11_idx,ioport_pin_level_high); /cs=1void quick(unsigned long *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=n) temp=am;am=an;an=temp;m+;n-;while(m=n);if(mi) quick(a,i,n);_interrupt void cpu_timer0_isr(void)unsigned long i;float ek=0;float output; /变化unsigned long da_value;cputimer0.interruptcount+;gpiodataregs.gpadat.bit.gpio12 = 1; /turn on ledad_up_ave=0;ad_down_ave=0;for (i=0;i10;i+) /ad sample 10 times /convert, wait for completion, and store results/start conversions immediately via software, adcaadcaregs.adcsocfrc1.all = 0x0003; /soc0 and soc1/start conversions immediately via software, adcb/wait for adca to complete, then acknowledge flagwhile(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_down_ave+=ad_downi;ad_value = (int)(float)(ad_down_ave)-(ad_up_ave)/8.0);real = ad_value/1000.0 ; /calculate real as suspension position of the plantek = exp - real; /ek is suspension position erroroutput = pid(ek)+offset;da_value = (unsigned long)(output*65535/5.0); /convert output to da_value for dac moduleda_value = saturation(da_value); /output saturationdac_send(0,da_value); /using da to send da_value to dac modulegpiodataregs.gpadat.bit.gpio12 = 0; /turn off led/ acknowledge this interrupt to receive more interrupts from group 1piectrlregs.pieack.all = pieack_group1;/variables to store conversion resultsuint16 adcaresult0;uint16 adcaresult1;uint16 sdata = 0x0000; / send datauint16 rdata; / received datavoid main(void)/ step 1. initialize system control:/ pll, watchdog, enable peripheral clocks/ this example function is found in the f2837xs_sysctrl.c file. initsysctrl();/ 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. initgpio();/ initspiagpio();/ step 3. clear all interrupts and initialize pie vector table:/ disable cpu interrupts dint;/ initialize the pie control registers to their default state./ the default state is all pie interrupts disabled and flags/ are cleared. initpiectrl();/ disable cpu interrupts and clear all cpu interrupt flags: ier = 0x0000; ifr = 0x0000;/ initialize the pie vector table with pointers to the shell interrupt/ service routines (isr). initpievecttable(); / interrupts that are used in this example are re-mapped to / isr functions found within this file.eallow; / this is needed to write to eallow protected registerspievecttable.timer0_int = &cpu_timer0_isr;edis; / this is needed to disable write to eallow protected registers / step 4. initialize the device peripheral. this function can be / found in f2837xs_cputimers.cinitcputimers(); / for this example, only initialize the cpu timers configcputimer(&cputimer0, 200, 500); cputimer0regs.tcr.all = 0x4000; / use write-only instruction to set tss bit / step 5. user specific code, enable interrupts: / enable tint0 in the pie: group 1 interrupt 7 piectrlregs.pieier1.bit.intx7 = 1; /configure the adcs and power them upconfigureadc(); /setup the adcs for software conversionssetupadcsoftware();ier |= m_int1; / enable global interrupts and higher priority real-time debug events: eint; / enable global interrupt intm ertm; / enable global realtime interrupt dbgm/ step 6. idle loop. just sit and loop forever (optional): while(1) /write adc configurations and power up the adc for both adc a and adc bvoid configureadc(void)eallow;/write configurationsadcaregs.adcctl2.bit.prescale = 6; /set adcclk divider to /4/adcbregs.adcctl2.bit.prescale = 6; /set adcclk divider to /4 adcsetmode(adc_adca, adc_resolution_12bit, adc_signalmode_single); /adcsetmode(adc_adcb, adc_resolution_12bit, adc_signalmode_single);/set pulse positions to lateadcaregs.adcctl1.bit.intpulsepos = 1;/adcbregs.adcctl1.bit.intpulsepos = 1;/power up the adcsadcaregs.adcctl1.bit.adcpwdnz = 1;/adcbregs.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年滴滴新人考试题目及答案
- 2025年实验动物学实验动物饲养与实验技能考核答案及解析
- 2025年皮肤科疑难杂症诊疗方案讨论试卷答案及解析
- 2025年医院事业考试试题及答案
- 河南地矿考试题型及答案
- 2025年神经内科临床实践评估答案及解析
- 智能网联汽车在租赁行业的推广策略-洞察及研究
- 互联网站代管协议书8篇
- 2025年耳鼻喉科鼻窦炎诊治专项测试卷答案及解析
- 护林狩猎员考试题及答案
- 2025项目管理考试题及答案
- 医院手术室质控体系构建与管理
- 喷涂基础知识培训课件
- 2025年驻外内聘考试题库
- 中铁四局工作汇报与战略规划
- 矿山测量基础知识课件
- 【《上市公司财务造假分析的国内外文献综述》5100字】
- 企业融资培训课件
- 2025年抗菌药物合理使用培训
- 杜仲种植深加工项目可行性研究报告-备案立项
- 2025年乡村文化旅游发展报告:文旅融合下的乡村旅游生态旅游规划与实施研究
评论
0/150
提交评论