实验DSP直流电机控制实验.pdf

上传人:l*** 文档编号:73577640 上传时间:2023-02-19 格式:PDF 页数:14 大小:484.29KB
返回 下载 相关 举报
实验DSP直流电机控制实验.pdf_第1页
第1页 / 共14页
实验DSP直流电机控制实验.pdf_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《实验DSP直流电机控制实验.pdf》由会员分享,可在线阅读,更多相关《实验DSP直流电机控制实验.pdf(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、姓名吴镌 樊想 孙璐 陈玉枫学号0816070110081607020208160702010816070203专业实验名称实验内容实验目的和要求实验设备实验原埋自动化时间2011/12/7主成绩直流电机控制实验通过C语言编程控制控制I/O管脚产生不向占空比的PWM彳百号,从而控 制直流电机的转速1.学习用C语言编制中断程序,控制F2812 DSP通用I/O管脚产生不同 占空比的PWM信号。2.学习F2812DSP的通用I/O管脚的控制方法。3.学习直流电机的控制原理和控制方法。计算机,ICETEK-F2812-EDU实验箱(或ICETEK仿真器+ICETEK-F2812-A系统板+相关连线及

2、电源)。1.TMS320F2812DSP的McBSP弓|脚通过设置PWM11和PWM5的工作方式和状态,可以实现将它们当成通 用I/O引脚使用。2.直流电机控制直流电动机是最早出现的电动机,也是最早能实现调速的电动机。近年来,直流电动机的结构和控制方式都发生了很大的变化。领域,以及新型的电力电子功率元器件的不断出现,随着计算机进入控制使采用全控型的开关功率兀件进行脉范调制(Puls Width Modulation,简称PWM)控制方式已成 为绝对主流。PWM调压调速原理 直流电动机转速n的表送式为:-Kn U IR其中,U为电枢端电压;I为电枢电流;R为电枢电路总电阻;为每极 磁通量;K为电

3、动机结构参数。所以直流电动机的转速控制方法可分为两 类:对励磁磁通进行控制的励磁控制法和对电枢电压进行控制的电枢控制 法。其中励磁控制法在低速时受磁极饱和的限制,在高速时受换向火花和换向器结构强度的限制,并且励磁线圈电感较大,动态响应较差,所以这 种控制方法用得很少。现在,大多数应用场合都使用电枢控制法。绝大多 数直流电机采用开关驱动方式。开关驱动方式是使半导体功率器件工作在 开关状态,通过脉宽调制PWM来控制电动机电枢电压,实现调速。上图是利用开关管对直流电动机进行出电压波形。图中,PWM调速控制的原理图和输入输当开关管MOSFET的栅极输入高电平时,开关管导通,直流电动机电枢绕组两端有电压

4、Us。t1秒后,栅极输入变为低电平,开关管截止,电动机电枢两端电压为t2秒后,栅极输入重0。新变为高电平,开关管的动作重复前面的过程。这样,对应着输入的电平高低,直流电动机电枢绕组两端的电压波形如图中所示。Uo为S SSO电动机的电枢绕组两端的电压平均值U UTtt tt U+=i1 2i0式中a为占空比,a=t1/T占空比a表示了在一个周期T里,开关管导通的时间与周期的比值。a的变化范围为0WaW 1。由此式可知,当电源电压Us不变的情况下,电枢的端电压的平 均值U0取决于占空比a的大小,改变a值就可以改变端电压的平均值,的,这就是PWM调速原理。从而达到调速的目PWM调速方法:在PWM调速

5、时,占空比”是一个重要参数。以下占空比的值:3种方法都可以改变(1)定宽调频法:这种方法是保持t1不变,只改变t2,这样使周期T(或频率)也随之改变。(2)调宽调频法:这种方法是保持t2不变,只改变t1,这样使周期T(或频率)也随之改变。(3)定频调宽法:这种方法是使周期T(或频率)保持不变,而改变t1和t2。前两种方法由于在调速时改变了控制脉冲的周期(或频率),当控制脉冲的 频率与系统的固有频率接近时,将会引起震荡,因此这两种方法用得很少。目前,在直流电动机的控制中,主要使用定频调宽法UsO-本 本土 2图中PWM输入对应ICETEK-F2812-A评估板上P4外扩插座第26引 脚的PWM1

6、1信号,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输出

7、的另一路与开关管V2的栅极相连,其低电平信号也使V2截止。同样,当电动机要求反转时,PWM5给出低电平信号,经过2个与门和1个非门组成的逻辑电路后,使开关管V3受PWM彳百号控制,V2导通,VI、V4全部 截止。4.程序编制程序中采用定时器中断产生固定频率的前占空比判断应输出波形的高低电平。PWM波,在每个中断中根据当主程序用轮询方式读入键盘输入,得到转速和方向控制命令。在改变电机方向时为减少电压和电流的波动米用先减速再反转的控制顺 序。实验设计及调试:(1)对实 验通过C语言编程改变pwm波的占空比,将此pwm波从I/O口输出到直流电动机,从而改变其转速,通过引脚上给出高 电平或低电平和逻辑

8、电路来控制直流电机的方向。内容和 实验原理 进行分析,理出完成 实验的设计思路。(2)列出 设l.pwm初始化计所需 的特殊环 节.2.电机使能3.键盘实时监测4.中断调用(3)画出 设计流程 图。(4)调试程序#include DSP281xDevice.hInclude File/DSP281x Headerfile#include DSP281x_Examples.h/DSP281x Examples Include File/Prototype statements for functions found within this file.interrupt void cpu_time

9、r0_isr(void);void Delay(unsigned int nTime);void Gpio_select(void);void error(int);void program_stop();void Gpio_PortA(void);void Gpio_PortB(void);void Gpio_PortF(void);void Gpio_PortDEG(void);char ConvertScanToChar(unsigned char cScanCode);void RefreshLEDArray();void SetLEDArray(int nNumber);/刷新显示/

10、修改显示内容#define T46uS 0 x0d40#define SCANCODE_0 0 x70#define SCANCODE_1 0 x69#define SCANCODE_2 0 x72#define SCANCODE_3 0 x7A#define SCANCODE_4 0 x6B#define SCANCODE_5 0 x73#define SCANCODE_6 0 x74#define SCANCODE_7 0 x6C#define SCANCODE_8 0 x75#define SCANCODE_9 0 x7D#define SCANCODE_Del 0 x49#define

11、 SCANCODE_Enter 0 x5A#define SCANCODE_Plus 0 x79#define SCANCODE_Minus 0 x7B#define SCANCODE_Mult 0 x7C#define SCANCODE_Divid 0 x4A#define SCANCODE_Num 0 x77#define CTRGR*(int*)0 x108000#define CTRLCDCMDR*(int*)0 x108001#define CTRKEY*(int*)0 x108001#define CTRLCDCR*(int*)0 x108002#define CTRCLKEY*(

12、int*)0 x108002#define CTRLCDLCR*(int*)0 x108003#define CTRLCDRCR*(int*)0 x108004#define CTRLA*(int*)0 x108005#define CTRLR*(int*)0 x108007Uint16 var1=0;Uint16 var2=0;Uint16 var3=0;Uint16 test_count=0;Uint16 Test_flag=0;Uint16 Test_var=0;Uint16 Test_status32;Uint16 PASS_flag=0;unsigned int uWork;int

