基于STM32F427的模拟SSI协议绝对式编码器位置反馈通信

最近拿到一个绝对式编码器基于SSI协议的,需求是把它反馈的位置信息读取出来做误差分析,使用说明书如下,因为是第一次接触这个协议,看了下它的时序图属于同步通信感觉跟IIC和SPI很相似,想着用32去读再通过JScope观测会方便一点。

编码器一共6跟线,VCC和GND外部5V供电,关于D+、D-和C+、C-属于差分IO,由于单片机属于TTL电平,差分信号是485电平,然后淘宝买了两个电平互转模块(这个模块是单通道的,时钟和数据各需要一个,所以买了两个),由于硬件控制流向的,所以使用很简单基本不用找说明文件,切记RX、TX要连对,数据传输过程中有指示灯可以参考。

硬件条件都具备了,其次就是软件,编码器说明书给的SSI时序不是很好,论坛找了找前人做过的,这个说得非常清楚,粘过来给大家(感谢大佬,这也是我开源的原因,互帮互助嘛)。

 简单解释下这个它的时序,空闲状态时钟信号为高,每帧数据开始之前需要把时钟拉低持续t1时长,接受完毕之后(这个完毕主要取决于你接受数据帧的位数,我用的是26位,所以代码是按26位配置的)继续拉高进入空闲,想要做连续接收的时候也一样,帧与帧之前还是需要起始拉低结束拉高的,剩下的时间按典型值来设置问题不大。由于单片机本身是没有SSI协议的,我们只是自己模拟时序来进行通信的,所以通信的频率是不受控的,完全取决于程序跑多快。

话不多说,直接上代码!

用到了两个IO引脚(接入电平转换模块后两跟线就变成四根线了分别连接编码器D+、D-和C+、C-),PA0和PA1分别作为时钟信号输出和数据信号输入,先宏定义一下:

#define CLC PAout(0)
#define DAT PAin(1)

初始化的时候main函数里记得将CLC置为1(上电先保持空闲) ,然后就是模拟SSI的代码:

            CLC=0;
			delay_us(2);
			for(i=0;i<26;i++)
			{
			
				CLC=1;
				delay_us(5);
				if(DAT)
					SES[i]=1;
				else 
                    SES[i]=0;
				CLC=0;
				delay_us(5);
				
			}
		    CLC=1;
			delay_us(15);
		    for(j=0;j<26;j++)
			{
					
				suc+=SES[j]<<(25-j);//编码器数据是高位在前,需要移下位
			}
			
        
		    suc1=(float)suc*360/67108864;
		    suc2=(int)(suc1*10000);
		    suc=0;

suc变量就是十进制整型,因为我用的编码器一共是26位,一圈是360°,suc1做了一个浮点型转换,但是由于JScope打印的时候只能看到小数点后两位,然后用suc2做了通骚操作只为了看到后面的位数。这段代码可以单独做个函数把它封装下,我为了图省事直接在main里运行的。 

最后附个连线图和效果图:

线还是挺乱的,因为电平模块和编码器都需要供电(这个是打算用pmac的然后做了DB头,最后发现杜邦线是可以和DB头的针脚怼进去的,都是骚操作) 。

由于编码器没装在台子上动,连续的波形就不看了,JScope观测下suc1的值看下还是比较准的。 

  • 6
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: STM32 SSI编码器是一种与STM32微控制器结合使用的编码器接口。SSI代表同步串行接口,它是一种高速并行接口,常用于与外部设备进行数据通信STM32微控制器是一系列由STMicroelectronics公司推出的高性能、低功耗的32位ARM Cortex-M核心的微控制器。它们广泛应用于各种应用领域,包括工业自动化、消费电子、汽车电子等。 编码器是用于测量旋转或线性运动的装置,它将运动转换为电信号输出。SSI编码器是一种专门为STM32微控制器设计的编码器接口。STM32微控制器通常具有丰富的外设功能,包括高速定时器和通信接口,可以实现对SSI编码器的完整支持。 SSI编码器通过串行数据传输方编码器位置信息传送给STM32微控制器。它通常使用两根线来传输数据:时钟线和数据线。时钟线用于同步数据传输,控制数据的采样和发送,而数据线用于传输实际的编码器数据。 编码器通过SSI接口与STM32微控制器通信,可以实时地获取编码器位置、速度和加速度等信息。这些信息可以用于控制系统中的位置反馈、运动控制和导航等应用。 总之,STM32 SSI编码器是一种专门为STM32微控制器设计的接口,可用于与编码器进行高速、可靠的数据通信。它广泛应用于各种应用领域,在工业自动化和机器人控制等领域具有重要作用。 ### 回答2: STM32 SSI编码器是指使用STM32微控制器来实现的具有SSI接口的编码器SSI(Synchronous Serial Interface,同步串行接口)是一种串行通信接口,用于在两个设备之间传输数据。编码器是一种用于测量旋转角度或线性位置变化的传感器。 STM32微控制器可以通过SSI接口与编码器通信。该接口支持全双工通信,能够同时接收和发送数据。通过SSI接口,STM32可以读取编码器发送的数据,并实时获取编码器的旋转角度或线性位移。 使用STM32 SSI编码器具有以下优点: 1. 高精度:SSI接口具有较高的数据传输速率和稳定性,可以实现高精度的数据读取,保证了编码器的测量精度。 2. 快速实现:使用STM32微控制器,可以轻松地实现SSI编码器的接口,减少了硬件设计的工作量和复杂性。 3. 多功能性:STM32微控制器具有强大的计算和控制能力,可以根据需要对编码器的数据进行处理和分析,以实现各种功能,如速度控制、位置反馈等。 4. 可靠性:STM32微控制器具有优异的抗干扰性能和可靠性,可以在恶劣的工作环境下稳定工作。 5. 灵活性:STM32微控制器支持多种编程语言和开发环境,可以根据用户的需求进行定制开发,使得系统更加灵活和易于维护。 综上所述,STM32 SSI编码器是一种使用STM32微控制器来实现的具有SSI接口的编码器,具有高精度、快速实现、多功能性、可靠性和灵活性等优点。它在各种应用中广泛使用,包括工业自动化、机器人控制、位置测量等领域。 ### 回答3: STM32 SSI编码器是一种广泛应用于工业控制系统中的编码器接口。SSI(Synchronous Serial Interface)是一种同步串行通信接口,可以实现将旋转编码器位置数据传输给STM32单片机。 首先,STM32单片机在硬件上提供了SSI编码器接口。该接口包括时钟线(CLK)、数据线(DATA)和使能线(NSS)。时钟线用于同步数据传输,数据线用于传输编码器位置数据,使能线用于外部设备的使能控制。 在软件层面,我们需要在STM32的固件库中初始化SSI接口,并配置相应的引脚作为SSI功能的功能针脚。然后,我们需要设置SSI的时钟极性(CPOL)和时钟相位(CPHA)以保证与编码器通信兼容。此外,还可以设置SSI的帧格、数据位、校验位等参数,以满足具体的编码器规格要求。 一旦SSI编码器初始化完成,我们可以使用STM32的中断或轮询方读取编码器位置数据。通过在适当的时间读取数据线上的电平变化,我们可以获取到编码器的转动方向和位置。此外,SSI接口还可以提供硬件过滤器功能,用于降噪处理,提高编码器数据的稳定性。 总之,STM32 SSI编码器是一种高效可靠的编码器接口,适用于各种工业控制系统中的位置检测和运动控制应用。通过合适的硬件和软件配置,我们可以实现对编码器数据的读取和处理,从而实现精准的位置控制和运动监测。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值