永磁同步电机FOC调试记录(二)

简介

之前的项目使用的是F407+绝对式编码器,后边进一步升级,使用了H743芯片+旋转变压器的形式实现FOC控制,但是旋变的形式没有开发位置控制,只有速度控制,项目还在推进中,记录一下目前已知的调试过程,实际上基本就是代码移植(F407–>H743)以及旋变的解码

代码移植

之前一直以为代码移植是一个比较简单的工作,但实际上随同为HAL库,同样存在某一些函数的名称更换,以及一些函数的功能、入口参数有一些不同的问题。
主要的问题是时钟配置问题,目前为止还没有找到一个非常浅显易懂的讲STM32时钟配置的教程,如果有遇到的小伙伴也欢迎推荐交流,所以之前407的板子用的是硬石程序里的时钟配置,而后边移植到743上之后,由于本人的学习路径已知是正点原子那一套,所以直接用了基于正点原子的Template工程开发,导致在时钟配置上遇到了一些问题:

  • 调试的时候主函数进不去
    • 可能是时钟配置出错,建议选用一家的配置模板或者直接用CubeMX生成的工程文件
    • 可能是没加Cache_Enable()函数,加上或许就好了
  • 之前一直没弄懂PWM生成部分的逻辑,通过这次代码移植弄懂了
    • 这套代码使用的事中心对齐模式3,也就是说在这种情况下生成了一个三角波才完成一个计数周期,为什么这样做,是因为最开始的时候使用的是电阻采样的方式获取线电流,需要等下管开通的时候进行电压采样,正好一个时钟周期可以生成一个中断,那么程序就会等到这个中断出现之后再进行采样,正好就是在下管关闭的时候采样了
  • 同样由于中心对齐模式3,导致了PWM周期实际上是时钟周期的两倍,要注意这个问题

旋变调试

旋变调试实际上没有什么困难,主要是旋变芯片选型的SPI配置,这个项目选用了ADS1205芯片,中间遇到了一个小插曲,是旋变芯片怎么初始化都没有信号,最后发现是RESET引脚的电平给反了,换了一个RESET芯片就好了,芯片没买到之前直接把之前的RESET芯片吹下来也可以用。由于ADS1205芯片的RESET有比较严格的时序要求,即必须在供电电压达到4.5V之后才能输出一个电平跳变,所以采用了一个独立的RESET芯片而不是通过单片机引脚RESET的方式。
后边就是调试SPI的过程,遇到的唯一问题是SPI初始化的时候速率不能太高,这个问题我发现很多博客和教程都没有提到,但也有可能是我自己本身程序的问题。我在自己打的板子和正点原子的开发班上都试过,如果初始化的时候给的分频系数太小(初始化频率过高),SPI引脚根本没有时钟信号,但是如果初始化的时候给一个较低的频率,后边真正用SPI的时候再调整频率,就能够正常工作,具体的原理我目前也没有找到,希望有这方面经验的前辈能够指点迷津。
后边就基本上是一步步来,就能够正常读取SPI传回来的旋变数据了,把这套采回来的位置数据放到之前的程序里,理论上就能够实现FOC了,不过目前只调试到这里,后边如果还有进展可能会同步。

附上前文链接:永磁同步电机FOC调试记录(一)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值