13、jishu=0;unsigned int uWork,nCount=0,uN,uN1,nCount1,nDir;unsigned int uPort8000;unsigned int nScreenBuffer1024;unsigned char ledbuf8,ledx8;unsigned char ledkey108=0X00,0X00,0X7C,0X82,0X82,0X82,0X7C,0X00,0X00,0X00,0X00,0X84,0XFE,0X80,0X00,0X00,0X00,0X00,0X84,0XC2,0XA2,0X92,0X8C,0X00,0X00,0X00,0X44,0X9

14、2,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;void main(void)/int nCount=0;char cKey

15、,cOldKey;unsigned int nScanCode,nKeyCode;unsigned int nSpeed;/1/2/Step 1.Initialize System Control:/PLL,WatchDog,enable Peripheral Clocks/This example function is found in the DSP281x_SysCtrl.c file.InitSysCtrl();/Step 2.Initalize GPIO:/This example function is found in the DSP281x_Gpio.c file and/i

16、llustrates how to set the GPIO to its default state.InitGpio();/Skipped for this example/Step 3.Clear all interrupts and initialize PIE vector table:/Disable CPU interruptsDINT;/Initialize the PIE control registers to their default state./The default state is all PIE interrupts disabled and flags/ar

17、e cleared./This function is found in the DSP281x_PieCtrl.c file.InitPieCtrl();StopCpuTimer0();/Disable CPU interrupts and clear all CPU interrupt flags:IER=0 x0000;IFR=0 x0000;/Initialize the PIE vector table with pointers to the shellInterrupt/Service Routines(ISR)./This will populate the entire ta

