I want to implement PID control algorithm in MSP430G2553. Please check whether I am correct.I am using a differential OP-AMP to subtract set-point and feedback signal externally to generate error signal. This error signal is sampled at 1KHz(Please also check whether my sampling frequency is 1KHz ).
#include "msp430g2231.h"
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
P1DIR=0xFF;
unsigned int p=1,i=1,d=1,pp,pi,pd,error=0,past_error=0,sum=0,dt=1;
ADC10CTL0 = SREF_0 | ADC10SHT_3 | ADC10ON ;
ADC10CTL1 = INCH_1 | SHS_0 | ADC10DIV_0 | ADC10SSEL_0 | CONSEQ_0 ;
ADC10AE0 = BIT1 ;
ADC10CTL0|=ENC;
CCTL0 = CCIE;
TACTL = TASSEL_2 + MC_1 + ID_3; //SMCLOCK(1MHz) is selected, UP-COUNTER,1MHz/8=125000Hz
CCR0 = 125; // 125 corresponds to 1000 Hz
while(1)
{}
}
// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
ADC10CTL0|=ADC10SC;
while ( ADC10CTL1&ADC10BUSY);
error=ADC10MEM;//Sampled at 1KHz
pp=p*error;//Proportional controller
sum=sum+error*dt;
pi=sum*i;//Integral controller
pd=(error-past_error)/dt;//Differential controller
past_error=error;
P1OUT=pp+pi+pd;//PID controller
}