系统频率为150e6赫兹,
SysCtrlRegs.HISPCP.all = 0x0001;//高速外设预分频,1是二分频
SysCtrlRegs.LOSPCP.all = 0x0002;//低速外设预分频,2是4分频,3是6分频
从图上可以看到,SCI是低速外设,PWM,QEP是使用系统时钟的外设,ADC是高速外设
现阶段,矢量控制用的是定时器0的中断,即在定时器0中断的中断服务程序中执行:
设,需要满足条件:PWM的三角载波频率为5000hz
那么PWM使用系统时钟,系统时钟频率为150e6hz,所以将PWM.TBPRD值设置为15000,
那么三角载波的频率就是150e6/(15000*2)=1
50e6/30e3=5000hz
接下来对ADC时钟进行计算
ADC使用的是高速外设的时钟,设HISPCP.all = 0x0003;//高速外设预分频,
1是2分频,2是4分频,3是6分频
所以高速外设的时钟为150e6/6=25e6hz
ADC寄存器中,将ADCLKPS设置为2,即AdcRegs.ADCTRL3.bit.ADCCLKPS = 2;
将CPS设置为0,即AdcRegs.ADCTRL1.bit.CPS = 0;
所以此时的ADCCLK频率=高速外设频率/(ADCLKPS*(CPS+1)),
依据上面寄存器的配置,ADCCLK频率=25e6/(4*(0+1))=6.25mhz,
接下来是采样窗口的时间配置,ACQPS,
取ADCTRL[11-8]=3 采样时钟频率=ADCLK/4=1.5625mhz 即1/1.5625m秒对一个引脚进行采样
ADC采样时序确定完成后,矢量控制时,将会对两相电流进行采样,采样完成之后,算出三相电流的模拟量
根据矢量变换,算出isd,isq,然后进行转速采样
转速采样之前,先配置相关寄存器:
然后读取EQep1Regs.QPOSCNT寄存器内的值,即每0.001秒产生的位置计数(一圈是8000个,超过8000个
QPOSCNT寄存器会重0开始计数)
图中QUPRD计数超时后,将会使UTO位置1,置1,则进行rpm转速计算。
读取到计数tmp之后,有rpm=tmp*2*pi*1000*60/(8000*2*pi)=7.5*tmp
进行磁链角度计算时,先要清楚定时器的周期,
首先,我们配置定时器的计数值为30e3,系统频率为150e6,即每0.0002秒进入一次中断,进入中断频率为5000hz
实际中断频率要小于5000hz(需要执行中断服务函数),前面确定了PWM的载波周期为5000hz,这样基本上每一次进
入中断,刷新一次PWM.CPMA的值,就会更改一次IGBT的开关时间,每进入5次中断(UTO置1),会采集转速信
息,计算一次转速(实际上由于中断服务函数执行的时间不确定,rpm计算值与真实值会有差别)
知道进入中断的频率之后,我们就可以在中断服务程序中计算磁链角:
phi=phi-2*PI;
//***每进入一个定时器周期 算一次转差,将每个周期中转差角速度和定时器周期相乘,就是一个周期转差积累的角度 : 0.0002*ws***//
//***算出每周转子角速度积累的角度,将每周转差积累的角度加上每周转子角速度积累的角度就是转子磁链的角度***//
//***1:转子旋转一周为8000个计数脉冲***//
//***2:每个计数脉冲的弧度为2*PI/8000***//
//***3:转速计算是每0.001秒对QPOSCNT进行一次采样将这段时间内增加的计数脉冲给tmp,而定时器周期为0.0002秒***//
//***4:所以将tmpg除以5,即为平均每0.001秒的计数脉冲***//
//***5:所以每个定时器周期转子角速度积累的角度为:tmpg*2*PI/40000***//
磁链角是用来进行矢量变换用的,难点就是在这里,涉及到参数,转子时间常数tr,互感lm
接下来就是PI调节器和SVPWM的计算,