




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include DSP28_Device.h#include motor.h/*/interrupt void t1pint_isr(void);interrupt 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;/直流母线电压Uint32 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();/*关中断*/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; 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.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 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(void) /*以下用来检测传感器的输出电平,用来换向*/ 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; capstastus=(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.all=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 case 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;/测试用,存储速度值 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 ; / 清捕捉中断 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; /母线电压检测,过压保护, /注:电机在启动或者转动方向改变时,可能母线电压有脉动 /采用多次求平均值 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申请中断interr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论