CHAPTER 4 PROGRAM LIST
Application Note U17209EJ1V0AN
81
total_sa += wk ; /* Total difference in average buffer */
wwrm = ( total_sa * ( 1000000 / 20 / TH_U ) / TS );
*wrm = wwrm ; /* Speed radian/second */
}
4.1.8 Zero-cross interrupt processing function
/****************************************************************************** /
/* U zero-cross point interrupt */
/****************************************************************************** /
_ _interrupt
void int_U(void)
{
unsigned char wk ;
/* */
if ( ( ( init_flag == 0 ) && ( stop_flag == OFF) ) ) {
sa_time = TM4 ;
TMC4 = 0x61;
TMC4 = 0x63; /* Restart timer */
if ( ~P2 & 0x04 ) { /* Check W phase */
base_position = 0 ;
} else {
base_position = RAD/2/P ;
}
if ( object_speed < 0 ) {
wk = run_ccw_data[ P2 & 0x07 ][0] ;
} else {
wk = run_cw_data[ P2 & 0x07 ][0] ;
}
if ( wk & 0x01 ) {
BFCM00 = 0 ;
BFCM01 = pwm_value ;
BFCM02 = pwm_value ;
} else if ( wk & 0x04 ) {
BFCM00 = pwm_value ;
BFCM01 = 0 ;
BFCM02 = pwm_value ;
} else {
BFCM00 = pwm_value ;
BFCM01 = pwm_value ;
BFCM02 = 0 ;
}
POER0 = wk ;
}
int_co++ ;
}