CHAPTER 4 PROGRAM LIST
Application Note U17209EJ1V0AN
182
p2 = (int *)before_posi[20] ;
for ( i = 0; i <= 19 ; i++ ) {
*p2-- = *p1-- ;
}
before_posi[0][0] = *trm = es_trm % (RAD/P) ;
wk = before_posi[0][0] - before_posi[1][0] ;
if ( abs(wk) > (RAD/2/P) ) {
if ( wk < 0 ) {
wk = (RAD/P) + wk ;
} else {
wk = wk - (RAD/P) ;
}
}
before_posi[1][1] = wk ;
total_sa += wk ; /* Total difference in average buffer */
wwrm = ( total_sa * ( 1000000 / 20 / TH_U ) / TS );
*wrm = wwrm ; /* Speed radian/second */
}
4.5.8 Zero-cross interrupt processing function
/****************************************************************************** /
/* U zero-cross point interrupt */
/****************************************************************************** /
_ _interrupt
void int_U(void)
{
unsigned char wk, wk2 ;
/* */
if ( ( ( init_flag == 0 ) && ( stop_flag == OFF) ) ) {
sa_time = TMENC10 ;
TMENC10 = 0 ; /* Restart timer */
if ( ~P3 & 0x04 ) { /* Check W phase */
base_position = 0 ;
} else {
base_position = RAD/2/P ;
}
if ( object_speed < 0 ) {
wk = run_ccw_data[ P3 & 0x07 ][0] ;
wk2 = run_ccw_data[ P3 & 0x07 ][1] ;
} else {
wk = run_cw_data[ P3 & 0x07 ][0] ;
wk2 = run_cw_data[ P3 & 0x07 ][1] ;
}