实验406DSP直流电机控制实验_第1页
实验406DSP直流电机控制实验_第2页
实验406DSP直流电机控制实验_第3页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

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

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

4、通,直流电动机电枢 绕组两端有电压Us。t1秒后,栅极输入变为低电平,开关管截止,电动机电枢两端电压为0。t2秒后,栅极输入重新变为高电平,开关管的动作重复前面的过程。这样,对应着输入的电平 高低,直流电动机电枢绕组两端的电压波形如图中所示。电动机的电枢绕组两端的电压平均值Uo为S SSO U UTtt tt UU = = a+=11 21 0式中a为占空比,a =t1/T占空比a表示了在一个周期 T里,开关管导通的时间和周期的比值。a的变化范围为0< a < 1。由此式可知,当电源电压US不变的情况下,电枢的端电压的平 均值Uo取决于占空比a的大小,改变a值就可以改变端电压的平均

5、值,从而达到调速的目的,这就是PWM调速原理。PWM调速方法:在PWM调速时,占空比a是一个重要参数。以下 3种方法都可以改变 占空比的值:(1)定宽调频法:这种方法是保持t1不变,只改变t2,这样使周期T(或频率) 也随之改变。(2)调宽调频法:这种方法是保持t2不变,只改变t1,这样使周期T(或频率) 也随之改变。(3)定频调宽法:这种方法是使周期 T(或频率)保持不变,而改变t1和t2。前两种方法由于在调速时改变了控制脉冲的周期(或频率),当控制脉冲的频率和系统的固有频率接近时,将会引起震荡,因此这两种方法用得很少。目前,在直 流电动机的控制中,主要使用定频调宽法UsO 图中PWM 输入

6、对应ICETEK - F2812-A 评估板上P4外扩插座第26引 脚的PWM11信号,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路经非

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

8、波从I/O验内容和口输出到直流电动机,从而改变其转速,通过引脚上给出高及调试:实验原理电平或低电平和逻辑电路来控制直流电机的方向。进行分析, 理出完成 实验的设 计思路。(2)列出l.pwm初始化设计所需2电机使能的特殊环3.键盘实时监测节4.中断调用(3)画出 设计流程 图。(4)调试 程序#inelude "DSP281x_Device.h"/ DSP281x HeaderfileIn elude File#include "DSP281x_Examples.h"/ DSP281x ExamplesIn clude File/ Prototype s

9、tateme nts for fun ctio ns found withi n this file.in terrupt void cpu_timerO_isr(void);void Delay (un sig ned int n Time);void Gpio_select(void);void error(i nt);void program_stop();void Gpio_PortA(void);void Gpio_PortB(void);void Gpio_PortF(void);void Gpio_PortDEG(void);char Con vertSca nToChar( u

10、n sig ned char cSca nCode); void RefreshLEDArray();/ 刷新显示void SetLEDArray(int nNumber);/ 修改显示内容#defi ne T46uS 0x0d40#defi ne SCANCODE_0 0x70#defi ne SCANCODE_1 0x69#define SCANCODE_2 0x72#defi ne SCANCODE_3 0x7A#define SCANCODE_4 0x6B#defi ne SCANCODE_5 0x73#define SCANCODE_6 0x74#defi ne SCANCODE_7

11、 0x6C#defi ne SCANCODE_8 0x75#defi ne SCANCODE_9 0x7D#defi ne SCANCODE_Del 0x49#defi ne SCANCODE_E nter 0x5A#defi ne SCANCODE_Plus 0x79#define SCANCODE_Mi nus 0x7B#defi ne SCANCODE_Mult 0x7C#defi ne SCANCODE_Divid 0x4A#defi ne SCANCODE_Num 0x77#defi ne CTRGR *(i nt *)0x108000#defi ne CTRLCDCMDR *(i

12、nt *)0x108001#define CTRKEY *(i nt *)0x108001#defi ne CTRLCDCR *(i nt *)0x108002#defi ne CTRCLKEY *(i nt *)0x108002#defi ne CTRLCDLCR*(i nt *)0x108003#defi ne CTRLCDRCR *(i nt *)0x108004#defi ne CTRLA *(i nt *)0x108005#defi ne CTRLR *(i nt *)0x108007Ui nt16 var1 = 0;Uint16 var2 = 0;Uint16 var3 = 0;U

