首页 实验406DSP直流电机控制实验

实验406DSP直流电机控制实验

举报
开通vip

实验406DSP直流电机控制实验个人资料整理仅限学习使用PAGE\*MERGEFORMAT#/12姓名专业实验名称吴镌樊想孙璐陈玉枫自动化学号时间2018/12/成绩0816070110081607020208160702010816070203直流电机控制实验实验内容通过C语言编程控制控制I/O管脚产生不同占空比的PWM信号,从而控制直流电机的转速实验目的和要求实验设备实验原理1.学习用C语言编制中断程序,控制F2812DSP通用I/O管脚产生不同占空比的PWM信号。.学习F2812DSP的通用I/O管脚的控制方法。.学习直流电机的控制原...

实验406DSP直流电机控制实验
个人资料整理仅限学习使用PAGE\*MERGEFORMAT#/12姓名专业实验名称吴镌樊想孙璐陈玉枫自动化学号时间2018/12/成绩0816070110081607020208160702010816070203直流电机控制实验实验 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 通过C语言编程控制控制I/O管脚产生不同占空比的PWM信号,从而控制直流电机的转速实验目的和要求实验设备实验原理1.学习用C语言编制中断程序,控制F2812DSP通用I/O管脚产生不同占空比的PWM信号。.学习F2812DSP的通用I/O管脚的控制方法。.学习直流电机的控制原理和控制方法。计算机,ICETEK-F2812-EDU实验箱<或ICETEK仿真器+ICETEK-F2812-A系统板+相关连线及电源)。1.TMS320F2812DSP的McBSP引脚通过设置PWM11和PWM5的工作方式和状态,可以实现将它们当成通用I/O引脚使用。2.直流电机控制直流电动机是最早出现的电动机,也是最早能实现调速的电动机。近年来,直流电动机的结构和控制方式都发生了很大的变化。随着计算机进入控制领域,以及新型的电力电子功率元器件的不断出现,使采用全控型的开关功率元件进行脉宽调制(PulsWidthModulation,简称PWM>控制方式已成为绝对主流。PWM调压调速原理直流电动机转速n的表达式为:①-二KnUIR其中,U为电枢端电压;I为电枢电流;R为电枢电路总电阻;①为每极磁通量;K为电动机结构参数。所以直流电动机的转速控制方法可分为两类:对励磁磁通进行控制的励磁控制法和对电枢电压进行控制的电枢控制法。其中励磁控制法在低速时受磁极饱和的限制,在高速时受换向火花和换向器结构强度的限制,并且励磁线圈电感较大,动态响应较差,所以这种控制方法用得很少。现在,大多数应用场合都使用电枢控制法。绝大多数直流电机采用开关驱动方式。开关驱动方式是使半导体功率器件工作在开关状态,通过脉宽调制PWM来控制电动机电枢电压,实现调速。AUoGND上图是利用开关管对直流电动机进行PWM调速控制的原理图和输入输出电压波形。图中,当开关管MOSFET的栅极输入高电平时,开关管导通,直流电动机电枢绕组两端有电压Us。t1秒后,栅极输入变为低电平,开关管截止,电动机电枢两端电压为0。t2秒后,栅极输入重新变为高电平,开关管的动作重复前面的过程。这样,对应着输入的电平高低,直流电动机电枢绕组两端的电压波形如图中所示。电动机的电枢绕组两端的电压平均值Uo为SSSOUUTttttUU==a++=11210式中a为占空比,a=t1/T占空比a表示了在一个周期T里,开关管导通的时间与周期的比值。a的变化范围为0<a<1。由此式可知,当电源电压US不变的情况下,电枢的端电压的平均值Uo取决于占空比a的大小,改变a值就可以改变端电压的平均值,从而达到调速的目的,这就是PWM调速原理。PWM调速方法:在PWM调速时,占空比a是一个重要参数。以下3种方法都可以改变占空比的值:(1>定宽调频法:这种方法是保持t1不变,只改变t2,这样使周期T(或频率〉也随之改变。(2>调宽调频法:这种方法是保持t2不变,只改变t1,这样使周期T(或频率〉也随之改变。(3>定频调宽法:这种方法是使周期T(或频率>保持不变,而改变t1和t2。前两种方法由于在调速时改变了控制脉冲的周期(或频率>,当控制脉冲的频率与系统的固有频率接近时,将会引起震荡,因此这两种方法用得很少。目前,在直流电动机的控制中,主要使用定频调宽法号,DSP将在此引脚上给出PWM信号用来控制直流电机的转速;图中的DIR输入对应ICETEK-F2812-A评估板上P1外扩插座第6引脚的P4信号,DSP将在此引脚上给出高电平或低电平来控制直流电机的方向。从DSP输出的PWM信号和转向信号先经过2个与门和1个非门再与各个开关管的栅极相连。控制原理当电动机要求正转时,PWM11给出高电平信号,该信号分成3路:第1路接与门Y1的输入端,使与门Y1的输出由PWM决定,所以开关管V1栅极受PWM控制;第2路直接与开关管V4的栅极相连,使V4导通;第3路经非门F1连接到与门Y2的输入端,使与门Y2输出为0,这样使开关管V3截止;从非门F1输出的另一路与开关管V2的栅极相连,其低电平信号也使V2截止。同样,当电动机要求反转时,PWM5给出低电平信号,经过2个与门和1个非门组成的逻辑电路后,使开关管V3受PWM信号控制,V2导通,VI、V4全部截止。4.程序编制程序中采用定时器中断产生固定频率的PWM波,在每个中断中根据当前占空比判断应输出波形的高低电平。主程序用轮询方式读入键盘输入,得到转速和方向控制命令。在改变电机方向时为减少电压和电流的波动采用先减速再反转的控制顺序。实验设计及调试:<1)对实验内容和实验原理进行 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 ,理出完成实验的设计思路。通过C语言编程改变pwm波的占空比,将此pwm波从I/O口输出到直流电动机,从而改变其转速,通过引脚上给出高电平或低电平和逻辑电路来控制直流电机的方向。<2)列出设计所需的特殊环节…<3)画出设计流程图。l.pwm初始化2•电机使能键盘实时监测中断调用<4)调试程序#inelude"DSP281x_Device.h"//DSP281xHeaderfileIneludeFile#inelude"DSP281x_Examples.h"//DSP281xExamplesIneludeFile//Prototypestatementsforfunetionsfoundwithinthisfile.interruptvoidcpu_timerO_isr(void>。voidDelay(unsignedintnTime>。voidGpio_seleet(void>。voiderror(int>。voidprogram_stop(>。voidGpio_PortA(void>。voidGpio_PortB(void>。voidGpio_PortF(void>。voidGpio_PortDEG(void>。eharConvertSeanToChar(unsignedehareSeanCode>。voidRefreshLEDArray(>。//刷新显示voidSetLEDArray(intnNumber>。〃修改显示内容#defineT46uS0x0d40#defineSCANCODE_00x70#defineSCANCODE_10x69#defineSCANCODE_20x72#defineSCANCODE_30x7A#defineSCANCODE_40x6B#defineSCANCODE_50x73#defineSCANCODE_60x74#defineSCANCODE_70x6C#defineSCANCODE_80x75#defineSCANCODE_90x7D#defineSCANCODE_Del0x49#defineSCANCODE_Enter0x5A#defineSCANCODE_Plus0x79#defineSCANCODE_Minus0x7B#defineSCANCODE_Mult0x7C#defineSCANCODE_Divid0x4A#defineSCANCODE_Num0x77#defineCTRGR*(int*>0x108000#defineCTRLCDCMDR*(int*>0x108001#defineCTRKEY*(int*>0x108001#defineCTRLCDCR*(int*>0x108002#defineCTRCLKEY*(int*>0x108002#defineCTRLCDLCR*(int*>0x108003#defineCTRLCDRCR*(int*>0x108004#defineCTRLA*(int*>0x108005#defineCTRLR*(int*>0x108007Uint16var1=0。Uint16var2=0。Uint16var3=0。Uint16test_eount=0。Uint16Test_flag=0。Uint16Test_var=0。Uint16Test_status[32]。Uint16PASS_flag=0。unsianedintuWork。intjishu=O。unsignedintuWork,nCount=0,uN,uN1,nCountl,nDir。unsignedintuPort8000。unsignedintnScreenBuffer[1024]。unsignedcharledbuf[8],ledx[8]。unsignedcharledkey[10][8]={{0x00,0x00,0x7C,0x82,0x82,0x82,0x7C,0x00},{0x00,0x00,0x00,0x84,0xFE,0x80,0x00,0x00},〃1{0x00,0x00,0x84,0xC2,0xA2,0x92,0x8C,0x00},〃2{0x00,0x00,0x44,0x92,0x92,0x92,0x6C,0x00},{0x00,0x00,0x30,0x28,0x24,0xFE,0x20,0x00},{0x00,0x00,0x4E,0x92,0x92,0x92,0x62,0x00},{0x00,0x00,0x7C,0x92,0x92,0x92,0x64,0x00},{0x00,0x00,0x02,0xC2,0x32,0x0A,0x06,0x00},{0x00,0x00,0x6C,0x92,0x92,0x92,0x6C,0x00},{0x00,0x00,0x4C,0x92,0x92,0x92,0x7C,0x00}}。voidmain(void>{//intnCount=O。charcKey,cOldKey。unsignedintnScanCode,nKeyCode。unsignedintnSpeedo//Step1.1nitializeSystemControl://PLL,WatchDog,enablePeripheralClocks//ThisexamplefunctionisfoundintheDSP281x_SysCtrl.cfile.InitSysCtrl(>。//Step2.InitalizeGPIO://ThisexamplefunctionisfoundintheDSP281x_Gpio.cfileand//illustrateshowtosettheGPIOtoit'sdefaultstate.//InitGpio(>o//Skippedforthisexample//Step3.ClearallinterruptsandinitializePIEvectortable://DisableCPUinterruptsDINTo//InitializethePIEcontrolregisterstotheirdefaultstate.//ThedefaultstateisallPIEinterruptsdisabledandflags//arecleared.//ThisfunctionisfoundintheDSP281x_PieCtrl.cfile.InitPieCtrl(>。StopCpuTimerO(>。//DisableCPUinterruptsandclearallCPUinterruptflags:IER=0x0000oIFR=0x0000o//InitializethePIEvectortablewithpointerstotheshellInterrupt//ServiceRoutines(ISR>.//Thiswillpopulatetheentiretable,eveniftheinterrupt//isnotusedinthisexample.Thisisusefulfordebugpurposes.//TheshellISRroutinesarefoundinDSP281x_DefaultIsr.c.//ThisfunctionisfoundinDSP281x_PieVect.c.InitPieVectTable(>。//Interruptsthatareusedinthisexamplearere-mappedto//ISRfunctionsfoundwithinthisfile.EALLOW。//ThisisneededtowritetoEALLOWprotectedregistersPieVectTable.TINTO=&cpu_timerO_isr。EDIS。//ThisisneededtodisablewritetoEALLOWprotectedregisters//Step4.InitializealltheDevicePeripherals://ThisfunctionisfoundinDSP281x_lnitPeripherals.c//InitPeripherals(>。//Notrequiredforthisexample/////InitCpuTimers(>。//Forthisexample,onlyinitializetheCpuTimersCpuTimerO.RegsAddr=&CpuTimerORegs。//Initializetimerperiodtomaximum://CpuTimerORegs.PRD.all=music[nCount][0]*450。CpuTimerORegs.PRD.all=0x3000。//Initializepre-scalecountertodivideby1(SYSCLKOUT>:CpuTimer0Regs.TPR.all=0。CpuTimer0Regs.TIM.all=0。CpuTimer0Regs.TPRH.all=0。//Makesuretimerisstopped:CpuTimer0Regs.TCR.bit.TSS=1。CpuTimer0Regs.TCR.bit.SOFT=1。CpuTimer0Regs.TCR.bit.FREE=1。//Reloadallcounterregisterwithperiodvalue:CpuTimer0Regs.TCR.bit.TRB=1。CpuTimer0Regs.TCR.bit.TIE=1。//Resetinterruptcounters:CpuTimer0.lnterruptCount=0。//Step5.Userspecificcode,enableinterrupts://EnableCPUINT1whichisconnectedtoCPU-Timer0:IER|=M_INT1。//EnableTINT0inthePIE:Group1interrupt7PieCtrlRegs.PIEIER1.bit.lNTx7=1。//EnableglobalInterruptsandhigherpriorityreal-timedebugevents:EINT。//EnableGlobalinterruptINTMERTM。//EnableGlobalrealtimeinterruptDBGMCTRGR=0x80。//初始化ICETEK-CTRCTRGR=0x0。CTRGR=0x80。CTRLR=0。//关闭东西方向的交通灯CTRLR=0x40。//关闭南北方向的交通灯CTRLR=0xC0。CTRGR=0x81。uPort8000=CTRCLKEY。Gpio_PortA(>。Gpio_PortB(>。nSpeed=T46uS。uN=60。nCount=nCount1=0。nDir=0。cKey=cOldKey=0。StartCpuTimer0(>。〃启动定时器while(1>{nScanCode=*(int*>0x108001。//读扫描码nScanCode&=0x0ff。//低8位uPort8000=*(int*>0x108002。〃Delay(5>。if(nScanCode!=0>{if(nScanCode==9>break。else{cKey=nScanCode。if(cKey!=0&&cOldKey!=cKey>{cOldKey=cKey。switch(cKey>{case1:uN=10。breakocase2:uN=50obreakocase3:uN=60obreakocase4:uN=70obreakocase5:uN=80obreakocase6:uN=100obreakocase7:uN1=uNouN=60o//降速Delay(128>。GpioDataRegs.GPADAT.bit.GPIOA4=1。〃//CpuTimer0Regs.PRD.all=nSpeed。〃CpuTimer0Regs.PRD.all=182*50。nDir=0。Delay(128>。uN=uN1obreako8:caseuN1=uN。uN=60。//降速Delay(128>。GpioDataRegs.GPADAT.bit.GPI0A4=0。Delay(128>。〃CpuTimerORegs.PRD.all=nSpeed。nDir=1。Delay(128>。uN=uN1。break。}}}//Delay(4>。}StopCpuTimerO(>。CTRGR=0。}interruptvoidcputimerOisr(void>{--CpuTimer0.InterruptCount++。}//Acknowledgethisinterrupttoreceivemoreinterruptsfromgroup1PieCtrlRegs.PIEACK.all=PIEACK_GROUP1CpuTimer0Regs.TCR.bit.TIF=1。CpuTimer0Regs.TCR.bit.TRB=1。GpioDataRegs.GPBSET.bit.GPIOB4=1。。GpioDataRegs.GPBDAT.bit.GPIOB4=(nCount1?1:0。nCount1++。nCount1%=100。}voidDelay(unsignedintnDelay>{intii,jj,kk=0。for(ii=0。ii{for(jj=0。jj<64。jj++>{〃RefreshLEDArray(>。kk++。}}}voidRefreshLEDArray(>{inti。for(i=0。i<8。i++>{CTRGR=ledx[i]。CTRLA=ledbuf[i]。}}voidGpioPortA(void>{-//GPIOTest#2://ConfigureUpper8bitsofPortasinputsandlower8bitsasoutputs//Loopbackbits[7:0]tobits[15:8]//Don'tsetanyinputqualifiervar1=0x0000。//setsGPIOMuxsasI/Osvar2=0x00FF。//setsGPIO15-8DIRasinputs,7-0DIRasoutputsvar3=0x0000。//Don'tsetanyinputqualifierGpio_select(>。test_count=0。Test_status[Test_var]=0x0002。Test_var++。Test_status[Test_var]=0xD0BE。//Setthedefaultvalueofstatus//to"PASSED"GpioDataRegs.GPACLEAR.all=0x00FF。//TestClearasm("RPT#5||NOP">。GpioDataRegs.GPASET.bit.GPIOA4=1。}voidGpioPortB(void>{-//GPIOTest#2://ConfigureUpper8bitsofPortasinputsandlower8bitsasoutputs//Loopbackbits[7:0]tobits[15:8]//Don'tsetanyinputqualifiervar1=0x0000。//setsGPIOMuxsasI/Osvar2=0x00FF。//setsGPIO15-8DIRasinputs,7-0DIRasoutputsvar3=0x0000。//Don'tsetanyinputqualifierGpio_select(>。test_count=0。Test_status[Test_var]=0x0002。Test_var++。Test_status[Test_var]=0xD0BE。//Setthedefaultvalueofstatus//to"PASSED"GpioDataRegs.GPBCLEAR.all=0x00FF。//TestClearasm("RPT#5||NOP">。GpioDataRegs.GPBSET.bit.GPIOB4=1。JvoidGpioselect(void>{-EALLOW。GpioMuxRegs.GPAMUX.all=var1。//ConfigureMUXsasdigitalI/OsorGpioMuxRegs.GPBMUX.all=var1。//peripheralI/OsGpioMuxRegs.GPDMUX.all=var1。GpioMuxRegs.GPFMUX.all=var1。GpioMuxRegs.GPEMUX.all=var1。GpioMuxRegs.GPGMUX.all=var1。GpioMuxRegs.GPADIR.all=var2。//GPIOPORTsasoutputGpioMuxRegs.GPBDIR.all=var2。//GPIODIRselectGPIOsasoutputGpioMuxRegs.GPDDIR.all=var2。GpioMuxRegs.GPEDIR.all=var2。GpioMuxRegs.GPFDIR.all=var2。GpioMuxRegs.GPGDIR.all=var2。GpioMuxRegs.GPAQUAL.all=var3。//SetGPIOinputqualifiervaluesGpioMuxRegs.GPBQUAL.all=var3。GpioMuxRegs.GPDQUAL.all=var3。GpioMuxRegs.GPEQUAL.all=var3。EDIS。}charConvertScanToChar(unsignedcharcScanCode>{charcReturn。cReturn=0。switch(cScanCode>{caseSCANCODE_O:cReturn='0'。break。caseSCANCODE_1:cReturn='1'。break。caseSCANCODE_2:cReturn=2。break。caseSCANCODE_3:cReturn=3。break。caseSCANCODE_4:cReturn='4'。break。caseSCANCODE_5:cReturn='5'。break。caseSCANCODE_6:cReturn='6'。break。caseSCANCODE_7:cReturn='7'。break。caseSCANCODE_8:cReturn=8。break。caseSCANCODE_9:cReturn='9'。break。//caseSCANCODE_F1:caseSCANCODE_Plus:cReturn='+'。break。//caseSCANCODE_F2:caseSCANCODE_Minus:cReturn='-'。breako}returncReturn。}调试过程中所遇到的问题及解决思路和方法。1.调试时电机不运转,复位cpu重新写入程序运行,检查程序,观察是否有存在错误。2•点按键后电机运转没变化,长按按键观察或检查程序是否有问题。实验后的经验教训 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf 。实验前需熟悉实验仪器,了解实验要求和内容,熟悉程序的逻辑关系,再进行实验。在程序创作上,必须保证结构严谨、关键字正确和逻辑准确等,开始的认真是为了之后程序调试能更快更准确。教师评语
本文档为【实验406DSP直流电机控制实验】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
霞光万丈
暂无简介~
格式:doc
大小:261KB
软件:Word
页数:14
分类:高中语文
上传时间:2022-03-27
浏览量:11