请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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翻转(检查循环运行所需的时间) } }
