This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28027:基本 ADC 问题

Guru**** 2540720 points
Other Parts Discussed in Thread: CONTROLSUITE, C2000WARE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/596672/tms320f28027-basic-adc-problem

器件型号:TMS320F28027
Thread 中讨论的其他器件:controlSUITEC2000WARE

您好!  

我尝试使用 ADC 来读取特定的电压。 已设置的 ADC 如下:

void HAL_setupAdcs (HAL_Handle handle)
{
HAL_Obj * obj =(HAL_Obj *) handle;


//禁用 ADC
ADC_disable (obj->adcHandle);


//打开带隙电路
ADC_enableGap (obj->adcHandle);


//设置 ADC 电压基准源以启用 ADC_enableHandle-
adc



(



adc);/adcs_enable_enable_enable_adc (adcs_enc);/adcs_enc (enable_adcs_enc (enable_enable_adcs_enc)






//将 ADC 中断脉冲生成设置为先前
的 ADC_setIntPulseGenMode (obj->adcHandle、ADC_IntPulseGenMode_Prior);


//将温度传感器源设置为外部
ADC_setTempSensorSockc (obj->adcHandle、ADC_Sprobj SensorSrc_Ext);


//将 ADC_Int 1、ADC_Sock1






、ADC_Int 1、ADC_Sock1、ADC_Sock1、ADC_Sock1、ADC_Sock1、ADC_Sock1、ADC_Sock1、ADC_Sock1;








ADC_setSockTrigSrc (obj->adcHandle、ADC_SockNumber_1、ADC_SockTrigSrc_EPWM1_ADCSOCA);
ADC_setSockSampleDelay (obj->adcHandle、ADC_SockNumber_1、ADC_SockSampleDelay_7_cycles);

// Isen_B
ADC_setSockChanNumber (obj->SockHandle、ADC_SockNumber_2、ADC_SocksenspleNumber_B3);
ADC_SocksensHandle_7、ADC_Socksocksense2;ADC_Socks_sensore2;ADC_Sinc_Socksense2
;ADC_Sinc_Socksensore2;ADC_Socksensore_Socksensore2;ADC_Socksensore2



ADC_setSockTrigSrc (obj->adcHandle、ADC_SockNumber_3、ADC_SockTrigSrc_EPWM1_ADCSOCA);
ADC_setSockSsSampleDelay (obj->adcHandle、ADC_SockSinc数目_3、ADC_Sockspleay_7_cycles);

// VsSocSockSockSockSocks数目
4

、ADC_SockSockse_4、ADC_Socksense4、ADC_Socksense1、ADC_Socksense1、ADC_Delay_4、ADC_Socksocksense1、ADC_Socksinc_Delay_4、ADC_Socksense1

// VSEN_B
ADC_setSockChanNumber (obj->adcHandle、ADC_SockNumber_5、ADC_SockChanNumber_A3);
ADC_setSockTrigSrc (obj->adcHandle、ADC_SockNumber_5、ADC_SockTrigSrc_EPWM1_ADCSRD_
;ADC_setSock_Sock_Sockse_Sockse_Socksockse_Sockse_Sockse_5、ADC_Socksocksocksocksinc_Socksinc_Sockse_Sockse_Socksinc_Sockse_Sockse_Socksinc_Sockse_Sockse_Sockse_Sockse_Sockse_Sockse_Socksinc_Sinc_Sockse_Socksinc_Sockse_Sockse_Sockse_Sockse_Socksinc_Socks




ADC_setSockspleDelay (obj->adcHandle、ADC_SockNumber_6、ADC_SockspleDelay_7_cycles);

// V_PVDD
ADC_setSockSincNumber (obj->SocksocksocksHandle、ADC_SocksensNumber_7、ADC_SocksocksocksensHandle_7

、ADC_Socksocksocksensore_Socksensore_7、ADC_Socksocksocksensore_Socksocksensoreet





(obj_7);ADC_Socks_socksocksocksocksocksocksensore_sockset_ad_7、ADC_socksocksensore_socksensore_sensore_socksocksensore7、ADC_socksocksocksocksensore7、ADC_socksocksocksensore_socksensoreet (ad_ad_ad_ad_ad_adsensore7、ADC_sens ADC_SockTrigSrc_EPWM1_ADCSOCA);//set SOC0 start trigger on EPWM1A、due to roundin SOC0 concles first then SOC1
ADC_setSockTrigSockc (obj->adcHandle、ADC_SockTrigSrc_9、ADC_EPWM1_EPSOC0先转换
SOC0、然后在 SOC01_Socksocksule_Sock3、ADC0、ADCK_socksocksock1以设置 ADC0、ADCK_socksocksocksocksocksockse_sockse_sockse_sockse_socksockse_sockse_se_sockse_sockse_socks //将 SOC0 S/H 窗口设置为7个 ADC 时钟周期、(6个 ACQPS 加1)
ADC_setSockspleDelay (obj->adcHandle、ADC_SockNumber_9、ADC_SockspleDelay;(6个 ACQPS 加9、ADC_SocksockspleDelay;7个 ADC_Socksocksenseet);//设置 SOC1 S/H 窗口为7





个 ADC_Socksensore+、ADC_Socksense+(ADC_Socks_sense+)

;(ADC_Socks_sense1、ADC_Socksocksense+);ADC_Socksocksocksenseet (设置 ADC_tire+ ADC_tore+ ADC_tore+ ADC_sense+ ADC_socksense+ ADC_socksense+ ADCK_8)
;ADC_s_sense+ ADCsocksocksocksocksense+ ADC_socksocksocksense+ ADC_sens 

在主代码中、我创建了一个中断、使用从 ADC 示例中获得的以下函数来获得 ADC 上的电压计数:

_interrupt void ADC_ISR (void)
{
//将 ADCRESULT0作为修订版0第一个样本勘误表权变措施的一部分丢弃
Voltage1[ConversionCount]= ADC_readResult (myAdc、ADC_ResultNumber_8);
Voltage2[ConversionCount]= ADC_readResult (myAdc、ADC_ResultNumber_9);

//如果记录了10次转换,则重新开始
if (ConversionCount = 9)
{
ConversionCount = 0;
}
其他
{
ConversionCount++;
}

//清除 ADCINT1标志为下一个 SOC 重新初始化
ADC_clearIntFlag (myAdc、ADC_IntNumber_1);
//确认 PIE 中断
PI_clearInt (myPie、PI_GroupNumber_10);

返回;
}

我将获得一些高于4096的随机值,该值应介于0-3.3V 之间。我的 ADC 引脚上的电压几乎为1V。

我有一个电机驱动器8305、将28027用作控制器。  

我不确定这是否是设置 ADC 的正确方法、但如果可能的话、如果有人在设置 ADC、可以参考文档。  

此致、  

Rajan Joshi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Rajan、

    我建议您采用结构化方法、而不是基于驱动程序。 检查以下示例代码:
    C:\ti\controlSUITE\device_support\f2802x\v230\F2802x_examples_structs\ADC_SoC

    此致、
    Gautam
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Gautam、您好!  

    我不确定我是否理解正确、但您是否意味着说我不应该修改 hal.c、只需尝试将其结构化为您指向的示例?

    我还有一个简短的问题:

    我只能使用示例使其运行、但当我将电路板的3.3V 电压直接注入 ADC 时、我没有得到稳定的值、但它从4096和4095波动。 它不应该恰好是4095吗?

    此致、

    Rajan  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 USER="Rajan Joshi]'我只使用示例就能使其运行、但当我从电路板直接向 ADC 注入3.3V 电压时、我没有得到稳定的值、但它从4096和4095波动。 它是否不应该恰好是4095?[/引述]

    不、数字值会波动。 当系统中的噪声级别增加时、您可以进一步实施移动平均滤波器。

    [引用 user="Rajan Joshi"]我不确定我是否理解正确,但您是否意味着说我不应该修改 hal.c,只需尝试将其结构设置为您指向的示例?

    不可以、对于 F28027、代码可被写入2种格式:1. 结构2. 基于驱动程序。 如果您导航到此文件夹、您将了解:

    C:\ti\c2000\C2000Ware_1_00_00_00\device_support\f2802x\examples

    此致、

    Gautam