//////////////////////////////////////////////////
/* 3Fase Motor Driver */
// Fujisekk LTD
// MGG03420@nifty.ne.jp
// http://www.d1.dion.ne.jp/~fujisekk
// http://homepage3.nifty.com/fujisekk/
//
/* 2013/6 Witten By FujiOomagari */
/* StateMot=0~7 0 stop 1 start 2~7 fase */
/* 2013/8 UPPER LOWRE Sepalate Drive ハード変更*/
//////////////////////////////////////////////////
#include "PE_Types.h"
#include "IO_Map.h"
#include "3Fase120degdriver.h"
/* GLOVAL */
char StateMot;
unsigned int Timer_int ,Max;
/* PWM not witten */
char motor_driver_init(unsigned char max_speed){
threefase120deggen();
Timer_int= START_SPEED;
Max= max_speed;
StateMot=0;
//ptcinit
}
/* stop */
char motor_driver_end(void){
StateMot=0;
}
/* Speed Control */
char motor_speed(char speed){
if(speed>=Max){
Timer_int=speed;
}else{
Timer_int=Max;
}
return(speed);
}
/* 3Fase 120Deg Drive Table */
/*11Z00Z 出力*/
/*111000 極性 180Deg*/
/*001001 3ST*/
#define DriveA 0x0038
#define Newtral 0x0009
/*11Z00Z 出力*/
/* Ap 11ZZZZ 出力*/
#define DriveAp 0x003C
/* An ZZZ11z */
#define DriveAn 0x0018
/* 60度ごとのパターンを作る Pattern[a]を一度にポート出すことでタイミングの狂いをなくす */
unsigned char Pattern[6];
void threefase120deggen(void){
unsigned int wk;
int a,b;
for (a=0;a<6;a++){
wk=DriveAp;
wk =wk<<6;
wk=wk | DriveAp;
wk=wk>>a;
// printf("wk %1d =%X \n",a,wk );
Pattern[a]=0;
for(b=0;b<3;b++){/*Upper 3Fase */
Pattern[a]=Pattern[a] | wk&0x01;
wk=wk>>2;//次の相は120度ずれている
Pattern[a]=Pattern[a]<<1;
// printf("wk %1d =%X \n",b,Pattern[a] );
}
wk=DriveAn;
wk =wk<<6;
wk=wk | DriveAn;
wk=wk>>a;
// printf("wkN %1d =%X \n",a,wk);
for(b=0;b<3;b++){/*Lower 3Fase */
Pattern[a]=Pattern[a] | wk&0x01;
wk=wk>>2;
Pattern[a]=Pattern[a]<<1;
}
Pattern[a]=Pattern[a]<<1; // Bit7~2
}
}
/* StateMot 0で終了 */
char motor_driver( void){
char a,fase;
StateMot=1;
PTAD=0x0;
tslp_tsk(Timer_int);
while(StateMot){
PTBD=Pattern[StateMot-2];
__RESET_WATCHDOG(); /* feeds the dog */
tslp_tsk(Timer_int);
StateMot=StateMot+1;
if( StateMot>7){
StateMot=2;
}
}
}
"3Fase120degdriver.h"
char motor_driver_init(unsigned char max_speed);
char motor_driver(void);
void threefase120deggen(void);
char motor_driver_end(void);
//#define START_SPEED 7
#define START_SPEED 60