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.

[参考译文] MSP430G2553:ADC 输入引脚生成不规则电压

Guru**** 2555080 points
Other Parts Discussed in Thread: MSP430G2553

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/788145/msp430g2553-adc-input-pin-generating-an-irregular-voltage

器件型号:MSP430G2553

我已经按照如下方式配置了 msp430g2553的 ADC。 当我为器件加电时、引脚 A0在其上生成了这样一个波形。 我不能弄清楚是什么问题。

#include 
/**
* main.c
*/
int main (void){

WDTCTL = WDTPW + WDTHOLD; //禁用看门狗计时器

P2DIR = BIT2; //选择和设置定时器模块的输出位
P2SEL = BIT2;
BCSCTL1 = CALBC1_16MHz; //将时钟频率设置为16MHz
DCOCTL = CALDCO_16MHz;

//计时器模块
TA1CCR0 = 1000; //为要生成的 PWM 总时间提供计数
TA1CCTL1 = OUTMOD_7; //将计时器模式设置为在设置复位模式下计数
TA1CTL = MC_1 + ID_0 + TASSEL_2 + TACLR; //MC_1是模式控制1、表示定时器在增模式下计数
//ID_0是时钟分频器1、TASSEL_2选择 SMCLK、TACLR 清除计时器(这使计时器从0开始计数)

/ADC 模块
ADC10CTL0 = ADC10ON + ADC10IE + SREF_1 + REFON + REF2_5V + MSC;//启用中断、将基准设置为2.5V
ADC10CTL1 = ADC10DIV_0 + CONSEQ_2; //时钟分频和 CONSEQ_2用于重复进行单通道转换
ADC10AE0 = INCH_0; 通道0上提供//输入、即引脚 A0
P1REN = 0x01;
P1OUT = 0x00;
ADC10CTL0 |= ENC + ADC10SC; //开始转换


while (1){
P2DIR |= 0x01; //设置 P2.0
P2OUT &=~0x01; //将 P2.0设置为低电平(检查循环运行所需的时间)
float set_point = 0.47、t_on; //set point 为2.24V
浮点 Kp = 25、Ki = 10、p_term、Imax = 15、IMin = 0、 pi_term、pi_min = 0、pi_max = 12;
静态浮点 I_Term = 0;

int ADC_val = ADC10MEM; //将 ADC 的值分配给变量
float ADC_out =(float)(ADC_val * 2.5/1024); //根据给定的基准将十六进制值缩放到电压
float 错误= SET_POINT - ADC_OUT; //从 ADC 和设定点获取错误

//比例项
P_TERM = Kp *错误;

//积分项
静态浮点 I_temp = 0;
I_temp = I_temp +错误; //计算积分项

if (i_temp > Imax) //integral anti-windup
I_temp = Imax;

否则、如果(I_temp < IMIN) //integral anti-windup
I_temp = IMIN;

I_term = ki * I_temp; //final I_term

//导数项
/*float d_temp =错误; //检查此项是否为静态
D_TERM = Kd *(d_temp-error); //检查计算*/

//PI 项
pi_term = p_term + i_term;

//削波输出 pi_term
if (pi_term > pi_max)
pi_term = pi_max;
否则、如果(pi_term < pi_min)
pi_term = pi_min;


T_on =(pi_term * 1000)/pi_max;

TA1CCR1 = t_ON; //根据 pi_term 设置导通时间
P2OUT ^= 0x01; //设置 P2.0翻转(检查循环运行所需的时间)
}
}

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

    对于浮动 ADC 输入、您观察到的波形可能是正常的。 (10M Ω 20pF)

    ADC 需要适当的电压源以实现指定的性能。

    如果您的源电阻大于1千欧、您可以添加10nF 电容器以帮助进行 ADC 电荷转换

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

    请您详细说明问题可能出在哪?

    提前感谢您。