⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 init_dc_all.c

📁 永磁同步电机驱动控制
💻 C
字号:
/***********************************************************************************
*  FILE:init_all.c                                                                 *
*  TMS320LF2407A TEST BED CODE                                                     *
*  ZHEJIANG TIANHUANG TECHNOLOGY INDUSTRIAL CO.,Ltd                                *
*  07/28/2006  Vesion 1.0                                                          *
*  Jzming                                                                          *
***********************************************************************************/

#include "TYPEDEFS.H"
#include "F2407_c.H"
#include "CONSTANT.H"
#include "self_define.h"
#include <stdio.h> 
#include <math.h> 

void sytem_init();
void adc_init();
void io_init();
void spi_init();
void ev_init();
void sci_init();
void cap_init();

extern int temp;
/* ------------------------------------------------------------  */
/*   系统初始化    */
/* ------------------------------------------------------------  */
void sytem_init()                
{
    temp=0x7C0;
   asm("	setc INTM");
   asm("	setc SXM");
   asm("	clrc OVM");
   asm("	clrc CNF");
   asm("  out _temp,0ffffh");

   *IMR = 0x0012;               //INT2
   *IFR = 0xFFFF;
   *SCSR1 = 0x00FC;             //system clk=40M
//   *SCSR2 = (*SCSR2)|0x40;
   *WDCR = 0x6F;
//   KICK_DOG;                    //Disable the watchdog
//   *WSGR = 0x0000;              //禁止所有等待状态
   
}
/* -----------------------------------------------------------  */
/*  A/D采样初始化  */
/* -----------------------------------------------------------  */
void adc_init()                 
{
   *ADCTRL1 = 0x4000;           //Reset The Adc
   *ADCTRL1 = 0x3020;           //Free Run, Run/Stop mode, Low Pri
   *MAX_CONV = 0x0004;          //Setup for 5 conversions

   *CHSELSEQ1 = 0x3210;         //Convert Channels 0,1,2,3;0=ib,1=ia,2=signal,3=vdc
   *CHSELSEQ2 = 0x7654;         //Convert Channels 4,5,6,7
   *ADCTRL2 = 0x4000;           //复位通道指针。
}
/*  ---------------------------------------------------------  */
/*  I/O口初始化
I/O口设置,  输出口:IOPF4(RAM_CE)、IOPF5(RAM_OE)、IOPB4(BUCK CONTROL)
            输入口:IOPF6(RAM_BUSY) 
            保护动作:XINT1(ITRIP)
            捕获单元:编码器(XINT2、QEP3、QEP4)、霍尔信号(CAP1、CAP2、CAP3)      
PWM设置:   电机全桥控制-PWM1-PWM6
/*  ---------------------------------------------------------  */
void io_init()
{
   *MCRA = 0xFFFF;             //PWM1-6,SCI,CAP1-3,T1PWM
   *MCRB = 0xFF9F;             //spi,can, spiste--IOPC5 
   *MCRC = 0xFFFF;             //CLKOUT,PWM7--PWM12,CAP4--6,       
   *PADATDIR = 0x0000;   
   *PBDATDIR = 0x0000; 
   *PCDATDIR = 0x0000;         //没有必要置1,SET IOPC5--OUT 1
   *PDDATDIR = 0x0000;
   *PEDATDIR = 0x0000;         
   *PFDATDIR = 0x0000;         //F4,F5--OUTPUT. F6--INPUT	                                         
}    

/* -----------------------------------------------------------  */
/*  SPI 接口初始化         */
/* -----------------------------------------------------------  */
void spi_init()
{
   *SPICCR = 0x000f;           //设置数据长度为16位,复位SPI
   *SPICTL = 0x000e;           //主工作模式,正常的SPI时钟方式,允许发送
   *SPIBRR = 0x007f;           //Set up the SPI to 250k speed.
   *SPICCR = 0x008f;           //启动SPI时钟.
}

/*  ----------------------------------------------------------  */
/* EVA & EVB 初始化  */
/*  ----------------------------------------------------------  */
void ev_init()
{
   *EVAIMRA = 0x0080;             //开T1周期
   *EVAIMRB = 0x0000;                                     
   *EVAIMRC = 0x0007;             //           
   *EVAIFRA = 0xFFFF;             //清中断标志
   *EVAIFRB = 0xFFFF;
   *EVAIFRC = 0xFFFF;
   *GPTCONA = 0x0041;             //低有效,同相驱动                                   
   *T1PR    = 0x03E8;             //T1周期50微秒   
   *T1CNT   = 0x0000;                         
   *ACTRA   = 0x0999;             //上桥低有效,下桥高有效,这里必须这样设置
   *DBTCONA = 0x0FE8;             //DEADTIME=16*4*25nS=1.6uS 
   *COMCONA = 0x8A00;                  
   *T1CMPR  = 0x0258;             //0.6 
   *T1CON   = 0x0802;             //Disable timer,X
   *CMPR1   = 0x01F4;             //占空比为0,值250,双极性
   *CMPR2   = 0x01F4;
   *CMPR3   = 0x01F4;	    
   *T2CON   = 0x1870;             //连续增,CAP1--3
   *T2PR    = 0xFFFF;
   *T2CNT   = 0x0000;
    
//   *EVBIMRA = 0x0000;
//   *EVBIMRB = 0x0000;
//   *EVBIMRC = 0x0000;
//   *EVBIFRA = 0xFFFF;
//   *EVBIFRB = 0xFFFF;   
//   *EVBIFRC = 0xFFFF;
//   *GPTCONB = 0x0000;
   *T4CON   = 0x1870;             //定向增减记数,qep
   *T4PR    = 0xFFFF;
   *T4CNT   = 0x0;
   *CAPCONB = 0x0000;             //Enable QEP
   
   
   
}
/*  ----------------------------------------------------------  */
/*  CAP 初始化
/*  ----------------------------------------------------------  */
void cap_init()
{
       
	    *CAPCONA=0x30ff;       //使能捕获单元,选T2,捕获双沿
	                                           //清捕获寄存器单元
	    *CAP1FBOT=*CAP1FBOT;                        
	    *CAP1FBOT=*CAP1FBOT;
	    *CAP2FBOT=*CAP2FBOT;
	    *CAP2FBOT=*CAP2FBOT;
	    *CAP3FBOT=*CAP3FBOT;
	    *CAP3FBOT=*CAP3FBOT;  
	    *CAPFIFOA=0x1500;       //防止出现丢脉冲的现象
	    
	    
	    *CAPCONB=0;             //使能捕获单元4,5,选T4,捕获上升沿
}

/*  ----------------------------------------------------------  */
/*  SCI 串口初始化  */
/*  ----------------------------------------------------------  */
void sci_init()
{
   *SCICCR   = 0x0007;            //不使能奇偶校验
   *SCICTL1  = 0x0003;            //使能接收和发送,
   *SCICTL2  = 0x0002;            //使能接收中断
   *SCIHBAUD = 0x0002;
   *SCILBAUD = 0x0007;            //9600,system clk=40M
   *SCICTL1  = 0x0023;
   *SCIPRI   = 0x0020;            //LOW 
}

/*  ----------------------------------------------------------  */
/*  XINT 外部中断初始化  */
/*  ----------------------------------------------------------  */
void xint_init()
{
   *XINT1CR = 0x0000;
   *XINT2CR = 0x0000;
}










⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -