当前位置:   article > 正文

基于DSP280049C的正点原子PMSM电机驱动(五):ADC配置_280049电流采样

280049电流采样

userADC.h配置

/*
 * 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_ */

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

userADC.c配置

/*
 * 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);
*/

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

ADC读取在FOC控制函数中的应用

在FOC.h中申明要用到的部分参数

/*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)//滤波器时间常数
  • 1
  • 2
  • 3
  • 4
  • 5

在FOC.c中进行数值读取以及滤波

    /*************************电流读取部分*********************************/
    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 );
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

在FOC开环情况下,读取到的UV两相电流值如图
在这里插入图片描述

基于DSP280049C的电机驱动系列回顾:

(一):CCS文件夹的建立与IQmath导入
(二):FOC文件的建立与开环代码编写
(三):EPWM配置
(四):EQEP配置与SPI主机配置
(五):ADC配置

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/648739
推荐阅读
相关标签
  

闽ICP备14008679号