基于FPGA的FOC电流采样Bug调试记录

#基于FPGA的FOC电流采样Bug调试记录

博主在调试FOC闭环控制中遇到了一个bug,冥思苦想两三天,最终一步步地调试时序,最终找到了bug,在调试过程中学会了debug的思想,也明白了调试过程中要循序渐进,采用一步步的排除bug,先排除硬件bug,在排除软件Bug,软件bug通过时序一步步排除问题,最终找到是哪个环节出了问题,谨以此博客来记录这次难忘的调试经历。

Bug现象

本次FOC出现的BUG主要是电流采样的问题,电流采样是针对三相电机的相电流进行采样,正常情况下应该是复制相等相差120°的正弦波,然而我采出来的是相位相差120°,幅值却相差迥异的正弦波。

通过上位机测出的ADC输出的Ia、 Ib 、Ic的ADC值如下图所示(范围为0-4095),其中两相电流的ADC值为900多、另外一相位3000+,相位是正常的,幅值却相差很大。

三相重构电流的波形如下图所示。从图中也可以看出异常情况。

电机正常运行时,其三相电流应该如下图所示。

preview

而我出现的bug如下图所示,电流采样是FOC闭环控制的关键所在,如果电流采样出现问题,那么电机必不可能实现FOC控制,因此如若想要实现电机FOC闭环控制,要保证电流的采样正确。

img

调试过程

根据现象,首先思考是电流采样环节出了问题,通过分析潜在的bug原因有这几方面:

  1. 硬件电路焊接错误或接触不良
  2. 电机本身就存在故障
  3. 直流偏置出现异常,所以导致幅值出现偏移
  4. 软件代码逻辑出现问题
  5. 芯片出现问题(概率极低)

针对这三个方面的问题,要进行一步一步的判断和分析,原因1方便判断,用万用表一步步地测量几个关键信号的电压及导通状态,即可判断出并不是硬件电路的焊接和接触问题。

为了验证是否是直流偏置的问题,应该首先让电机工作在开环FOC状态下,看电机在开环条件下的电流信号是否正常,结果发现电机在开环条件下正常转动,但电流采样仍处于上述的异常状态,通过电流钳测三相电机的相电流,可以看出幅值、相位正常,**因此可以排除是电机的问题。**为了验证是否是直流偏置的异常,正常情况下应该是1.2V的直流偏置信号,这个偏置信号是为了使ADC的输入采样点压范围为0-3.3V,通过示波器观察直流偏置信号发现是一切正常,同时观察到采样的波形也是三相相差120°的正弦波。这说明ADC侧的输入波形也是正常的。因此故障的范围进一步缩小,ADC输入侧信号波形正常,而输出侧波形异常,因此一定是采样转化的过程中出现问题。初步排除硬件问题。

img

调试到这里我意识到大概率是软件代码的问题,但ADC转化的代码通过modelsim仿真过时序,一般情况下不会出现问题的,但现在已排除了硬件的问题,所以有且仅能是软件的问题,AD是通过SPI来进行传输数据的,因此我通过singal tap来检测FPGA内部信号,主要检测SPI的输入输出端口的数据是否正常。

这里主要关注SPI的输入端(即AD输出端的数据),A、B、C三相的十进制数据分别为1987、1983、1981。与AD输入端的模拟信号相符合,这说明AD转化部分是正常的,有可能是在SPI读取数据中出现了问题,通过复杂的内部信号debug,最终发现读取数据的SPI miso输入端端口数据(AD输出端端口数据)时,16位数据整体右移一位,通道位数据占据了数据位的数据。从而导致出错,但反复查代码,仍未找到哪里出现了bug。

bug原因

刚开始以为是Verilog代码中沿下降沿采集数据,16位数据中只采了15次数据,按照时序分析,可能是SCK第一个下降沿的数据没有采进去,但修改采样时机,仍然出现这个问题。

经过分析,我觉得真正的问题不在于少采了1bit,其实当初我应该是考虑到少采1bit也是没问题的,反正通道号我们也不要。真正的问题在于在sck上升沿采样是不稳的,我现在是sck上升沿采样。我记得你提到过应该下降沿采样,如上图所示,蓝框框的12个上升沿是现在的采样点,但问题就来了,此时miso是处在跳变的边沿的,不稳。如果采到边沿后,就是对的。如果采到边沿前,就是错的,我这里对,你这里错的原因就在于,你用杜邦线了对吧,杜邦线的长短可能导致它采样到跳变沿前了。而我是专门画的FPGA板子,插上去的,采到的是跳变沿后。所以应该改成sck下降沿采样,此时miso是稳的,杜邦线拉多长都不怕。

核心原因就是因为应该是sck下降沿采样,但程序中写的sck上升沿采样,然而如果采用上升沿采样,我又采用的杜邦线,杜邦线的长短可能导致它采样到跳变沿前了。sck是输出,miso是输入,sck从fpga传到ad7928,miso再从ad7928传回来,如果整个路径很长,在fpga侧看来,就好像miso右移(延迟)了一段时间。这样的话就是相当于是四根线的延迟叠加了。其实这里不该这样的,因为是高速spi(sck频率十几mhz),常规做法应该是画到一个板子上,拉杜邦线有问题也是正常。高频信号线好像应该尽可能短,最好应该是要做出板子对插的格局。但代码确实应该改成下降沿采miso,这样能容忍更长的杜邦线。

最终解决了这个问题,得到了三相电流波形,如下所示

debug的步骤及经验

SPI时序正常就好,但主要你要直接看看SPI波形里面的读数