18、ble,even if the interrupt/is not used in this example.This is useful for debug purposes./The shell ISR routines are found in DSP281x_DefaultIsr.c./This function is found in DSP281x_PieVect.c.InitPieVectTable();/Interrupts that are used in this example are re-mapped to/ISR functions found within this

19、 file.EALLOW;/This is needed to write to EALLOW protected registersPieVectTable.TINT0=&cpu_timer0_isr;EDIS;/This is needed to disable write to EALLOWprotected registers/Step 4.Initialize all the Device Peripherals:/This function is found in DSP281x_InitPeripherals.c InitPeripherals();Not required fo

20、r this example/InitCpuTimers();/For this example,only initializethe Cpu TimersCpuTimer0.RegsAddr=&CpuTimer0Regs;/Initialize timer period to maximum:/CpuTimer0Regs.PRD.all=musicnCount0*450;CpuTimer0Regs.PRD.all=0 x3000;/Initialize pre-scale counter to divide by 1(SYSCLKOUT):CpuTimer0Regs.TPR.allCpuTi

21、mer0Regs.TIM.all=0;=0;CpuTimer0Regs.TPRH.all=0;/Make sure timer is stopped:CpuTimer0Regs.TCR.bit.TSS=1;CpuTimer0Regs.TCR.bit.SOFT=1;CpuTimer0Regs.TCR.bit.FREE=1;/Reload all counter register with period value:CpuTimer0Regs.TCR.bit.TRB=1;CpuTimer0Regs.TCR.bit.TIE=1;/Reset interrupt counters:CpuTimer0.

22、InterruptCount=0;/Step 5.User specific code,enable interrupts:/Enable CPU INT1 which is connected to CPU-Timer 0:IER|=M_INT1;/Enable TINT0 in the PIE:Group 1 interrupt 7PieCtrlRegs.PIEIER1.bit.INTx7=1;/Enable global Interrupts and higher priority real-time debugevents:EINT;/Enable Global interrupt I

23、NTMERTM;/Enable Global realtime interrupt DBGMCTRGR=0 x80;CTRGR=0 x0;CTRGR=0 x80;CTRLR=0;/初始化ICETEK-CTR/关闭东西方向的交通灯CTRLR=0 x40;/关闭南北方向的交通灯CTRLR=0 xC0;CTRGR=0 x81;uPort8000=CTRCLKEY;Gpio_PortA();Gpio_PortB();nSpeed=T46uS;uN=60;nCount=nCount1=0;nDir=0;cKey=cOldKey=0;StartCpuTimer0();/启动定时器while(1)nScan

24、Code=*(int*)0 x108001;/读扫描码nScanCode&=0 x0ff;/低8位uPort8000=*(int*)0 x108002;/Delay(5);if(nScanCode!=0)if(nScanCode=9)break;elsecKey=nScanCode;if(cKey!=0&cOldKey!=cKey)cOldKey=cKey;switch(cKey)case 1:uN=10;break;case 2:uN=50;break;case 3:uN=60;break;case 4:uN=70;break;case 5:uN=80;break;case 6:uN=100

25、;break;case 7:uN1=uN;uN=60;Delay(128);/降速GpioDataRegs.GPADAT.bit.GPIOA4=1;CpuTimer0Regs.PRD.all=nSpeed;/CpuTimer0Regs.PRD.all=182*50;nDir=0;Delay(128);uN=uN1;break;case 8:uN1=uN;uN=60;Delay(128);/降速GpioDataRegs.GPADAT.bit.GPIOA4=0;Delay(128);CpuTimer0Regs.PRD.all=nSpeed;nDir=1;Delay(128);uN=uN1;brea

26、k;/Delay(4);StopCpuTimer0();CTRGR=0;interrupt void cpu_timer0_isr(void)CpuTimer0.InterruptCount+;/Acknowledge this interrupt to receive more interrupts fromgroup 1PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;CpuTimer0Regs.TCR.bit.TIF=1;CpuTimer0Regs.TCR.bit.TRB=1;GpioDataRegs.GPBSET.bit.GPIOB4=1;GpioDataReg

