80|0

14

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【中科昊芯HXS320F28025C】电力电子中ADC的使用。 [复制链接]

 
本帖最后由 jixulifu2 于 2024-11-17 23:54 编辑

    一、DSP的ADC的过人之处:

    在涉及模拟信号到数字信号转换的场景中。ADC(模数转换器)模块扮演着至关重要的角色。使用DSP做电力电子项目相对于传统性能孱弱的32单片机我总结了以下几个优势:

    1.在电力电子系统中,需要对各种模拟信号(如电压、电流等)进行实时采集和处理。DSP的ADC模块可以快速、准确地将这些模拟信号转换为数字信号,供后续的数字信号处理算法使用。例如,HXS320F28025C的ADC模块可以实现高精度的模数转换,支持多种触发方式,EPWM SOCA触发,确保在特定时刻进行采样。

    2.电力电子系统中的控制策略通常需要实时反馈和调整。DSP的ADC模块可以提供高精度和高频率的采样,使得控制算法能够基于最新的系统状态进行调整。例如,在逆变器控制中,通过ADC采集的电流和电压信号可以用于实现精确的闭环控制,提高系统的稳定性和效率。

    3.电力系统中的电力质量监测是一个重要的应用领域。DSP的ADC模块可以用于实时监测电网的电压和电流波形,检测谐波、电压波动、频率偏差等问题。通过高速ADC采集的数据,DSP可以快速执行傅里叶变换(FFT)等算法,分析电网的电力质量。

    4.在电力电子设备中,故障检测和保护是确保系统安全运行的关键。DSP的ADC模块可以实时监测关键参数,如电流、电压和温度,一旦检测到异常,可以立即触发保护机制。例如,通过逐波限流控制技术,DSP可以快速响应过载和短路情况,保护设备免受损坏。    

    二、中科昊芯HXS320的ADC了解:

    

  12 位逐次逼近(SAR)型 ADC。包括通道选择 MUX、 采样保持(S/H)电路、 逐次逼近电路、 电压参考电路和其他模拟支持电路。 包装器由配置和控制 ADC 的数字电路组成。 这些电路
包括可编程转换逻辑、 结果寄存器、 模拟电路接口、 外设总线接口、 后处理电路以及其他片上模块接口。

每个 ADC 都具有以下功能:
    •由 VREFHI 和 VREFLO 引脚设置的比率外部参考
    •2.5V 或 3.3V 的可选内部参考
    •单端信号转换
    •输入多路复用器, 多达 16 个通道( 单端) 或 8 个通道( 差分)
    •16 个可配置 SOC
    •16 个可单独寻址的结果寄存器
    •多个触发源
    -S/W-软件立即启动
    -所有 ePWMs-ADCSOC A 或 B
    -GPIO XINT2
    -CPU 计时器 0/1/2
    -ADCINT1/2
    •四个灵活的 PIE 中断
    •突发模式
    •四个后处理块, 每个块具有:
    -饱和偏移校准
    -设定点计算错误
    -高、 低和过零比较, 具有中断和 ePWM 跳闸功能
    -触发采样延迟捕获

 

    最基础的EPWM触发ADC配置代码:

