本帖最后由 摩天轮1111 于 2016-2-10 18:22 编辑
看到很多朋友到处发帖问这个TLE5012b的角度读取例程,其实不怎么难的东西,关键还是要你自己详细读取手册才行,这里我就放出个差不多的代码吧,帮助那些已经攻占了很久的朋友,如果你攻占了很久,一看我代码你就一目了然,如果你没有研究,那抱歉你可能看不懂,请继续回去查看手册,我这个是自己用的代码,工作读数很正常。
1.首先介绍一下TLE5012b,这个是英飞凌的一个磁传感器,很跨时代的一个产品,综合性能都很高,15位解析度,20khz刷新率,典型8mhz的spi时钟,我用了9mhz也正常,呵呵,因为stm32的硬件spi 72M分频,只能8,16,等等,没法凑到8MHZ,只能凑到9mhz,也无可厚非啊,反正tle没说不能9MHZ,我就试了9mhz,可以的
2.关于硬件的接线,因为tle是3线制的spi,也就是data是一根线,仔细看手册你会发现,手册上说了,tle收mcu指令的时候,data是高阻态,tle发数据时候是推挽模式,那么硬件怎么用呢,把stm32的mosi和miso连接在一起,因为miso是配置成为复用浮空输入的(ps如果你在操作spi的时候miso配置的是复用推挽,说这里spi应该配置成复用推挽,我只能说,你学习不用脑子,把stm32的spi的miso配置成为复用推挽是错误的,正确应该配置成为浮空输入,之所以错误的也能用spi正常工作,请仔细看stm32的手册,查找为什么配置错误了也能工作,确实是能工作的,原因手册上面看明白就知道为什么了)miso是浮空输入,这个可以不用管了,管mosi,这个是首先要发数据的,然后发完指令之后,要发空指令,目的是为了让硬件sck工作,使得tle能发出来数据,如果你用开漏的模式,也就是mosi配置成为开漏的话,你不需要把tle配置成为开漏,硬件连接如下图
,
只要你先是操作mcu的mosi发指令,tle会收到,然后操作mcu的mosi发送FFFF,切记全是F,是16位的,开漏模式发F等于将mcu的mosi释放对总线的控制,这时候tle控制mosi总线,也就是data总线,那么miso就能收到了,一切就都正常工作了
3.如果你想要速度更快一点,那就要把mcu的mosi配置成为推挽输出,依然可以用上面的电路,也可以把这个上拉电阻去了,不去等于驱动能力更强一点,原理是,首先配置成为推挽,发指令的时候,tle的data是高阻抗,没有关系,tle收到指令,然后注意这里,操作gpio的寄存器,给mosi配置成为复用开漏输出,这步完成之后,发送0xFFFF,tle接管data总线,它变成推挽输出,而这时候的mcu的mosi是开漏,等于释放了总线,miso就能收到tle发来的数据了。
4.好了,基本操作都说的很清楚了,我知道有些朋友可能喜欢代码,其实我个人更喜欢思路,不喜欢看别人代码,尤其别人写代码,注释太少,思路不明了,看起来麻烦,这里我放出示例代码,和注释,思路还是比较清楚的,仅供参考,欢迎有兴趣的朋友一起交流(实例代码取消了,因为一些不愉快的事,这里有问题,论坛回帖讨论,基本思路上面给的很清楚了)
|