--------------------------------------------------------------------------------
Code:
#define K_PRO 3 /* proportional constant */
int Lvel = 10; /* requested input velocities, */
int leftacc; /* accumulators for motor output values */
int leftlast; /* history values for calculating derivative */
unsigned char left_velocity = 0;
void external_interrupt () using interrupt 1
{
left_velocity++;
}
void pwm(int T_period,int Ton_time)
{
int I;
for( I =0; I < T_period; I++) //loop for one cycle,
{ if ( I < Ton_time){
Motor1_2 = 1; // P1^6 // Motor on
Motor1_3 = 0; // P1^7
}
else{
Motor1_2 = 0; // P1^6 // Motor off
Motor1_3 = 0; // P1^7
}
}
}
void speedcontrol()
{
int lf, rt;
lf = (Lvel - left_velocity)*256;
leftacc += ((lf/K_PRO);
leftlast = lf;
pwm(60, leftacc/256);
}