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

最近拿到一个绝对式编码器基于SSI协议的,需求是把它反馈的位置信息读取出来做误差分析.

查了下学习了各位前辈的经验,比较了 spi\iic\ssi的区别.

SSI的时序图如下:

方法一.  模拟io口的方式,进行读取

硬件接线:

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

示波器看下信号:

T=6.8us, t1=2.96us, t2=720ns,MSB=0.72us, t3=15.3us

软件代码:


void PIN_Init(void)
{
     GPIO_InitTypeDef   GPIO_InitStructure;

     /* Enable GPIOC clock */
     __HAL_RCC_GPIOA_CLK_ENABLE();

     //PA6 CLK
     GPIO_InitStructure.Pin  = GPIO_PIN_6;
     GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;//推挽输出
     GPIO_InitStructure.Speed   = GPIO_SPEED_FREQ_HIGH;//高速
     GPIO_InitStructure.Pull = GPIO_PULLUP;//wue clk拉高
     HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);
     
     //PA5 DATA
     GPIO_InitStructure.Pin  = GPIO_PIN_5;
     GPIO_InitStructure.Mode = GPIO_MODE_INPUT;
     GPIO_InitStructure.Pull = GPIO_PULLUP;
     HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);
}
    
//寤舵椂鍑芥暟
void Delay(unsigned int time)
{
    unsigned int i;
    i = time*4;
    while(i--);
}
#define CLC PAout(6)
#define DAT PAin(5)

//璇绘暟鎹?
unsigned int ReadAngleValue(void)
{
    unsigned int suc=0,suc1=0,suc2=0;
    unsigned char i,j;
        int8_t SES[]={0};    
      CLC=0;
            delay_us(2);
            for(i=0;i<36;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++)
            for(j=0;j<32;j++)//26 28个 32个 
            {
                    
                suc+=SES[j]<<(25-j);//编码器数据是高位在前,需要移下位
                //suc+=SES[j]<<(31-j);
            }
            
            suc = (suc>>8)0x0FFFFF;
            suc1=(float)suc*360/262144;
            suc=0;

    
    return  suc1;

int main(void)
{
    GPIO_InitTypeDef GPIO_Initure;
     
    HAL_Init();                                     //初始化HAL库    
    Stm32_Clock_Init(RCC_PLL_MUL9);               //设置时钟,72M

    PIN_Init();
    while(1)
    {
        
        temp = ReadAngleValue(); 
        
        Delay1(0x7FFFFF);

    }
}

得到角度值:

  • 20
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: STM32F103是一款由STMicroelectronics公司生产的32位ARM Cortex-M3内核的微控制器系列。它具有丰富的外设接口和功能,适用于各种嵌入应用,如通信、工业控制和汽车电子等。 SSI(Synchronous Serial Interface)是一种同步串行接口,可用于数据的传输和通信。它适用于需要高速数据传输和可靠性的应用场景,如传感器接口、存储器接口和通信接口等。 在STM32F103中,SSI是通过SPI(Serial Peripheral Interface)外设实现的,SPI是一种常见的SSI协议。SPI包含一个主设备(master)和一个或多个从设备(slave)。主设备控制通信并在时钟周期中发送和接收数据,从设备则根据主设备的控制进行响应。 STM32F103具有多个SPI外设,每个外设可以配置为主设备或从设备。每个SPI外设都有自己的数据寄存器、控制寄存器和状态寄存器,可以灵活地进行配置和控制。SPI外设的通信速度可根据需求进行设置,支持多种传输模和数据位宽的选择。 通过配置STM32F103SSI(SPI)外设,我们可以实现与其他设备的可靠数据传输和通信。例如,我们可以将STM32F103连接到其他传感器或存储器,通过SPI接口读取数据或写入数据。我们还可以将多个STM32F103之间通过SPI接口进行通信,实现数据的互传和协同工作。 总之,STM32F103SSI(SPI)的结合为我们在嵌入系统中实现可靠的数据传输和通信提供了强大的功能和灵活性。 ### 回答2: STM32F103是一款32位ARM Cortex-M3内核的微控制器芯片。它具有强大的性能和丰富的外设,适用于各种嵌入应用。 SSI(Synchronous Serial Interface)是一种同步串行接口通信协议,用于在芯片之间进行高速数据传输。它可以支持多种通信,包括SPI(Serial Peripheral Interface)和Microwire等。 在STM32F103中,它内置了多个SSI接口。这些接口通常用于与外围设备的通信,如存储器、传感器、显示器等。通过SSI接口,STM32F103可以发送和接收串行数据,并实现高速数据传输。 对于SPI模SSI接口,STM32F103提供了多个片选引脚,可以同时与多个外围设备进行通信。它支持全双工通信,可以同时发送和接收数据。此外,它还内置了硬件上拉电阻,简化了外部器件的连接。 在使用STM32F103SSI进行通信时,首先需要配置相应的寄存器,设置通信、速度等参数。然后,可以通过读写寄存器来控制和传输数据。STM32F103还提供了中断和DMA功能,能够进一步提高通信效率和降低CPU负载。 总之,STM32F103SSI具有强大的通信功能和灵活性,可以满足各种嵌入应用的需求。它们的结合可以实现高速数据传输,并简化通信的复杂性。 ### 回答3: STM32F103是意法半导体(STMicroelectronics)推出的一款32位Cortex-M3内核的单片机产品。它具有丰富的外设资源和强大的计算能力,适合于各种微控制器应用。 SSI全称为Synchronous Serial Interface,是一种同步串行接口标准。它可以通过时钟信号同步传输数据,适用于多种通信协议,如SPI、MICROWIRE和SSI等。 STM32F103单片机可以支持SSI接口,并且具有多个SPI外设,可以方便地与其他器件进行通信。SPI(Serial Peripheral Interface)是一种同步的串行通信接口,适用于在嵌入系统中连接外设芯片。 使用STM32F103SSI接口,可以通过SPI协议与其他外设进行通信,实现数据的传输与交换。STM32F103的SPI支持全双工通信,可以实现同时发送和接收数据,并且具有多种数据传输模和时钟极性、相位等参数的设置。同时,该单片机还提供了丰富的中断和DMA功能,方便实现高效的数据传输。 通过使用STM32F103SSI接口,我们可以轻松地与各种外设进行通信,如传感器、存储器、无线通信模块等。而且,该单片机还提供了丰富的软件库和开发工具,方便开发人员进行开发和调试。 总之,STM32F103SSI接口的结合,为嵌入系统的通信提供了一种灵活、高效的解决方案,可以满足各种应用的需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值