void Adc_config(void)
{
	/*ADC参考电压配置为:ADC_REFERENCE_INTERNAL-内部参考电压,
	* ADC_REFERENCE_3_3V-3.3V*/
	ADC_setVREF(ADCA_BASE,ADC_REFERENCE_INTERNAL,ADC_REFERENCE_3_3V);
	/*配置ADC时钟为ADC_CLK_DIV_2_0-2分频对应SYSCLK/8=20M*/
	ADC_setPrescaler(ADCA_BASE, ADC_CLK_DIV_8_0);
	/*配置ADC中断脉冲模式:ADC_PULSE_END_OF_CONV-转换完成产生脉冲触发中断*/
	ADC_setInterruptPulseMode(ADCA_BASE, ADC_PULSE_END_OF_CONV);
	/*ADC上电使能转换*/
	ADC_enableConverter(ADCA_BASE);
	/*延时1ms完成ADC模块上电*/
	DEVICE_DELAY_US(5000);

	/*屏蔽ADC突发模式*/
	ADC_disableBurstMode(ADCA_BASE);
	/*配置ADC_SOC转换优先级:ADC_PRI_ALL_ROUND_ROBIN-从A0开始循环转换*/
	ADC_setSOCPriority(ADCA_BASE, ADC_PRI_ALL_ROUND_ROBIN);

	/*配置SOC:ADC_SOC_NUMBER0-SOC0,
	 * ADC_TRIGGER_EPWM1_SOCA-通过EPWM_SOCA触发
	 * ADC_CH_ADCIN0-通过通道A0输入采样,
	 * 采样周期为8*SYSCLK(最大512*SYSCLK)*/
	ADC_setupSOC(ADCA_BASE, ADC_SOC_NUMBER2,
			ADC_TRIGGER_EPWM1_SOCA, ADC_CH_ADCIN0, 8U);
	/*配置SOC0触发源:ADC_INT_SOC_TRIGGER_NONE-不通过ADCINT内部触发*/
	ADC_setInterruptSOCTrigger(ADCA_BASE, ADC_SOC_NUMBER2, ADC_INT_SOC_TRIGGER_NONE);
	/*配置ADC_SOC_NUMBER0-SOC0中断源为ADC_INT_NUMBER1-ADCINT1*/
	ADC_setInterruptSource(ADCA_BASE, ADC_INT_NUMBER1, ADC_SOC_NUMBER2);
	/*配置ADC_INT_NUMBER1-ADCINT1中断使能*/
	ADC_enableInterrupt(ADCA_BASE, ADC_INT_NUMBER1);
	/*清除ADC_INT_NUMBER1-ADCINT1中断状态*/
	ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1);
	/*屏蔽ADC_INT_NUMBER1-ADCINT1连续模式*/
	ADC_disableContinuousMode(ADCA_BASE, ADC_INT_NUMBER1);
}

最常用的ADC配置就不研究了,常用的32单片机碰到过压过流时,软件处理的方式对于时间的需求还是太高,不能做到瞬时响应,硬件过流检测又需要添加调试更多的电路,而HXS320内置了这种错误联防机制,可以第一时间切换EPWM输出,防止损坏器。

我们来看看例程中带有错误联防安全机制的配置

