SSI信号?|已解决
本帖最后由 STCAI-32位8051 于 2024-4-19 14:21 编辑SSI信号编码器输出SSI信号如何处理?有哪位老师使用过,
其实就是标准的spi,主机模式直接给sclk读数据就行 王昱顺 发表于 2024-3-23 23:53
其实就是标准的spi,主机模式直接给sclk读数据就行
感谢王老师指点,研究理论性东西,我最头疼了,我想哪位老师使用过,针对单片机和SSI通信的例程,研究研究,会应用就行,有一些协议应用软件模块,也行。 SSI接口介绍
SSI即是同步串行接口,是绝对值角度编码器中一种较常用的接口方式,实际的讯号线是两根,一个是时钟输出讯号CLK,一个是数据输入信号DAT,电电气接口采用RS422标准,主要是将时钟输出与数据读入讯号转成差分信号以提高抗干扰性。
可以用SPI主机模式直接给SCLK读数据就行了。
时钟输出讯号SCLK 是 50kHz 到 2MHz
#include "reg51.h"
#include "intrins.h"
sfr SPSTAT= 0xcd;
sfr SPCTL = 0xce;
sfr SPDAT = 0xcf;
sfr IE2 = 0xaf;
#define ESPI 0x02
sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P4M1 = 0xb3;
sfr P4M0 = 0xb4;
sfr P5M1 = 0xc9;
sfr P5M0 = 0xca;
sbit SS = P1^0;
sbit LED = P1^1;
bit busy;
void SPI_Isr() interrupt 9
{
SPSTAT = 0xc0; //清中断标志
SS = 1; //拉高从机的SS管脚
busy = 0;
LED = !LED; //测试端口
}
void main()
{
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
LED = 1;
SS = 1;
busy = 0;
SPCTL = 0x50; //使能SPI主机模式
SPSTAT = 0xc0; //清中断标志
IE2 = ESPI; //使能SPI中断
EA = 1;
while (1)
{
while (busy);
busy = 1;
SS = 0; //拉低从机SS管脚
SPDAT = 0x5a; //发送测试数据
}
}
angmall 发表于 2024-3-24 11:28
SSI接口介绍
SSI即是同步串行接口,是绝对值角度编码器中一种较常用的接口方式,实际的讯号线是两根,一个 ...
感谢老师指点 angmall 发表于 2024-3-24 11:28
SSI接口介绍
SSI即是同步串行接口,是绝对值角度编码器中一种较常用的接口方式,实际的讯号线是两根,一个 ...
老师:像这种格雷码编码器如何处理:
C1024格雷码信号-一周输出0-1023码C256C32变形格雷码信号一周输出0-255码,共转32圈,计0-8191码C256C64变形格雷码信号一周输出0-255码,共转64圈,计0-16383码C512C32格雷码信号一周输出0-511码,共转32圈,计0-16383码光电编码器SSI信号:1213(一周输出8192码,共转4096圈)、1212(一周输出4096码,转4096圈) 380091044 发表于 2024-4-19 08:10
老师:像这种格雷码编码器如何处理:
C1024格雷码信号-一周输出0-1023码C256C32变形格雷码信号一周输出 ...
这种格雷码编码器如何处理,要根据手册来处理。
SSI信号编码器输出SSI信号,在不同的编码器有不同的输出。
数据处理:
编码器输出为格雷循环码, 接收后先以异或的方式, 从高位开始解码为二进制码。 由于格雷码为循环码, 经过最大值码值循环到 0,
即在最大值与 0 间有突变, 因此, 为避免工作行程出现突变数据, 建议采用编码器数据值的中间位置作为工作起始位, 当编码器安装完
毕后, 旋转到实际工作起始点, 将编码器电缆芯线的 MIDP 线与电源正短触, 当前信号输出即为编码器总位数输出值的中值, MIDP 线
回到电源 0。 以后接收到的当前测量值转为二进制码后, 应做如下处理:
实际位置值=(C-MidP) × Dir +起始点值
上式中, C 为编码器输出的当前测量值; MidP 为中间位置值, 为 2n-1, 13 位时为 4096, 16 位时为 32768; 25 位为 2048x8192、 28
位为 2048x65536。 Dir 为编码器旋转方向系数, 与计算方向相同为 1, 与计算方向相反为-1,也可通过编码器上的 DIR 线, 连接高低电平
改变。
起始点并非就是 0, 可由用户自行确定标定位置, 由于多圈编码器可以有 4096 圈的连续测量, 从起始点开始, 正传反转均可有 2048
圈连续工作行程。
数据处理:
编码器输出为格雷循环码, 接收后先以异或的方式, 从高位开始解码为二进制码。 编码器安装无需找零。 安装完毕后, 当设备运转
到机械零点时将编码器电缆芯线的 MIDP 线与电源正短触, 当前信号即为编码器输出的实际位置, 以此信号做计算即可。
编码器输出为格雷循环码, 接收后先以异或的方式, 从高位开始解码为二进制码。
angmall 发表于 2024-4-19 11:42
这种格雷码编码器如何处理,要根据手册来处理。
感谢老师分享,
页:
[1]