📄 2812电流及dc母线电压检测.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 + -