13、int16 test_count = 0;Ui nt16 Test_flag = 0;Ui nt16 Test_var = 0;Uin t16 Test_status32;Ui nt16 PASS_flag = 0;un sig ned int uWork;int 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,

14、0x00,0x7C,0x82,0x82,0x82,0x7C,0x00,0x00,0x00,0x00,0x84,0xFE,0x80,0x00,0x00,10x00,0x00,0x84,0xC2,0xA2,0x92,0x8C,0x00,20x00,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,0x3

15、2,0x0A,0x06,0x00,0x00,0x00,0x6C,0x92,0x92,0x92,0x6C,0x00,0x00,0x00,0x4C,0x92,0x92,0x92,0x7C,0x00;void mai n(void)int nCou nt=O;char cKey,cOldKey;un sig ned int n Sca nCode ,n KeyCode;un sig ned int n Speed;/ Step 1.1 nitialize System Control:/ PLL, WatchDog, en able Peripheral Clocks/ This example f

16、unction is found in the DSP281x_SysCtrl.c file.In itSysCtrl();/ Step 2. Initalize GPIO:/ This example function is found in the DSP281x_Gpio.c fileand/ illustrates how to set the GPIO to it's default state./ I nitGpio(); / Skipped for this example/ Step 3. Clear all interrupts and initialize PIE

17、vector table:/ Disable CPU in terruptsDINT;/In itialize the PIE con trol registers to their default state./ The default state is all PIE in terrupts disabled and flags/ are cleared./ This function is found in the DSP281x_PieCtrl.c file.In itPieCtrl();StopCpuTimerO();/ Disable CPU interrupts and clea

18、r all CPU interrupt flags:IER = 0x0000;IFR = 0x0000;/ Initialize the PIE vector table with pointers to the shellIn terrupt/ Service Routi nes (ISR)./ This will populate the entire table, even if the interrupt/ is not used in this example. This is useful for debugpurposes./ The shell ISR routines are

19、 found in DSP281x_DefaultIsr.c./ This function is found in DSP281x PieVect.c.In itPieVectTable();/In terrupts that are used in this example are re-mapped to/ ISR functions found within this file.EALLOW;/ This is needed to write to EALLOWprotected registersPieVectTable.TINTO = & cpu_timerO_isr;ED

20、IS;/ This is needed to disable write to EALLOWprotected registers/ Step 4. Initialize all the Device Peripherals:/ This function is found in DSP281x_lnitPeripherals.c/ I nitPeripherals(); / Not required for this example/InitCpuTimers();/ For this example, only initializethe Cpu TimersCpuTimerO.RegsA

21、ddr = & CpuTimerORegs;/In itialize timer period to maximum:/CpuTimerORegs.PRD.all= music nCou nt0*450;CpuTimerORegs.PRD.all = 0x3000;/In itializepre-scale coun ter to divide by 1(SYSCLKOUT):CpuTimer0Regs.TPR.all= 0;CpuTimer0Regs.TIM.all= 0;CpuTimer0Regs.TPRH.all = 0;/ Make sure timer is stopped:

22、CpuTimer0Regs.TCR.bit.TSS = 1;CpuTimer0Regs.TCR.bit.SOFT = 1;CpuTimer0Regs.TCR.bit.FREE = 1;/ Reload all coun ter register with period value: CpuTimer0Regs.TCR.bit.TRB = 1; CpuTimer0Regs.TCR.bit.TIE = 1;/ Reset in terrupt coun ters:CpuTimer 0.ln terruptCo unt = 0;/ Step 5. User specific code, en abl

23、e in terrupts:/ En able CPU INT1 which is conn ected to CPU-Timer 0:IER |= MN T1;/ En able TINT0 in the PIE: Group 1 in terrupt 7PieCtrlRegs.PIEIER1.bit.lNTx7 = 1;/ Enable global Interrupts and higher priority real-time debug eve nts:EINT;/ En able Global in terrupt INTMERTM;/ En able Global realtim

24、e in terrupt DBGMCTRGR=0x80;/ 初始化 ICETEK-CTRCTRGR=0x0;CTRGR=0x80;CTRLR=0;/关闭东西方向的交通灯CTRLR=0x40; /关闭南北方向的交通灯 CTRLR=OxCO;CTRGR=0x81; uPort8000=CTRCLKEY;Gpio_PortA(); Gpio_PortB();n Speed=T46uS; uN=60; nCou nt=n Cou nt1=O; nDir=0; cKey=cOldKey=0; StartCpuTimer0(); / 启动定时器while (1)nScanCode=*(int *)0x10