直接通过看SPI波形来看ADC的读数,看看偏置是否也不正常

我把这种debug思想叫做二分debug法,步骤是:

  1. 发现问题:ADC读数不正常
  2. 用经验思考问题可能出在什么地方,尽量想全,不要有侥幸心理漏下任何一个可能。比如这个问题里,可能出问题的环节有:A.电压本身在板子上就不对了 B.读取电压的ADC读取器不正常 C.读取ADC电压的读取器正常,但数据在后级逻辑中的传播不正常
  3. 用一定的手段排查问题出在哪个环节。比如我上次让你用示波器直接测板子上SOA,SOB,SOC的波形,就是为了排除A

一般除了问题,首先要思考出来一条链:A->B->C->D->E->F……,每个环节都有出问题的可能。二分debug法的思想就在于,从中间一个环节检查是否除了问题,比如查看C->D传递的数据是否有问题,如果有,那么问题就缩小到A,B,C环节。如果没有,那么问题就缩小到了D,E,F环节。然后递归继续二分

关于杜邦线的问题

杜邦线会造成信号延迟,尤其是高频信号延迟,而不是衰减

一般经验上讲,对产品设计,>10mhz的信号都不要拉杜邦线。

关于杜邦线的问题

杜邦线会造成信号延迟,尤其是高频信号延迟,而不是衰减

一般经验上讲,对产品设计,>10mhz的信号都不要拉杜邦线。

但原型机设计可以不那么考虑稳定性,拉杜邦线也行,只要能跑就行

如果本博客对您提供了帮助,那就麻烦点个赞吧

  • 9
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
项目背景1.1 AD转换 AD转换就是模数转换。顾名思义,就是把模拟信号转换成数字信号。主要包括积分型、逐次逼近型、并行比较型/串并行型、Σ-Δ调制型、电容阵列逐次比较型及压频变换型。 A/D转换器是用来通过一定的电路将模拟量转变为数字量。模拟量可以是电压、电流等电信号,也可以是压力、温度、湿度、位移、声音等非电信号。但在A/D转换前,输入到A/D转换器的输入信号必须经各种传感器把各种物理量转换成电压信号。 AD转换的技术指标,一般有如下几个: 1. 分辨率(Resolution) 指数字量变化一个最小量时模拟信号的变化量,定义为满刻度与2^n的比值。分辨率又称精度,通常以数字信号的位数来表示。 2. 转换速率(Conversion Rate)是指完成一次从模拟转换到数字的AD转换所需的时间的倒数。积分型AD的转换时间是毫秒级属低速AD,逐次比较型AD是微秒级属中速AD,全并行/串并行型AD可达到纳秒级。采样时间则是另外一个概念,是指两次转换的间隔。为了保证转换的正确完成,采样速率 (Sample Rate)必须小于或等于转换速率。因此有人习惯上将转换速率在数值上等同于采样速率也是可以接受的。常用单位是ksps和Msps,表 示每秒采样千/百万次(kilo / Million Samples per Second)。 3. 量化误差 (Quantizing Error) 由于AD的有限分辨率而引起的误差,即有限分辨率AD的阶梯状转移特性曲线与无限分辨率AD(理想AD)的转移特 性曲线(直线)之间的最大偏差。通常是1个或半个最小数字量的模拟变化量,表示为1LSB、1/2LSB。 4. 偏移误差(Offset Error) 输入信号为零时输出信号不为零的值,可外接电位器调至最小。 5. 满刻度误差(Full Scale Error) 满度输出时对应的输入信号与理想输入信号值之差。 6. 线性度(Linearity) 实际转换器的转移函数与理想直线的最大偏移,不包括以上三种误差。 其他指标还有:绝对精度(Absolute Accuracy) ,相对精度(Relative Accuracy),微分非线性,单调性和无错码,总谐波失真(Total Harmonic Distotortion缩写THD)和积分非线性。
FOC(Field Oriented Control,磁场定向控制)是一种电机控制方法,它可以实现电机的高效率运行。FOC电流采样FOC控制中的一个重要环节,用于测量电机的电流值并提供给控制器进行调节和控制。 然而,FOC电流采样也存在干扰的问题。主要有以下几个原因: 1. 电流传感器精度问题:FOC电流采样通常使用电流传感器进行测量,但这些传感器可能存在一些误差,导致采样电流值不准确。传感器的灵敏度、线性度等指标可能会有误差,从而引入不必要的干扰。 2. 器件损耗问题:FOC控制中,电流传感器需要通过放置在电机上的电流采样电阻来进行电流测量。这个电阻本身会引入额外的电阻损耗,从而影响电机控制的精确性和效率。 3. 环境干扰问题:在实际应用中,FOC电流采样还可能受到外部环境的干扰。例如,电机周围的电磁干扰、电源波动等因素都可能对电流采样的准确性产生影响,导致测量到的电流值存在一定的误差。 为了解决FOC电流采样中的干扰问题,可以采取以下措施: 1. 优化传感器和采样电阻的选择和使用,确保其精度和稳定性,在选择器件时注意其灵敏度、线性度等重要指标。 2. 进行有效的电磁干扰屏蔽措施,例如使用屏蔽罩或屏蔽材料来隔离电机和传感器与外部环境的干扰。 3. 优化控制算法,通过滤波、校准等方法对采集到的电流数据进行处理,减小干扰对控制器的影响。 综上所述,FOC电流采样确实存在一定的干扰问题,但通过合理的器件选择和使用、有效的干扰屏蔽以及优化的控制算法等措施,可以减小这些干扰带来的影响,提高FOC控制的准确性和稳定性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值