绝对值编码器的SSI通讯协议
刚刚拿到这个编码器还是挺迷惑的,找淘宝客服也不给我源码, 长这个样子,然后在网上的资料只有这些: SSI的介绍有的博主介绍的挺好的,我就不多赘叙了,直接上代码。 首先有个ns的延时 我是用滴答定时器实现的,具体方法可以去网上查。 接下来是根据时序图获取数据。
u8 gelei[10];
void Bmq_SSI(void)
{
u8 i;
CS_Low;
delay_ns(1200);
CLK_Low;
delay_ns(600);
for(i = 0;i < 10;i++)
{
CLK_High;
delay_ns(50);
if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_9))
{
gelei[i]=1;
}
else
gelei[i]=0;
delay_us(5);
CLK_Low;
delay_us(5);
}
Bmq_data_analyse(gelei,10);
CS_High;
delay_ns(1200);
}
本来以为要用格雷码转二进制,通过数据发现不需要。
u16 bmq_data;
void Bmq_data_analyse(u8 *buf,u8 num)
{
// u8 i;
// for(i = 0; i < num-1 ;i++)
// {
// *(buf+i+1) = *(buf+i) ^ *(buf+i+1);
// }
bmq_data = *(buf)<<9|*(buf+1)<<8|*(buf+2)<<7|*(buf+3)<<6|*(buf+4)<<5|*(buf+5)<<4|*(buf+6)<<3|*(buf+7)<<2|*(buf+8)<<1|*(buf+9);
}
如有不当,请指正。
|