【ARM】仅用三个GPIO口实现串行SSI信号读取

关键词:磁编码器AS5040,、ARM通用定时器、SSI接口

       本篇文稿主要是探讨一下用ARM上的通用定时器,也就是俗称的GPIO口,读取SSI串行信号的问题。

       串行数据信号传输有很多协议,常见的包括RS232,RS485,SPI等,ARM板一般都会有USART串口、SPI接口,使用时直接可通过软件实现。但ARM芯片暂时还没有SSI接口,通过查阅资料,可设置SPI相应模式实现SSI信号数据的接收【详见正点原子编写的STM32F4开发指南-库函数版本_V1.1-第23章】。

       当前接触到的旋转绝对编码器大多是SSI接口,碰到ARM板上的SPI接口被占用或未引出,着实是一件麻烦的事。但既然是串行数据传输,必然是可以通过ARM芯片上普通的GPIO口读取的。本次实验所用到的ARM芯片型号为STM32F415ZGT6,三斯12位绝对型旋转编码器HAE18U5V12A1(原理同磁编码器AS5040),本次实验根据板子的实际情况选用的GPIO口为PC6、PC7、PE5(也可选用其他空闲的端口).

       先看一下12位绝对编码器的SSI串行信号:


图1. 12位编码器SSI串行信号

信号包括三个:使能CSn,时钟CLK,编码器数据DO。一个完整的输出数据DO包括前12位有效数据和后6位校验数据,共18位。如此以来便不难实现信号的读取,只需将三个GPIO口分别设置为使能端口、时钟端口和数据接收端口即可。

       步骤一:首先将PC7设置为复用功能PWM输出。查阅STM32F407ZGT6芯片手册(P57,stm32f4xx的芯片手册都差不多)可得PC7复用TIM3的第二个通道。相关代码见【3】pwm.c。输出的PWM作为时钟信号用,本实验设置的时钟频率(也即PWM频率)为2kHz。

图2. PC7复用功能

图3. PWM输出波形(用作时钟信号)

       步骤二:其次,将PC6用作使能端口ÿ

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值