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

📄 f281xileg.c

📁 里面包含dsp采集电压
💻 C
字号:
/* ==================================================================================
File name:       F281XILEG.C
               
Description: This file contains source for the F281X Two leg current measurement driver.
=====================================================================================*/

#include "DSP281x_Device.h"
#include "f281xileg.h"

#define CPU_CLOCK_SPEED      6.6667L   // 150MHz CPU 时钟频率
#define ADC_usDELAY 5000L
#define DELAY_US(A)  DSP28x_usDelay(((((long double) A * 1000.0L) / (long double)CPU_CLOCK_SPEED) - 9.0L) / 5.0L)

extern void DSP28x_usDelay(unsigned long Count);

void F281X_ileg2_drv_init(ILEG2MEAS *p)
{
    DELAY_US(ADC_usDELAY);	
  
    AdcRegs.ADCTRL1.all = ADC_RESET_FLAG; 		// 复位 ADC 模块
	asm(" NOP ");
	asm(" NOP ");    

    AdcRegs.ADCTRL3.bit.ADCBGRFDN = 0x3;		// 使能其他电路
	DELAY_US(ADC_usDELAY);			    		// 延时等待
    
    AdcRegs.ADCTRL3.bit.ADCPWDN = 1;	   		// 使能 ADC
    AdcRegs.ADCTRL3.bit.ADCCLKPS = 6;     		// 设置 ADCTRL3 寄存器
	DELAY_US(ADC_usDELAY);	

    AdcRegs.ADCTRL1.all = ADCTRL1_INIT_STATE_ILEG2;		// 设置 ADCTRL1寄存器 
    AdcRegs.ADCTRL2.all = ADCTRL2_INIT_STATE_ILEG2; 	// 设置ADCTRL2 寄存器r 
	AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 1;       
    AdcRegs.ADCCHSELSEQ1.all = p->ChSelect;      // 配置通道选择

	EvaRegs.GPTCONA.bit.T1TOADC = 1;      		// 设置ev触发为timer1下溢中断
}  

void F281X_ileg2_drv_read(ILEG2MEAS *p)
{
       int16 DatQ15;
       int32 Tmp;

        // Wait until ADC conversion is completed 
        while (AdcRegs.ADCST.bit.SEQ1_BSY == 1)
        {};

        DatQ15 = AdcRegs.ADCRESULT0^0x8000;  	  // 转换结果为Q15格式
        Tmp = (int32)p->ImeasAGain*(int32)DatQ15; // Tmp = gain*dat => Q28 = Q13*Q15
        p->ImeasA = (int16)(Tmp>>13);             // 转变 Q28 to Q15
        p->ImeasA += p->ImeasAOffset;             // 增加偏移量
        p->ImeasA *= -1;                     	  // 取反方向,电流流向电机
          
        DatQ15 = AdcRegs.ADCRESULT1^0x8000;   	  
        Tmp = (int32)p->ImeasBGain*(int32)DatQ15; 
        p->ImeasB = (int16)(Tmp>>13);             
        p->ImeasB += p->ImeasBOffset;            
        p->ImeasB *= -1;                   		  
 
        p->ImeasC = -(p->ImeasA + p->ImeasB);     // 计算c相电流

        AdcRegs.ADCTRL2.all |= 0x4040;       	  // 保存结果

}            
          

⌨️ 快捷键说明

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