一、SSI通信协议简介
SSI(synchronous serial interface)同步串行接口。SSI通讯的帧格式如下图所示。数据传输采用同步方式,在空闲阶段不发生数据传输的时候时钟和数据都保存高电位,在第一个脉冲的下降沿触发编码器载入发送数据,然后每一个时钟脉冲的上升沿编码器送出数据,数据的高位在前、低位在后,当传送完所有的位数以后时钟回到高电平,数据也回到对应的高电平。
二、增量式编码器和绝对式编码器
增量式编码器是将角度转化为周期性的电信号,再将这个电信号转化为脉冲,用脉冲的个数表示位移的大小;绝对式编码器内部的码盘的每一个位置对应一个确定的数字码,因此他的测量值只与起始和终止位置有关,与测量过程无关。绝对值编码器因其每个位置绝对唯一、抗干扰、无需掉电记忆,已经广泛应用于各种工业控制系统中,实现角度、长度的高精度测量和控制。
三、单圈绝对式编码器工作原理
的单圈绝对值编码器内部有个码盘,码盘上有若干个码道,码道上有通孔和暗孔(不透光),对光电类的编码器,码盘位于光源与光接收器之间,当某个码道处于光源处(或者称为测量接口电路处),光电接收器接收到通过通孔的光信号置1,没有接收到光信号(暗孔)置0,这样一个固定的角度位置就可以被编码,十进制角度被编码成n位二进制;如图所示4位二进制,位数越高,码道数越多,编码器的测量分辨率也就越大,比如12位的编码器,分辨率为360/2^12=360/4096=0.0878。编制而成的二进制数据在接收到触发信号(SSI模式时一个上升沿),数据被移入到移位寄存器中,接下来,在接收器同步时钟模式下,每一个上升沿发送一位数据到数据线,对其进行读取。
四、实例代码
本测试实例通过读取旋转角度,并将角度信息发送到串口助手中
(https://item.taobao.com/item.htm? spm=a230r.1.14.68.1ee0c2dfGeO7eUid=591334271759ns=1abbucket=19#detail)
1、接线:
编码器采用5v供电,TTL电平输出,通过三根线与单片机(stm32f10)传输数据。
2、代码:
(CSN-PA5;CLK-PA6;DO-PA7)
CLK-模拟同步时钟,第一个下降沿开始传输数据,之后每一个上升沿输出数据;CSN-控制信号,数据传输时低电平,结束高电平;
DO-数据输出端口
端口配置:
void Gpio_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能PA端口时钟
//GPIO_DeInit(GPIOA);
//PA5-CSN -高速推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOA, GPIO_InitStructure); //
//PA6-CKL
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //
GPIO_Init(GPIOA, GPIO_InitStructure); //推挽输出 ,IO口速度为50MHz
//PA7-DO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
GPIO_Init(GPIOA, GPIO_InitStructure);
}
12位每次输出一个二进制位,将其读出并存储;开始读取数据时CSN需要一个高到低的电平跳变,然后循环读取中是CLK低到高的跳变,最后结束CLK和CSN都为高电平。