1、DSP应用技术课程设计封皮打印!电子稿填写!A4纸学 院: 哈尔滨理工大学荣成学院居中,字号和此模版一致! 专 业: 班 级: 姓 名: 学 号: 年 月 日实验 有位置传感器无刷电机的开环控制一、实验目的手写版!:二、实验内容手写: 有位置传感器无刷电机的开环控制三、实验用设备仪器及材料手写:四、实验方法及步骤手写:测试过程如下:n 将 P3 和三相无刷电机的 U、V、W 连接;将电机的霍尔传感器输出与 SEED-BLDC的 P4 相连;n P10 与24V 的外接电源相连;n P5 和外接的开关电源相连或者和实验箱上的电源接口相连;n P6 和 DEC2812 的 J17 相连,注意正确连
2、接,勿接反;P9 和 DEC2812 的 J18 相连n 上电观察 D15 和 D16 指示灯是否点亮,否则断电检查系统。n 将 sensor-openloop 目录拷贝到 CCS 集成开发环境下的 myprojects 目录下;n 打开 CCS,在 CCS 中用 ProjectOpen命令,加载 sensor-openloop 目录下的edit.pjt;n 在CCS 中用 FileLoad GEL命令,加载sensor-openloop目录下的F2812.gel;n 在CCS中用FileLoad Program命令,加载sensor-openloop目录下的edit.out;n 在 CCS
3、中用DebugGo Main 命令执行到 C 的 main()函数处,如图 6-1;n 按 F5 运行,电机变以一定的速度旋转起来,通过观察变量 Speed 的值,可以知道此时速度的值;通过观察数组 test的值,可以知道过去一段时间内速度的值,如图 6-2;n 程序运行过程中,灯 D14 闪烁,表示程序在运行;如果灯 D13 点亮,表明有过压现象出现;如果灯 D12 点亮,表明有过流现象出现。五、实验结果分析:手写!包括程序。图等!#include DSP28_Device.h#include motor.h/*/interrupt void t1pint_isr(void);interru
4、pt void t2pint_isr(void);interrupt void cap_isr(void);interrupt void pdpinta_isr(void);void delay(unsigned int m);unsigned int t1prd=117;/定时器1的周期unsigned int t2prd=117;/定时器2的标志unsigned int dir=0;/电机转动方向unsigned int pwm=20;unsigned int dccurent,u,v,w,speedad;/直流母线电流unsigned int dcvoltage;/直流母线电压Uint3
5、2 Sumdcv=0;unsigned int dcvcount=0,Averagedcv=0;/母线电压平均值初始化unsigned int capstastus;/定义cap口的电平Uint32 Time,T2cnt,Speed=0,count=0;unsigned Pole=2;/极对数Uint32 Sum=0,Average=0;unsigned int l=0,nn=0;int t2=0;unsigned int test2000,test12000,test22000;int sss=0;/*/void main(void)/*初始化系统*/InitSysCtrl();/*关中断*
6、/DINT;IER = 0x0000;IFR = 0x0000;/*初始化PIE*/InitPieCtrl();/*初始化PIE矢量表*/InitPieVectTable();/*初始化GPIO*/Gpioinit();/*初始化AD*/InitAdc();/*初始化PWM*/Init_eva_pwm(); /*初始化CAP*/ Capinit();EALLOW; / This is needed to write to EALLOW protected register PieVectTable.CAPINT1=&cap_isr; PieVectTable.CAPINT2=&cap_isr;
7、 PieVectTable.CAPINT3=&cap_isr; PieVectTable.T1PINT=&t1pint_isr; PieVectTable.T2PINT=&t2pint_isr; PieVectTable.PDPINTA=&pdpinta_isr; EDIS; / This is needed to disable write to EALLPieCtrl.PIEIER2.bit.INTx4=1;/T1pint中断 PieCtrl.PIEIER3.bit.INTx1=1;/T2pint中断 PieCtrl.PIEIER3.bit.INTx5=1;/Cap1中断 PieCtrl.
8、PIEIER3.bit.INTx6=1;/Cap2中断 PieCtrl.PIEIER3.bit.INTx7=1;/Cap3中断 PieCtrl.PIEIER1.bit.INTx1=1;/pdpinta中断 /* 设置IER寄存器 */IER |= M_INT1; IER |= M_INT2; / t1pint enable IER |= M_INT3; / capture enable / Enable global Interrupts and higher priority real-time debug events:startmotor();EINT; / Enable Global
9、interrupt INTMERTM;/ Enable Global realtime interrupt DBGM / Step 6. IDLE loop. Just sit and loop forever (optional): while(1) interrupt void t2pint_isr(void) count+; EvaRegs.EVAIFRB.bit.T2PINT=1;/清除中断标志 EvaRegs.EVAIMRB.bit.T2PINT=1;/中断允许 PieCtrl.PIEACK.bit.ACK3=1;/向cpu申请中断 interrupt void cap_isr(vo
10、id) /*以下用来检测传感器的输出电平,用来换向*/ Uint32 kk=t2prd; EALLOW; GpioMuxRegs.GPAMUX.bit.CAP1Q1_GPIOA8=0;/设定cap13为gpio GpioMuxRegs.GPAMUX.bit.CAP2Q2_GPIOA9=0; GpioMuxRegs.GPAMUX.bit.CAP3QI1_GPIOA10=0; GpioMuxRegs.GPADIR.bit.GPIOA8=0;/设定cap13为输入 GpioMuxRegs.GPADIR.bit.GPIOA9=0; GpioMuxRegs.GPADIR.bit.GPIOA10=0; c
11、apstastus=(GpioDataRegs.GPADAT.all&0x0700)8; if(dir=1) switch(capstastus)/ir2136 的hin和lin是反向的 case 1: EvaRegs.ACTR.all=0x7fd;break;/h3 fall case 2: EvaRegs.ACTR.all=0xfd7;break;/h1 fall case 3: EvaRegs.ACTR.all=0x7df;break;/h2 rise case 4: EvaRegs.ACTR.all=0xd7f;break;/h2 fall case 5: EvaRegs.ACTR.a
12、ll=0xf7d;break;/h1 rise case 6: EvaRegs.ACTR.all=0xdf7;break;/h3 rise else switch(capstastus)/ir2136 的hin和lin是反向的 case 5: EvaRegs.ACTR.all=0xfd7;break;/h1 rise case 1: EvaRegs.ACTR.all=0xd7f;break;/h3 fall case 3: EvaRegs.ACTR.all=0xdf7;break;/h2 rise case 2: EvaRegs.ACTR.all=0xf7d;break;/h1 fall ca
13、se 6: EvaRegs.ACTR.all=0x7fd;break;/h3 rise case 4: EvaRegs.ACTR.all=0x7df;break;/h2 fall /*以下用来计算转速*/ T2cnt=EvaRegs.T2CNT;/读取定时器2的值 Time=kk*count+ T2cnt;/获得运转1相所需时间 Sum+=Time; l+; if(l=12)/每转12/6/pole计算一下转速 Average=Sum/12; Speed=kk*20000*60/(Average*6*Pole);/计算转速 Sum=0; l=0; testnn=Speed;/测试用,存储速度值
14、 nn+; if(nn=2000) nn=0; count=0; EvaRegs.T2CON.all = 0x1400;/关闭定时器2 EvaRegs.T2CNT = 0x0000; EvaRegs.T2CON.all = 0x1440;/启动定时器2 /*/ GpioMuxRegs.GPAMUX.bit.CAP1Q1_GPIOA8=1;/重新设定cap13为gpio GpioMuxRegs.GPAMUX.bit.CAP2Q2_GPIOA9=1; GpioMuxRegs.GPAMUX.bit.CAP3QI1_GPIOA10=1; EvaRegs.EVAIFRC.all = 7 ; / 清捕捉中
15、断 EvaRegs.CAPFIFO.all = 0x01500; / 清空捕捉堆栈 PieCtrl.PIEACK.bit.ACK3=1;/cap1中断向cpu申请中断interrupt void t1pint_isr(void) dcvoltage=(AdcRegs.RESULT0)4; dccurent=(AdcRegs.RESULT3)4; w=(AdcRegs.RESULT1)4; u=(AdcRegs.RESULT2)4; speedad=(AdcRegs.RESULT4)4; v=(AdcRegs.RESULT5)4; /母线电压检测,过压保护, /注:电机在启动或者转动方向改变时,
16、可能母线电压有脉动 /采用多次求平均值 Sumdcv+=dcvoltage; dcvcount+; if(dcvcount=500) Averagedcv=Sumdcv/500;/求平均母线电压 Sumdcv=0; dcvcount=0; if(Averagedcv=3000) stopmotor(); GpioDataRegs.GPADAT.bit.GPIOA11 =1;/过压显示 /*/ AdcRegs.ADC_ST_FLAG.bit.INT_SEQ1_CLR=1; /清除状态字 AdcRegs.ADCTRL2.bit.RST_SEQ1=1;/复位seq1 EvaRegs.EVAIFRA.bit.T1PINT=1;/清除中断标志 EvaRegs.EVAIMRA.bit.T1PINT=1;/中断允许 PieCtrl.PIEACK.bit.ACK2=1;/向cpu申请中断interrupt void pdpinta_isr(void) EvaRegs.EVAIFRA.bit.PDPINTA=1;/清除PDPINTA中断标志 PieCtrl.PIEACK.bit.ACK1=1;/向cpu申请中断 stopmotor(); GpioDataRegs.GPADAT.bit.GPIOA12 =1;/故障显示 EvaRegs.COMCONA.bit.FCOMPOE=1;/重新使能比较输出