25、8001;/ 读扫描码nScanCode&=0x0ff;/ 低 8 位uPort8000=*(i nt *)0x108002;/Delay(5);if ( nSca nCode!=0 )if ( n Sca nCode=9 )break;elsecKey=n Sca nCode;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;

26、 case 5: uN=80; break; case 6: uN=100; break; case 7:uN1=uN; uN=60;/ 降速Delay(128);GpioDataRegs.GPADAT.bit.GPIOA4 = 1;/CpuTimer0Regs.PRD.all = nSpeed;CpuTimer0Regs.PRD.all = 182*50;n Dir=O; Delay(128); uN=uN1; break;case 8:uN1=uN;uN=60;/ 降速Delay(128);GpioDataRegs.GPADA T.bit.GPI0A4 = 0;Delay(128);Cpu

27、TimerORegs.PRD.all=nSpeed;n Dir=1;Delay(128); uN=uN1; break;/Delay(4);StopCpuTimerO();CTRGR=0;in terrupt void cpu_timerO_isr(void)CpuTimer O.ln terruptCo un t+;/ Ack no wledge this in terrupt to receive more in terrupts from group 1PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;CpuTimer0Regs.TCR.bit.TIF = 1

28、;CpuTimerORegs.TCR.bit.TRB = 1;GpioDataRegs.GPBSET.bit.GPIOB4=1;GpioDataRegs.GPBDAT.bit.GPIOB4=( n Cou nt1<uN )?1:0; n Cou nt1+; nCou nt1%=1OO;void Delay (un sig ned int n Delay)int ii,jj,kk=O;for ( ii=0;ii< nDelay;ii+ )for ( jj=0;jj<64;jj+ )RefreshLEDArray(); kk+;void RefreshLEDArray()int

29、i;for ( i=0;i<8;i+ )CTRGR=ledxi;CTRLA=ledbufi;void Gpio_PortA(void)/ GPIO Test #2:/ Con figure Upper 8 bits of Port as in puts and lower 8 bits as outputs/ Loop back bits 7:0 to bits 15:8/ Don't set any in put qualifiervar1= 0x0000;/ sets GPIO Muxs as I/Osvar2= 0x00FF;/ sets GPIO 15-8 DIR as

30、in puts, 7-0DIR as outputsvar3= 0x0000;/ Don't set any in put qualifierGpio_select();test_co unt = 0;Test_statusTest_var = 0x0002;Test_var+;Test_statusTest_var = 0xD0BE;/ Set the defaultvalue of status/to"PASSED"GpioDataRegs.GPACLEAR.all = 0x00FF;/ Test Clearasm(" RPT #5 |NOP"

31、;);GpioDataRegs.GPASET.bit.GPIOA4=1;void Gpio_PortB(void)/ GPIO Test #2:/ Con figure Upper 8 bits of Port as in puts and lower 8 bits as outputs/ Loop back bits 7:0 to bits 15:8/ Don't set any in put qualifiervar1= 0x0000;/ sets GPIO Muxs as I/Osvar2= 0x00FF;/ sets GPIO 15-8 DIR as in puts, 7-0D

32、IR as outputsvar3= 0x0000;/ Don't set any in put qualifierGpio_select();test_co unt = 0;Test_statusTest_var = 0x0002;Test_var+;Test_statusTest_var = 0xD0BE;/ Set the defaultvalue of status/to"PASSED"GpioDataRegs.GPBCLEAR.all = 0x00FF;/ Test Clearasm(" RPT #5 |NOP");GpioDataRe

33、gs.GPBSET.bit.GPIOB4=1;void Gpio_select(void)EALLOW;GpioMuxRegs.GPAMUX.all=var1;/ Configure MUXsas digital I/Os orGpioMuxRegs.GPBMUX.all=var1;/ peripheral I/OsGpioMuxRegs.GPDMUX.all=var1;GpioMuxRegs.GPFMUX.all=var1;GpioMuxRegs.GPEMUX.all=var1;GpioMuxRegs.GPGMUX.all=var1;GpioMuxRegs.GPADIR.all=var2;/ GPIO PORTs asoutputGpioMuxRegs.GPBDIR.all=var2;/

温馨提示

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

评论

0/150

提交评论