void main(void)
{
	/*系统时钟初始化*/
    Device_init();
    /*GPIO锁定配置解除*/
    Device_initGPIO();
    /*关中断,清中断*/
    Interrupt_initModule();
    /*初始化中断向量表*/
    Interrupt_initVectorTable();

    /*中断入口地址INT_ADCA1,指向执行adcA1ISR中断服务程序*/
    Interrupt_register(INT_ADCA1, &adcA1ISR);

#ifdef ENABLE_PROFILING
    //
    // Setup profiling GPIO
    //
    setupProfileGpio();
#endif

    /*配置EPWM_GPIO*/
    initEPWMGPIO();

    /*配置ADC模块电压:ADC_REFERENCE_INTERNAL-内部参考电压
     *ADC_REFERENCE_3_3V-参考电压3.3V */
    ADC_setVREF(ADCA_BASE, ADC_REFERENCE_INTERNAL, ADC_REFERENCE_3_3V);
    ADC_setVREF(ADCC_BASE, ADC_REFERENCE_INTERNAL, ADC_REFERENCE_3_3V);

    /*ADC模块上电配置*/
    configureADC(ADCA_BASE);

    /*关闭外设时钟TBCLKSYNC,以便于EPWM配置*/
    SysCtl_disablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC);

    /*配置EPWM1-EPWM3频率及SOC事件*/
    EPWM_configureSignal(EPWM1_BASE, &pwmSignal1);
    EPWM_configureSignal(EPWM2_BASE, &pwmSignal2);
    EPWM_configureSignal(EPWM3_BASE, &pwmSignal3);

    /*单次错误联防事件配置*/
    configureOSHTripSignal(EPWM1_BASE);

    /*周期错误联防事件配置*/
    configureCBCTripSignal(EPWM2_BASE);

    /*直接事件触发配置*/
    configureDirectTripSignal(EPWM3_BASE);

    /*配置ADC_SOC*/
    configureADCSOC(ADCA_BASE, 2U, 8);

    /*配置极限探测PPB后处理:SOC0,
     * 高极限-3600-对应3.3V*3600/4096=2.9V
     * 低极限-0-对应3.3V*0/4096=0V*/
    configureLimitDetectionPPB(0U, 3600U, 0U);

    /*中断使能INT_ADCA1*/
    Interrupt_enable(INT_ADCA1);

    /*实时打开全局中断*/
    EINT;
    ERTM;

    /*使能外设时钟TBCLKSYNC,以完成EPWM配置,且时基同步*/
    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC);

    /*ADC_SOC_NUMBER0-SOC0通过软件强制触发*/
    ADC_forceSOC(ADCA_BASE, ADC_SOC_NUMBER0);

    do
    {}
    while(1);
}
void configureOSHTripSignal(uint32_t epwmBase)
{
	/*配置XBAR_EPWM_MUX00_ADCAEVT1-EPWM_ADC复用事件
	 * 通过XBAR_TRIP7-事件7交叉开关输入*/
    XBAR_setEPWMMuxConfig(XBAR_TRIP7, XBAR_EPWM_MUX00_ADCAEVT1);

	/*使能XBAR_TRIP7-事件7交叉开关输入
	 * 通过XBAR_MUX00-交叉开关0输入*/
    XBAR_enableEPWMMux(XBAR_TRIP7, XBAR_MUX00);

	/*选择数据比较事件DC输入:
	 * 通过EPWM_DC_TRIP_TRIPIN7-事件7
	 * 触发EPWM_DC_TYPE_DCAH-DCAH事件*/
    EPWM_selectDigitalCompareTripInput(epwmBase,
    		EPWM_DC_TRIP_TRIPIN7,EPWM_DC_TYPE_DCAH);

    /*产生数字比较事件DCAEVT1的条件配置:
     * EPWM_TZ_DC_OUTPUT_A1-EPWMxA_DCAEVT1
     * EPWM_TZ_EVENT_DCXH_HIGH-DCAH置高*/
    EPWM_setTripZoneDigitalCompareEventCondition(epwmBase,
    		EPWM_TZ_DC_OUTPUT_A1,EPWM_TZ_EVENT_DCXH_HIGH);

    /*EPWM数字比较事件源:EPWM_DC_MODULE_A-DC事件A模块
     *EPWM_DC_EVENT_1-DCAEVT1事件
     *EPWM_DC_EVENT_SOURCE_ORIG_SIGNAL-不经过滤波的原信号*/
    EPWM_setDigitalCompareEventSource(epwmBase,
    		EPWM_DC_MODULE_A,EPWM_DC_EVENT_1,
			EPWM_DC_EVENT_SOURCE_ORIG_SIGNAL);

    /*EPWM数字比较事件源同步:EPWM_DC_MODULE_A-DC事件A模块
        *EPWM_DC_EVENT_1-DCAEVT1事件
        *EPWM_DC_EVENT_INPUT_NOT_SYNCED-采用异步信号输入*/
    EPWM_setDigitalCompareEventSyncMode( epwmBase,
    		EPWM_DC_MODULE_A,EPWM_DC_EVENT_1,
			EPWM_DC_EVENT_INPUT_NOT_SYNCED);

    /*TZ错误联防信号EPWM_TZ_SIGNAL_DCAEVT1使能*/
    EPWM_enableTripZoneSignals(epwmBase, EPWM_TZ_SIGNAL_DCAEVT1);

    /*TZ错误联防事件动作配置:
     * EPWM_TZ_ACTION_EVENT_TZA-对于EPWMxA
     * EPWM_TZ_ACTION_LOW-产生置低动作*/
    EPWM_setTripZoneAction(epwmBase,
                           EPWM_TZ_ACTION_EVENT_TZA,
                           EPWM_TZ_ACTION_LOW);
    /*TZ错误联防事件动作配置:
     * EPWM_TZ_ACTION_EVENT_TZB-对于EPWMxB
     * EPWM_TZ_ACTION_HIGH-产生置高动作*/
    EPWM_setTripZoneAction(epwmBase,
                           EPWM_TZ_ACTION_EVENT_TZB,
                           EPWM_TZ_ACTION_HIGH);

    /*清除TZ错误联防事件EPWM_TZ_FLAG_DCAEVT1标志*/
    EPWM_clearTripZoneFlag(epwmBase, EPWM_TZ_FLAG_DCAEVT1);
    /*清除TZ错误联防事件EPWM_TZ_OST_FLAG_DCAEVT1-单次触发标志*/
    EPWM_clearOneShotTripZoneFlag(epwmBase, EPWM_TZ_OST_FLAG_DCAEVT1);

    /*TZ错误联防事件中断类型:EPWM_TZ_INTERRUPT_OST-单次错误联防中断*/
    EPWM_enableTripZoneInterrupt(epwmBase, EPWM_TZ_INTERRUPT_OST);
}

通过XBAR将ADC与PWM信号切断相联动

下载程序进开发板

  AI0低于2.9V时EPWM输出5khz 占空比CMPA=70%,CMPB=50%,短接AI0与VCC后,触发联防,为低电平

   

点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表