我使用 MSP430G2553对模拟输入进行采样并进一步处理。 当我检查 ADC 输入引脚 A0处的电压时、即使 输入未连接、电压也为1.4V。 然后我尝试从外部将其下拉、然后它下降到1.1V 而不是0V。我需要 ADC 的三态输入、因为我是通过精密整流器提供输入、因此我无法检测到低于1.4V 的输入电平。 这里是它 代码。
#include
int PWM (int a);
int main (void){
浮点 ERR = 0、ref = 122、Vadc = 0、Kp = 1、Ki = 0.4、P = 0、 I = 0、PImax = 1000、PI = 0;
WDTCTL = WDTPW + WDTHOLD;
ADC10CTL0 = SREF_1 + REFON + REF2_5V + ADC10ON+ MSC;
ADC10CTL1 = CONSEQ_2;//重复单次转换
ADC10AE0 = INCH_0;
ADC10CTL0 |= ENC + ADC10SC;
Vadc = ADC10MEM;
while (1)
{
Vadc = ADC10MEM;
ERR = ref - Vadc;
P = Kp * err;
如果(PI + Ki * err < PImax)
I = I + Ki * err;
PI = P + I;
IF (PI > PImax)
PI = PImax;
PWM (PI);
}
}
int PWM (int a) {
P1DIR |= BIT2;
P1SEL |= BIT2;
TA0CCR0 = 1000;//在定时器 A0捕捉/比较0寄存器中将周期设置为1000us。
TA0CCTL1 = OUTMOD_7;
TA0CCR1 = A;//电源开启的周期(以微秒为单位)。 它是时间的一半、这相当于50%的占空比。
TA0CTL = tassel_2 + MC_1;//tassel_2选择 SMCLK 作为时钟源、并且 MC_1告诉它向上计数到 TA0CCR0中的值。
返回0;
}