27、s.GPBDAT.bit.GPIOB4=(nCount1uN)?1:0;nCount1+;nCount1%=100;void Delay(unsigned int nDelay)int ii,jj,kk=0;for(ii=0;iinDelay;ii+)for(jj=0;jj64;jj+)RefreshLEDArray();kk+;void RefreshLEDArray()int i;for(i=0;i8;i+)CTRGR=ledxi;CTRLA=ledbufi;void Gpio_PortA(void)/GPIO Test#2:/Configure Upper 8 bits of Port

28、as inputs and lower 8 bits asoutputs/Loop back bits 7:0 to bits 15:8/Dont set any input qualifiervar1=0 x0000;var2=0 x00FF;DIR as outputsvar3=0 x0000;/sets GPIO Muxs as I/Os/sets GPIO 15-8 DIR as inputs,7-0/Dont set any input qualifierGpio_select();test_count=0;Test_statusTest_var=0 x0002;Test_var+;

29、Test_statusTest_var=0 xD0BE;value of status/Set the default/PASSEDGpioDataRegs.GPACLEAR.all=0 x00FF;asm(RPT#5|NOP);GpioDataRegs.GPASET.bit.GPIOA4=1;/Test Cleartovoid Gpio_PortB(void)/GPIO Test#2:/Configure Upper 8 bits of Port as inputs and lower 8 bits asoutputs/Loop back bits 7:0 to bits 15:8/Dont

30、 set any inputqualifiervar1=0 x0000;var2=0 x00FF;DIR as outputsvar3=0 x0000;/sets GPIO Muxs as I/Os/sets GPIO 15-8 DIR as inputs,7-0/Dont set any input qualifierGpio_select();test_count=0;Test_statusTest_var=0 x0002;Test_var+;Test_statusTest_var=0 xD0BE;value of status/Set the default/toPASSEDGpioDa

31、taRegs.GPBCLEAR.all=0 x00FF;asm(RPT#5|NOP);GpioDataRegs.GPBSET.bit.GPIOB4=1;/Test Clearvoid Gpio_select(void)EALLOW;GpioMuxRegs.GPAMUX.all=va1as digital I/Os orGpioMuxRegs.GPBMUX.all=var1;GpioMuxRegs.GPDMUX.all=var1;GpioMuxRegs.GPFMUX.all=var1;GpioMuxRegs.GPEMUX.all=var1;GpioMuxRegs.GPGMUX.all=var1;

32、/Configure MUXs/peripheral I/OsGpioMuxRegs.GPADIR.all=var2;outputGpioMuxRegs.GPBDIR.all=var2;GPIOs as outputGpioMuxRegs.GPDDIR.all=var2;GpioMuxRegs.GPEDIR.all=var2;GpioMuxRegs.GPFDIR.all=var2;GpioMuxRegs.GPGDIR.all=var2;/GPIO PORTs as/GPIO DIR selectGpioMuxRegs.GPAQUAL.all=var3;qualifier valuesGpioM

33、uxRegs.GPBQUAL.all=var3;GpioMuxRegs.GPDQUAL.all=var3;GpioMuxRegs.GPEQUAL.all=var3;/Set GPIO inputEDIS;char ConvertScanToChar(unsigned char cScanCode)char cReturn;cReturn=0;switch(cScanCode)case SCANCODE_0:cReturn=0;break;case SCANCODE_1:cReturn=1;break;case SCANCODE_2:cReturn=2;break;case SCANCODE_3

34、:cReturn=3;break;case SCANCODE_4:cReturn=4;break;case SCANCODE_5:cReturn=5;break;case SCANCODE_6:cReturn=6;break;case SCANCODE_7:cReturn=7;break;case SCANCODE_8:cReturn=8;break;case SCANCODE 9:cReturn=9;break;/case SCANCODE_F1:case SCANCODE_Plus:cReturn=+;break;/case SCANCODE_F2:case SCANCODE_Minus:cReturn=-;break;return cReturn;1.调试时电机不运转,复位cpu重新写入程序运行,检查程序,观察是 否有存在错调 试 过 程中 所 遇 到的 问 题 及解 决 思 路和方法。误。2.点按键后电机运转没变化,长按按键观察或检查程序是否有问题。实验前需熟悉实验仪器,了解实验要求和内容,熟悉程序的逻辑关 系,再进行试验。在程序创作上,必须保证结构严谨、关键字正确和逻辑 准确等,开始的认实 验 后 的真是为了之后程序调试能更快更准确。经 验 教 训总结。教师评语

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