三相400Hz中频静止电源的研究与设计(软件) - 图文 下载本文

毕业设计(论文)

其中,n为周期寄存器的时间常数,Tp为计时器时基周期,k在连续增/减计数模式时取2。在连续增/减计数模式下,计数器的值从“0”开始计数,到达周期值时再往下计数。在这期间,三个全比较寄存器的值与计数器的值进行比较,在第一次相同时(增计数),对应的PWM输出脚(PWM1,2、PWM3,4、PWM5,6)的输出极性发生变化;第二次相同时(减计数),对应的PWM输出脚(PWM1,2、PWM3,4、PWM5,6)的输出极性再次发生变化,这样就实现了PWM输出。DSP的这些比较,全部由硬件实现,所以只要每个开关周期更新全比较寄存器的值,就可以实现PWM控制。图中给出了采用DSP的全比较功能产生六路PWM的示意图。

定时器T1比较值CMP1全比较比较值CMP2PWM1PWM2PWM3PWM4PWM5PWM6比较值CMP3

图4-2-1 DSP中全比较功能框图

23

毕业设计(论文)

CMP1值CMP2值T1(x)1CMP3值计数器值PWM1PWM2PWM3CMP(x)0.501PWM4PWM(x)0.50PWM5PWM6

图4-2-2 SPWM波的产生

4.3 初始化

在TMS320F2812正常工作前,必须对它进行初始化设置。初始化设置包 括系统配置寄存器的初始化和事件管理器的初始化两部分,下面将分别予以 介绍。

4.3.1 系统时钟和外设时钟

F2812最大时钟频率150MHz,由于采用的外部晶振为30MHz,所以要经过锁相环PLL进行5倍频;对系统时钟进行2分频即75MHz作为外设高速预定标时钟 ;然后使能用到的外设时钟,没有用到的外设不使能时钟以降低功耗。

void InitSysCtrl(void) { Uint16 i; EALLOW;

SysCtrlRegs.WDCR= 0x0068;//禁止看门狗模块

24

毕业设计(论文)

SysCtrlRegs.PLLCR = 0xA;//外部晶振30MHz经锁相环PLL 5倍频系统时钟 为150MHz

for(i= 0; i< 5000; i++){} //等待PLL完成锁相

SysCtrlRegs.HISPCP.all = 0x0001; //高速时钟hscplk=150m/2*n=75m SysCtrlRegs.LOSPCP.all = 0x0002;//低速外设时钟为37.5m

SysCtrlRegs.PCLKCR.bit.EVAENCLK=1;//使能EVA外设中的高速时钟 SysCtrlRegs.PCLKCR.bit.ADCENCLK=1;//使能ADC外设中的高速时钟

}

4.3.2 通用IO设置

DSP芯片提供了多个通用输入/输出端口(GPIO)很多端口引脚是复用引脚,由复用功能选择寄存器GPxMUX选择具体功能,可以将引脚设定为片内外设的输入/输出引脚,也可以设定为数字量输入/输出引脚。根据本系统的设计,需要用到事件管理模块EVA输出pwm波,对应的输出引脚为GPIOA0~GPIOA7,将这几个引脚设置为外设功能引脚;还用到一个数字输出口GPIOB0用来输出保护指示信号。

void InitGpio(void) {

EALLOW;

GpioMuxRegs.GPAMUX.all=0x00FF; //把GPIOA0~GPIOA7 配置成外围功能 GpioMuxRegs.GPADIR.all=0xFFFF; // 把GPIOA都配置成输出 GpioMuxRegs.GPAQUAL.all=0x0000; // 禁止输入限制

GpioMuxRegs.GPBMUX.all=0x0000; //把GPIOB都配置成数子IO口 GpioMuxRegs.GPBDIR.all=0xFFFF; // 把GPIOB都配置成输出 GpioMuxRegs.GPBQUAL.all=0x0000; // 禁止输入限制

EDIS; }

EDIS;

25

毕业设计(论文)

4.3.3 AD模块的设置

F2812的模-数转换器(ADC)是一个12位分辨率带流水线结构的模数

转换器,其中的模拟电压包括前端模拟多路复用器(MUX)、采样保持电路(S/H)、一个模数转换内核、参考电压电路以及其他模拟电路;数字电路部分包括可编程排序器、转换结果寄存器、与模拟电路的接口电路、与芯片外设总线的接口等。它有16个采样通道,可以配置成两个独立的8通道,也可联级成一个16通道模块。

采样三相电流三相电压要用到6个采样通道,采样排序模式设置为单排

序并行采样,若通道A0、A1、A2分别采样A、B、C三相电压,通道B0、B1、B2分别采样A、B、C三相电流,则采样后的结果存储位置的对应关系如下:

图4-3

void InitAdc(void)

{

unsigned int i;

AdcRegs.ADCTRL1.bit.RESET=1; //复位 AdcRegs.ADCTRL1.bit.RESET=0; AdcRegs.ADCTRL1.bit.SUSMOD=3; //仿真

AdcRegs.ADCTRL1.bit.ACQ_PS=0; //采样保持窗口分频 AdcRegs.ADCTRL1.bit.CPS=0; // 不分频

26