//模擬光電編碼器1khz定時週期。
//這裏僅僅模擬了AB編碼器,如果需要還可以增加ABZ編碼器。暫時不模擬Z軸信號了。
#define encoder_pa ??? //PA0
#define encoder_pb ??? //PA1
#define tim_freq 1000//hz 使用定時器的頻率
u16 freq;
u16 period;
s16 dir;
void sim_encoder(void)
{
static u16 t=0;
freq = 1*4;// hz 最大1000hz的頻率 必須是4的倍數才準確。
period = (tim_freq/freq)/4;// 1 freq = 250hz
dir = 1;//方向
if(dir==1)
{
t++;
}
else if(dir==-1)
{
t--;
}
if(t>=period*4) t=0;
if(t<0) t=period*4;
if(t<period)
{
encoder_pa=1;
encoder_pb=0;
}
else if(t< period*2)
{
encoder_pa=1;
encoder_pb=1;
}
else if(t< period*3)
{
encoder_pa=0;
encoder_pb=1;
}
else if(t< period*4)
{
encoder_pa=0;
encoder_pb=0;
}
else
{
t=0;
}
}
//模擬光電編碼器1khz定時週期。
//這裏僅僅模擬了AB編碼器,如果需要還可以增加ABZ編碼器。暫時不模擬Z軸信號了。
#define encoder_pa ??? //PA0
#define encoder_pb ??? //PA1
#define tim_freq 1000//hz 使用定時器的頻率
u16 freq;
u16 period;
s16 dir;
void sim_encoder(void)
{
static u16 t=0;
freq = 1*4;// hz 最大1000hz的頻率 必須是4的倍數才準確。
period = (tim_freq/freq)/4;// 1 freq = 250hz
dir = 1;//方向
if(dir==1)
{
t++;
}
else if(dir==-1)
{
t--;
}
if(t>=period*4) t=0;
if(t<0) t=period*4;
if(t<period)
{
encoder_pa=1;
encoder_pb=0;
}
else if(t< period*2)
{
encoder_pa=1;
encoder_pb=1;
}
else if(t< period*3)
{
encoder_pa=0;
encoder_pb=1;
}
else if(t< period*4)
{
encoder_pa=0;
encoder_pb=0;
}
else
{
t=0;
}
}