赞
踩
/*
* userADC.h
*
* Created on: 2023年4月2日
* Author: 24460
*/
#ifndef USER_INC_USERADC_H_
#define USER_INC_USERADC_H_
void ADC_int(void);
#endif /* USER_INC_USERADC_H_ */
/* * userADC.c * * Created on: 2023年4月2日 * Author: 24460 */ #include "F28x_Project.h" #include "FOC.h" #include "userADC.h" /*-----------------------<ADC相关函数>-------------------------------------------------------------------------*/ void ADC_int(void) { //第一步:ADC时钟配置 ADC_setPrescaler(ADCA_BASE, ADC_CLK_DIV_4_0);//ADCA四分频(ADCCLK=SYSCLK/4),25MHZ ADC_setPrescaler(ADCC_BASE, ADC_CLK_DIV_4_0);//ADCC四分频(ADCCLK=SYSCLK/4),25MHZ //第二步:参考电压选择 ADC_setVREF(ADCA_BASE, ADC_REFERENCE_INTERNAL, ADC_REFERENCE_3_3V);//内部电压3.3V ADC_setVREF(ADCC_BASE, ADC_REFERENCE_INTERNAL, ADC_REFERENCE_3_3V);//内部电压3.3V //第三步:转换结束时触发中断 ADC_setInterruptPulseMode(ADCA_BASE, ADC_PULSE_END_OF_CONV); ADC_setInterruptPulseMode(ADCC_BASE, ADC_PULSE_END_OF_CONV); //第四步:启动ADC并延时1ms ADC_enableConverter(ADCA_BASE); ADC_enableConverter(ADCC_BASE); DEVICE_DELAY_US(1000); //第五步:SOC配置 ADC_setupSOC(ADCA_BASE, ADC_SOC_NUMBER0, ADC_TRIGGER_SW_ONLY,ADC_CH_ADCIN0, 9);//ADCA的SOC0对应A0通道,设置为软件触发且窗口时长为10个SYSCLK ADC_setupSOC(ADCA_BASE, ADC_SOC_NUMBER1, ADC_TRIGGER_SW_ONLY,ADC_CH_ADCIN1, 9);//ADCA的SOC0对应A1通道,设置为软件触发且窗口时长为10个SYSCLK ADC_setupSOC(ADCA_BASE, ADC_SOC_NUMBER2, ADC_TRIGGER_SW_ONLY,ADC_CH_ADCIN2, 9);//ADCA的SOC0对应A0通道,设置为软件触发且窗口时长为10个SYSCLK ADC_setupSOC(ADCA_BASE, ADC_SOC_NUMBER4, ADC_TRIGGER_SW_ONLY,ADC_CH_ADCIN4, 9);//ADCA的SOC0对应A1通道,设置为软件触发且窗口时长为10个SYSCLK ADC_setInterruptSource(ADCA_BASE, ADC_INT_NUMBER1, ADC_SOC_NUMBER0);//ADCA的SOC0对应中断INT1 ADC_enableInterrupt(ADCA_BASE, ADC_INT_NUMBER1); ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1); /*分离式无感驱动时用C0 C2 C4 ADC_setupSOC(ADCC_BASE, ADC_SOC_NUMBER0, ADC_TRIGGER_SW_ONLY,ADC_CH_ADCIN0, 9);//ADCC的SOC0对应C2通道,设置为软件触发且窗口时长为10个SYSCLK ADC_setupSOC(ADCC_BASE, ADC_SOC_NUMBER2, ADC_TRIGGER_SW_ONLY,ADC_CH_ADCIN2, 9);//ADCC的SOC2对应C3通道,设置为软件触发且窗口时长为10个SYSCLK ADC_setupSOC(ADCC_BASE, ADC_SOC_NUMBER4, ADC_TRIGGER_SW_ONLY,ADC_CH_ADCIN4, 9);//ADCC的SOC4对应C4通道,设置为软件触发且窗口时长为10个SYSCLK ADC_setInterruptSource(ADCC_BASE, ADC_INT_NUMBER1, ADC_SOC_NUMBER0);//ADCC的SOC0对应中断INT1 ADC_enableInterrupt(ADCC_BASE, ADC_INT_NUMBER1); ADC_clearInterruptStatus(ADCC_BASE, ADC_INT_NUMBER1); */ }
/*ADC采集及其滤波参数*/
#define K_1 0.000806 //ADC电流计算中:3.3/4096
#define K_2 1000/132 //132mv/A
#define Fc 50 //电流采样的截止频率50HZ
#define q (pi_2*Fc*Ts)/(pi_2*Fc*Ts+1)//滤波器时间常数
/*************************电流读取部分*********************************/ ADC_forceSOC(ADCA_BASE , ADC_SOC_NUMBER4); ADC_forceSOC(ADCA_BASE , ADC_SOC_NUMBER0); while (ADC_getInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1) == false) { } ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1); adcResult4 = ADC_readResult (ADCARESULT_BASE , ADC_SOC_NUMBER4); //ADC_u adcResult0 = ADC_readResult (ADCARESULT_BASE , ADC_SOC_NUMBER0); //ADC_v /*以上为ADC数值采集*/ iu_get = _IQmpy( _IQ(q) , _IQ(adcResult4) ) + _IQmpy( _IQ(1-q) , iu_get ); iv_get = _IQmpy( _IQ(q) , _IQ(adcResult0) ) + _IQmpy( _IQ(1-q) , iv_get ); /*以上为一阶数字滤波*/ //数据打印 data1 = (_IQtoF(iu_get))*1; data2 = (_IQtoF(iv_get))*1; SPIA_sendtwo(data1 ,data2 );
在FOC开环情况下,读取到的UV两相电流值如图
(一):CCS文件夹的建立与IQmath导入
(二):FOC文件的建立与开环代码编写
(三):EPWM配置
(四):EQEP配置与SPI主机配置
(五):ADC配置
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。