Sangzhenhua2010 发表于 2024-1-30 11:05:33

fisholive 发表于 2023-10-7 21:59
梁工,

   我在试产发现,这个程序1/10概率不能正常启动, 不得已写了下面重启程序(遇到异常,让马达重 ...

换相时间数组的初值和启动阶段的换相时间是两个概念。
启动阶段的换相时间是完全的人为延时拖动。
而换相时间取得是两个过零点之间的时间。          我在测试中,发现这个初值也是从梁工原来的8000数值改到400,都差别不大,启动到进入比较器换相闭环运行,都或多或少有一些磕碰

Sangzhenhua2010 发表于 2024-1-31 13:09:28

梁工 发表于 2024-1-26 23:18
换相时刻不对造成的。

梁工,我想问一下。这个程序,是适用于很多款电机(比如测试了多款电机),还是说需要根据每款电机的不同,修改启动或者比较器中断函数内参数?

梁工 发表于 2024-1-31 15:54:28

Sangzhenhua2010 发表于 2024-1-31 13:09
梁工,我想问一下。这个程序,是适用于很多款电机(比如测试了多款电机),还是说需要根据每款电机的不同 ...

性能差别很大的电机,改下启动的时间参数,以及堵转限时的时间参数即可,程序逻辑不用改动。

Sangzhenhua2010 发表于 2024-2-2 11:20:46

                之前在浏览STC官网的时候,看到梁工开源的无刷电调方案,就排在了DIY计划上。
   真正开始实施,是从2023年12月开始的。前前后后打了十多块板子,终于在最后做出了比较满意的电调板子。
   实现的功能:1、上电唱歌,输入信号正常后再次唱歌(这部分迁移的萝莉的无刷电调方案);2、外接接收机油门通道PWM信号,实现平滑调速

下面把自己一步步的学习过程分享给大家,大佬们不喜勿喷
1、      首先拿到了STC梁工的开源方案,利用两个星期的闲暇时间,把代码通读了一遍。包括里面涉及到的以前不曾了解的知识。比如,换相步骤、比较器的应用,重点是为什么需要消磁?过零检测后为什么需要延时30电角度等较难理解的问题。在自认为把梁工的方案原理上吃透之后,就开始实施复刻了。但是实际遇到的问题却并不是理论通了就可以很顺利的。
2、      首先根据梁工的方案和原理图,我自己又结合了自己之前做过的一些DIY,将电路减缓了。由于我之前使用STC8H1K08芯片比较多,而梁工采用的是STC8H1K28主控。两者都是8H系列的芯片,所以我先把代码重新整合,改写成适用于STC8H1K08芯片的代码。之后是打板买原件。大约一周后,收到了板子,焊接完成后,上电。电机能够启动,但是无法进入正常的比较器中断闭环运行,或者说是不能够稳定进入。在大油门状态下,MOS发热也比较严重。然后试着更改比较器中断函数里面的一些消磁延时和过零延时的参数。但是效果不理想。最后试着试着,MOS就烧掉了。很是郁闷。
3、      有了上次的失败后,我有点怀疑这个方案是否具有通用性。然后我又打了一版萝莉大佬的无刷电调开源方案。在板子收到之前,我把萝莉大佬的无刷电调代码,也通读了一遍。发下萝莉大佬的方案里面有一些优点和缺点。
优点在于,萝莉大佬在调试电调的过程中,插入了很多调试引脚输出。也就是通过空闲的引脚,在程序的某些位置,来观测程序的运行情况。这个方法非常好,后来我也采用了这种方法,才发现了自己代码中的一些问题。
缺点是,萝莉大佬在调试代码时,可能急于求成,搞得比较器中断服务函数中的代码及其混乱。这时候才感觉到梁工的代码真的非常工整,逻辑清除。所以萝莉大佬的代码比较器中断服务函数中的部分,可读性很差。
不过惊奇的是,在收到板子后,焊接上电,竟然一次性就可以运行成功。真的感叹萝莉的调试能力。但是同时也发现萝莉无刷电调方案的一些问题:①电调运行起来mos发热比较严重,该问题可能和换相时刻不合适有关;②电调无法在进入低速运转区域,这是代码里面设置的结果,代码中设定了电调运行过程中的最低占空比。我在试着将该占空比调低后,运行变得不稳定。
4、      有了以上两次经验之后,我又重新设计了基于STC8H1K08芯片的STC梁工无刷电调电路板,其中的一些驱动部分,改用了萝莉的无刷电调电路,因为萝莉的无刷电调电路较为简洁,也是经过实际验证的。同时也开始逛逛论坛,寻求一些思路。
5、      收到第二版STC8H1K08电调板,就开始调试了,这次调试算是比较认真和深入的。
首先采用了萝莉的启动方案,改了一些启动参数,然后在将电机拉动后,再继续让电机以1ms的换相时间运行一段时间,以此来观察电枢电压。如下图

这是第一次捕捉电枢波形,论坛上让梁工看了看,说是换相时刻不合适引起的波形两侧斜率不正确。这个是很好理解的,因为是固定延时换相,并不是通过比较器测量过零点,也没有经过比较精确的30电角度延时,所以导致波形虽然对称,但是两侧的斜率不正常。另外可以从波形上明显观察到空闲相续流引起的尖峰。
对无刷电调的理解是一点点深入的,调试也是一点点进步的,至少这次可以实现稳定的拖动运转,说明驱动电路和换步函数都是正确的。
第二步,捕捉比较器中断和换相时刻,进行时间对比。方法很简单,采用萝莉那种在程序中插入引脚输出。并使用逻辑分析仪进行捕捉。
得到的结果是这样的,其中0通道是进入比较器中断函数的标记,0通道是换相函数标记。

可以看出,只有一相进入了比较器中断。这让我很郁闷,也不得其解。难道芯片的比较器坏了?
然后又开始浏览论坛,把STC论坛中,无刷电调的帖子都看了一遍。发现一个比较重要的信息。就是电动势反馈电路的电阻选取的问题。

原贴是这样的,主要意思是,分压电阻的选择,要尽量保证给到比较器负极的电压在3V左右。这样是反思自己的电路,确实是有问题的,我原来采用的是10k与1.5k的分压电路,使用2S锂电池供电,那么到达比较器负极的电压可能只有7.4*1.5/(10+1.5)=0.96V,与3V差距较大,所以我将电路改成10K与4.7K分压。这样到达比较器负极的电压差不多就能达到7.4*4.7/(10+4.7)=2.36V
更换电阻之后,再次用逻辑分析仪进行捕捉,波形忘记保存了。但是结果我还记得,就是一个周期内,6步换相,可以得到3个比较器中断标记了。有效果,但是还没有全部活捉到。
然后我又试着把滤波电容,由原来的10nf,换成了100nf。再次测试,终于能够将所有的比较器中断都捕获到了。
然后调整了一些程序参数,电机可以比较稳定的运行了。但是在大油门的情况下,电机速度上不去。我估计和电容选大了有关系,需要在程序中补偿以下。但是再次测试时,又试着加大油门,竟然把mos烧了。估计还是换相时刻不合适,导致发热严重。其实心里也清除,换成大点的电容,本身就比较牵强。
6、      再次静下心来思考,莫非是强行移植程序,导致的问题?还是STC8H1K08芯片的比较器功能有缺陷?
抱着不死心的精神,不能放弃,得从头再来。于是采用梁工原版的程序和原版的芯片,STC8H1K28,再次打板。因为实在是觉得已经把整个原理吃透了,实在是步甘心止步于萝莉的方案,毕竟萝莉的方案也存在一些问题。
一周后,收到板子,原版程序,上电启动,启动抖动,无法进入闭环运行,不成功。
忘记其中的过程了。调了一些参数可以启动了。但是经过测试,无法在大油门的情况下进入高转速。
于是把100nf电容,重新换成了10nf电容,效果是大油门可以进入高转速,但是容易丢失过零检测比较器中断,导致电机转动有“电波”声,观察调试端口输出,存在过零检测丢失现象。通过细致分析,是换相过后的消磁时间把进入比较器的中断躲过去了。然后再分析,发现,其实换相续流引起的反电动势尖峰,在高速情况下,是产生不了比较器中断的,也就是是说高速情况下是无需消磁延时的。于是果断取消消磁延时,奇迹就出现了,使用1306电机,基本上可以稳定启动,并调速云畅,大油门下,也可以高速运转,捕捉高速情况下的换相间隔能小于100us,实际上可能可以更小。
此次DIY还没有结束,还需要再调试。先把自己的经验记下来。

上面的内容可以不看,我再次把关键点总结以下:
1、      分压电阻选取要合适,保证进入比较器负极的电压在3V左右
2、      滤波电容要选择得当,不能太大。
3、      调试时,可以使用调试引脚输出,用逻辑分析仪观测,效率比较高,我觉得比用示波器观察方便(主要我对示波器使用不够熟练)
4、      想要学习,尽量先从原版入手,即使是想要移植,应该先验证完全后再开展

梁工 发表于 2024-2-4 12:26:50

Sangzhenhua2010 发表于 2024-2-2 11:20
之前在浏览STC官网的时候,看到梁工开源的无刷电调方案,就排在了DIY计划上。
   真正开 ...

进步可喜可贺!
我的程序是比较通用的,我买了超过10种电机,从10mm的到平衡车的200mm电机,速度从3万转到600转,都可以驱动,但是启动速度和一些时间参数要适当调整,我发布的程序是比较合适2212电机或与之近似特性的电机。
1、电机驱动起来还算容易,但是要做好柔顺驱动和带载快速调速,软硬件要配合好。而对于电机驱动的原理一定要搞透,对电枢波形一定要熟悉、理解,否则很难做好。
2、驱动时MOSFET发热、烧毁,都是因为换相操作不正确造成。同一个半桥的上下两管是不会同时导通的(会有适当的死区),所以不应该出现烧管的情况,发热是因为换相时刻不对,30度角延时不对,效率低下导致。0度过0时,此时供给线圈电流,磁力线跟磁铁的同向,没有产生转矩,拜拜耗电并发热。MOSFET驱动速度慢也会导致管子发热,这就是为什么我的驱动电路会用两个三极管来提供充放电速度的原因,一些驱动电路上管只用一个电阻,会导致栅极电压变化缓慢,管子处于放大区时间长,发热。其实最好的方法是用驱动IC,由于增加成本,所以公司要求取消3片驱动IC,而高压、大电流的,我会用驱动IC。
3、驱动电路是 比较通用的,不管是带霍尔还是不带霍尔,区别在于带霍尔的不需要过0检测,不带霍尔的要过0检测。
4、6拍驱动,比较器会有6次中断,分别对应每相反电动势的上升、下降过0点。下图是典型的电枢波形,里面的曲线就是反电动势,叠加了PWM波形,是一个对称的波形,越对称说明换相时刻越精确。左边的第一条竖线就是线圈的退磁时间,低内阻、小电感的电机会很短时间,但是那种水泵电机会长达600us。


Sangzhenhua2010 发表于 2024-2-5 21:17:09

梁工 发表于 2024-2-4 12:26
进步可喜可贺!
我的程序是比较通用的,我买了超过10种电机,从10mm的到平衡车的200mm电机,速度从3万转 ...

谢谢梁工的开源和指导。
您写的代码逻辑非常清楚。我现在做的无刷电调,即使是高速运转,发热也很正常。
通过测试,空闲相续流产生的尖峰脉冲并不会产生比较器中断,所以消磁延时那部分代码可以省略掉。当然,也可能和反电动势的滤波电容有一定关系。
再次谢谢梁工,也谢谢STC,让我有机会学习了这么好的项目。

神农鼎 发表于 2024-2-9 09:31:03

龙年新春捷报:
STC8H2K32U-45MHz-LQFP32/TSSOP28 的 USB 型 MCU 已开始制造光罩流程中
RMB1.3 的 USB, STC8H2K32U-45MHz-LQFP32/TSSOP28/20,SOP16, 4月开始供货
51世界火热的夏天全面来临 全面 进入 USB 时代 !新增硬件32位乘除法器MDU32C
硬件USB 支持 仿真/下载, RTC 实时时钟, 年/月/日/时/分/秒,星期
真12位ADC, 144MHz-16位高级PWM新增硬件移相功能
32K Flash, 2.5k SRAM, USB, 双串口/I2C/SPI, 轨到轨比较器,12位ADC, PWM
串口1/串口2:
===都支持串口接收硬件超时侦测,硬件奇偶校验
===都支持帧错误数据检测和自动地址识别
T11,强大的24位低功耗定时器/系统定时器,支持低功耗唤醒
P1.2口在P5.4口上共享,P1.0/P1.1的全部数字功能可以交换

STC8H2K32U要让51成为永恒的经典:钻石恒久远,51永流传

======================================================================

RMB0.99 的 USB, STC8H2K08U-45MHz-TSSOP20/SOP16,已开始供货
51世界火热的夏天全面来临 全面 进入 USB 时代 !

神农鼎 发表于 2024-2-9 09:50:45


梁工 发表于 2024-2-12 15:46:34

Sangzhenhua2010 发表于 2024-2-5 21:17
谢谢梁工的开源和指导。
您写的代码逻辑非常清楚。我现在做的无刷电调,即使是高速运转,发热也很正常。
...

如果加大滤波电容,则会造成0点延时,这个要注意。

垂柳工作室 发表于 2024-2-13 16:45:32

无人机电调能适用吗?
页: 8 9 10 11 12 13 14 15 16 17 [18] 19 20 21 22 23 24 25 26 27
查看完整版本: BLDC三相无刷直流电机驱动-8H系列/32G系列-无HALL, 12万转, 视频讲解,改进启动算法