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

📄 2812电流及dc母线电压检测.c

📁 里面包含了基于dsp2812的永磁同步电动机和步进电动机的5个源程序。用c语言编的。
💻 C
字号:
#include "DSP28_Device.h"
#include "f28xileg_vdc.h"
#include "f28xbmsk.h"
#define CPU_CLOCK_SPEED      6.6667L   //  CPU时钟速度150MHz
#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 F28X_ileg2_dcbus_drv_init(ILEG2DCBUSMEAS *p)
{
    DELAY_US(ADC_usDELAY);	
    AdcRegs.ADCTRL1.all = ADC_RESET_FLAG; 	/*复位ADC模块		*/  
	   asm(" NOP ");
	   asm(" NOP ");    
    AdcRegs.ADCTRL3.bit.ADCBGRFDN = 0x3;		/* 为bandgap和参考电路供电*/
	   DELAY_US(ADC_usDELAY);				/*为ADC其他单元上电前延时 */
    
    AdcRegs.ADCTRL3.bit.ADCPWDN = 1;	   		/*为ADC其他单元上电	*/
    AdcRegs.ADCTRL3.bit.ADCCLKPS = 3;     		/* 设置ADCTRL3寄存器	*/
DELAY_US(ADC_usDELAY);	

    AdcRegs.ADCTRL1.all = ADCTRL1_INIT_STATE;		/*设置ADCTRL1寄存器 */
    AdcRegs.ADCTRL2.all = ADCTRL2_INIT_STATE;		/*设置ADCTRL2寄存器	*/
AdcRegs.ADCMAXCONV.bit.MAX_CONV = 2;   		/* 确定3个转换		*/
    AdcRegs.ADCCHSELSEQ1.all = p->Ch_sel;       		/* 配置通道选择		*/

EvaRegs.GPTCONA.bit.T1TOADC = 1;      		/*设置采用Timer1 UF触发ADC转换 */
}  

void F28X_ileg2_dcbus_drv_read(ILEG2DCBUSMEAS *p)
{
       int dat_q15;
       long tmp;
        /* 等待ADC转换结束*/
        while (AdcRegs.ADCST.bit.SEQ1_BSY == 1)
        {};

        dat_q15 = AdcRegs.ADCRESULT0^0x8000;  	/*将转换结果变成Q15格式双极性数据*/
        tmp = (long)(p->Imeas_a_gain*dat_q15);
        p->Imeas_a = (int)(tmp>>13);
        p->Imeas_a += p->Imeas_a_offset;
        p->Imeas_a *= -1;                   		/*正向,电流流向电动机*/
          
        dat_q15 = AdcRegs.ADCRESULT1^0x8000;   	/*将转换结果变成Q15格式双极性数据*/
        tmp = (long)(p->Imeas_b_gain*dat_q15);
        p->Imeas_b = (int)(tmp>>13);
        p->Imeas_b += p->Imeas_b_offset;
        p->Imeas_b *= -1;                   		/*正向,电流流向电动机*/
 
        dat_q15 = (AdcRegs.ADCRESULT2>>1)&0x7FFF;   /*将转换结果变成Q15格式双极性数据*/
        tmp = (long)(p->Vdc_meas_gain*dat_q15);
        p->Vdc_meas = (int)(tmp>>13);
        p->Vdc_meas += p->Vdc_meas_offset;

        p->Imeas_c = -(p->Imeas_a + p->Imeas_b); 

        AdcRegs.ADCTRL2.all |= 0x4040;       		/* 复位排序器					*/

}  

⌨️ 快捷键说明

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