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.

[参考译文] MSP-EXP430F5529LP:使用ADC12和ACS712电流传感器

Guru**** 2539500 points
Other Parts Discussed in Thread: MSP430F5529, MSP-EXP430F5529LP

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/583487/msp-exp430f5529lp-using-adc12-and-acs712-current-sensor

部件号:MSP-EXP430F5529LP
主题中讨论的其他部件:MSP430F5529

论坛大家好,

我正在尝试让提及的LaunchPad (MSP-EXP430F5529LP)上的MSP430F5529读取5A ACS712电流传感器输出的电压。 该传感器使用LaunchPad上的5V和GND针脚供电(在40针脚辅助套件部分)。 当5A电流流经传感器时,传感器输出可达到接近5V,因此我在传感器输出处使用了分压器(带有3k电阻器),将输出电压减半。 分禾器的输出通过LaunchPad传送给WFP 6.0。

我为此编写的相关代码是:

//函数名称:ADC_Init
//用途:初始化和配置MSP430 ADC以将ACS712电压读数转换为电流
//输入:无
//返回:无

void ADC_Init (void){

REFCTL0 &=~REFMSTR; //将电压参考控制设置为ADC_12寄存器

//ADC控制寄存器设置
ADC12CTL0 = ADC12SHT0_9|ADC12REFON|ADC12REF2_5V|ADC12ON; //采样和保持时间,ADC参考发生器打开并设置为2.5V,ADC打开
ADC12CTL1 = ADC12SHP; // SAMPCON信号源
ADC12CTL2 = ADC12RES_2; // 12位分辨率

ADC12MCTL0 = ADC12SREF_1 + ADC12INCH_0; // REF:Vref+至MCU GND;端口6引脚0
P6DIR = 0x00; // WFP 6.0 作为输入
P6SEL |= 0x02; // WFP 6.0 将由ADC使用
ADC12CTL0 &=~ADC12SC; //清除'Start Conversion'位,以确保转换未开始
ADC12CTL0 |= ADC12ENC;

}//

函数名称:GET_ACS712_value
//用途:通过ADC读取ACS 712电流传感器输出电压,然后将电压转换为电流
//输入:无
//返回:来自ACS 712 Sensor

void Get_ACS712_Value(void){的电流值

ADC12CTL0 |= ADC12SC; //启动ADC转换
同时(ADC12CTL1和ADC12BUSY){ //轮询繁忙位等待转换完成
__no_operation();
}

unsigned int acs_voltage = ADC12MEM0 & 0x0FFF; //仅保持低12位

FLOAT ACS_volt2 = 2 *((浮动) ACS_voltage)*(2.5 / 4095.0);

bat_States.current =(ACS_volt2 - 2.525)/ 0.185 ;// x10表示ACS_712上的5V范围;x20表示ACS_712上的2.5V范围
} 

使用此设置和上面的代码,我没有得到正确的值。 我得到的值是-13.3A,这是远距离的,因为它超出了传感器的范围。 从WFP 6.0 上取下传感器输出时,数值为-13.6A。 我不知道这一偏移来自何处,因为它似乎不是计算错误。

 我可以验证电流传感器/分压器设置是否正常工作,并按预期通过它输出大约1.25V的0A电压。 将传感器输出连接到WFP 6.0 似乎会使传感器输出电压降至很低的值,大约为0.03V。

是否有人知道这里可能会发生什么?

我是否尝试从LaunchPad中提取过多电流,还是计算错误?

我没有将WFP 6.0 配置为使用下拉电阻器,所以我不知道是什么原因造成的。

此致

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

    你好,Raheem!

    Raheem Hall 说:
    将传感器输出连接到WFP 6.0 似乎会使传感器输出电压降至很低的值,大约为0.03V。[/QUOT]

    您的引脚可能配置为低电平输出?

    [报价用户="Raheem Hall"[/P6SEL |= 0x02; // P6.0 to be used by ADC报价]

    这是错误的P6SEL位-对于WFP 1.0 ,您需要0x01。

    Raheem Hall 说:
    从WFP 6.0 中移除传感器输出时,其值为-13.6A。[/QUOT]

    假设针脚位于GND级别,然后ACS_volt2将生成0.0 和bat_States.Current将为[(0.0 - 2.525)/ 0.185 ]=- 13.65 <-这是您的结果。

    Dennis

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

    您好Dennis。

    感谢您的回复。

    我会将P6SEL更改为0x01,并看到即将发生的情况。

    该错误前面的行P6DIR = 0x00,是否将引脚6.0 设置为输入? 如果是,如何将销置于地面?

    此致

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

    Raheem Hall 说:
    错误之前的行P6DIR = 0x00,是否将引脚6.0 设置为输入?[/QUOT]

    是的,没错。

    Raheem Hall 说:
    如果是,引脚如何位于地面?[/QUOT]

    问得好:)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    也许您采样太快/您的S&H时间对于分压器的阻抗来说太少? 如果您将WFP的6.0 拉至DVcc,会发生什么情况?ADC结果会变为FFFh吗? 尝试延长S&H保持时间。 此外,您还可以将一个小电容器从分压器中心添加到GND。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好Dennis,

    我发现了这个问题(我真的忽略了一个基本问题)。 定义这些函数(特别是ADC_Init()函数)后,我将所有端口设置为低输出。 我只是把它们换了,现在一切都很好。

    现在唯一的问题是,该值在0.1 A和0.3 A之间波动很大。我添加了一个与第二个电阻器并联的电容器。 该值仍在较小范围内波动,范围为- 0.028 A和0.078 A  

    您是否有解决此问题的技巧? 我应该使用更大的电容器,还是可以在代码中进行一些固定?

    此致

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

    Raheem Hall 说:
    我添加了一个电容器,并将第二个电阻器与接地并联。[/QUOT]

    您选择了哪种价值?

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

    您好Keith

    这是范围的读数

    如您所见,它看起来相对稳定。 这是10uF电容器。

    此致

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

    此致
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的眼睛说,它的范围从1.2 到1.6 V,或28 % 的变体。

    软件当然可以提供帮助。 您可以计算多个值的平均值,也可以保持运行的平均值。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Raheem Hall 说:
    我正在使用10uF电解电容器。[/QUOT]

    好的,这是相当大的-当然,此值应该会显著平滑您的信号,但根据您的应用,它还会减慢步进响应速度。

    您是上下波动,还是您的结果只是缓慢下降?

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

    当您使用示波器并手动计算时,您是否获得了良好的读数?

    给定范围测量值,ADC计数是否反映了这一点?

    如果计数不正确,是否显示参考电压已关闭? 如果您多次测量它,某些值是否显示正确?

    如果计数正确,则将所有数学步骤分成单个操作,即将x = c + a*b更改为x = c,y = a*b,x = x+c
    所有这些是否都有意义?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    它上下波动;计算值的范围极少从0.09A到0.45 A,但大多数值保持在0.27A到0.37A之间。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    根据前面的示波器图片,我可以同意传感器的电压输出范围为1.2V至1.6V。 这相当于大约1966到2622的ADC值。 平均ADC计数在此范围内,其值约为2105 - 2129。 请记住,ADC范围的中点应约为2048。

    使用这些值,我手动计算了我应该得到的值,我可以验证我计算的值是否与程序计算的值一致。

    我相信这会使感应电路/ADC方面出现问题。 我没有检查参考电压。

    此致