搜索
bottom↓
回复: 48
打印 上一主题 下一主题

分享:无感BLDC启动源码(基于英飞凌AP08018可变电感感应法)

  [复制链接]

出0入0汤圆

跳转到指定楼层
1
发表于 2015-12-17 09:37:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
网上找的,没用过英飞凌,编译可以通过,不知是否能用

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

2
发表于 2015-12-17 10:31:09 | 只看该作者
不懂帮顶,希望高人评价一下。

出0入0汤圆

3
发表于 2015-12-17 13:33:36 | 只看该作者
什么编译器

出0入0汤圆

4
 楼主| 发表于 2015-12-17 15:02:17 | 只看该作者

程序里有说明,Keil C51

出0入0汤圆

5
 楼主| 发表于 2015-12-18 09:52:48 | 只看该作者
传两篇隐极永磁同步初始角检测相关文章

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

6
发表于 2015-12-18 17:29:19 | 只看该作者
反证法,如果很好用,那现在还讨论什么启动?

出0入0汤圆

7
 楼主| 发表于 2015-12-19 09:17:27 | 只看该作者
mandylion2008 发表于 2015-12-18 17:29
反证法,如果很好用,那现在还讨论什么启动?

难得大神围观,留下点干货呗

出0入0汤圆

8
发表于 2015-12-19 11:00:20 | 只看该作者
本帖最后由 mandylion2008 于 2015-12-19 11:53 编辑
xiangyuan_122 发表于 2015-12-19 09:17
难得大神围观,留下点干货呗


把BLHELI研究透,在这个经验基础上,做出适当改进就行了!
很少看到有人通读整个程序,倒是很多人说汇编难读,就这种态度和恒心是搞不了深一点的技术的。我自己为了多多吸收别人的优点,是把整个BLHELI通读和试验了的,所以才能知己知彼。本来想就BLHELI的软件架构和具体的关键函数在论坛上传的,我相信以自己的表达方式将是非常直接了当容易理解的,可后来想想还是算了,我相信99%的人得到后都会说,我早就知道了。





出0入0汤圆

9
 楼主| 发表于 2015-12-19 11:07:18 | 只看该作者
mandylion2008 发表于 2015-12-19 11:00
把BLHELI研究透,在这个经验基础上,做出适当改进就行了!
就像数学一样,聪明的人可以从一点点已知的条 ...

BLHELI也不是哪里都适用吧,电调上用一般也够了,但带重载也可以吗?比如压缩机?

出0入0汤圆

10
发表于 2015-12-19 11:15:56 | 只看该作者
xiangyuan_122 发表于 2015-12-19 11:07
BLHELI也不是哪里都适用吧,电调上用一般也够了,但带重载也可以吗?比如压缩机? ...

世界上从来没有可以照搬的东西。
我可以负责任的说,BLHELI的启动经过改进是可以启动压缩机的带载启动的,但这种情况下,用电感法最好!

出0入399汤圆

11
发表于 2015-12-19 20:25:13 | 只看该作者
感谢楼主,这个启动是类似这个帖子说的http://www.amobbs.com/thread-5626901-1-1.html无预位置?

出0入0汤圆

12
 楼主| 发表于 2015-12-20 09:23:15 | 只看该作者
R88 发表于 2015-12-19 20:25
感谢楼主,这个启动是类似这个帖子说的http://www.amobbs.com/thread-5626901-1-1.html无预位置? ...

是的,我也是看这个的,里面提供了一篇原理性的论文我觉得不错,但没有源码,英飞凌的这个源码算法和那篇帖子的类似,文档里有流程图,可以让刚接触电感(铁芯饱和效应)法的了解其实现

出0入0汤圆

13
 楼主| 发表于 2015-12-20 09:35:27 | 只看该作者
mandylion2008 发表于 2015-12-19 11:15
世界上从来没有可以照搬的东西。
我可以负责任的说,BLHELI的启动经过改进是可以启动压缩机的带载启动的 ...

如果单纯说可以,三段式同样可以启动,但要效果好,适应的范围广,我认为还是基于铁芯饱和的电感法,从原理上来看其算法鲁棒性确实比较好,跟电机参数关联不大,不需要电机凸极效应,主要比较几种通电模式下电流大小即可,当然,我还没具体去做,具体实现过程中有哪些问题会影响其适用性还不知,如果你认为电感法不可行,想必也是有遇到这方面的问题,你也可以提出来一起探讨。

出0入0汤圆

14
发表于 2015-12-20 10:39:48 | 只看该作者
xiangyuan_122 发表于 2015-12-20 09:35
如果单纯说可以,三段式同样可以启动,但要效果好,适应的范围广,我认为还是基于铁芯饱和的电感法,从原 ...

情况是这样的,因为很多人连方波都没有真正搞好,去谈论电感法没什么意义。
方波启动做好了,启动个压缩机真的没什么问题,我都给朋友试过了(很多高手都在论坛,我知道乱吹牛会被人鄙视的,我在外面跟搞技术的人交往,我是极其的低调,有时会让人产生轻视的感觉,但我感觉良好,因为如果搞的很高调,人家就不会说出一些有用的东西了,哈)。
我觉得应该在有一个扎实的基础上再去提高,不然一说什么都懂,一旦要拿出个可以实用的算法又不行,高校里面的人很喜欢这样,我不太喜欢这样,我要的是实践派风格。
对于电感法的启动,根据我以前做车用控制器的经验,可以做到重载零速启动,保证100%可靠,因为这个方法不同于公开的资料,应当是比较有价值的,所以很少提及。

出0入0汤圆

15
发表于 2015-12-20 14:10:16 | 只看该作者
mandylion2008 发表于 2015-12-20 10:39
情况是这样的,因为很多人连方波都没有真正搞好,去谈论电感法没什么意义。
方波启动做好了,启动个压缩 ...

膜拜下大湿

出0入0汤圆

16
发表于 2015-12-20 14:52:04 | 只看该作者
哈哈,强烈期望mandylion2008大侠稍微点拨一下,适可而止既可,就一个问题,无刷直流电机带重载起动,方波算法,讲讲大概思路,谢谢,非常感谢。

出0入0汤圆

17
发表于 2015-12-24 15:47:58 | 只看该作者
mandylion2008 发表于 2015-12-19 11:00
把BLHELI研究透,在这个经验基础上,做出适当改进就行了!
很少看到有人通读整个程序,倒是很多人说汇编 ...

哥!!!多么希望你还是讲讲BLHeli吧,就像写《电调攻略》那样的干货出来,BLHeli好难看懂啊 !

出0入0汤圆

18
发表于 2016-8-14 22:39:47 | 只看该作者
感谢无私的分享!

出0入0汤圆

19
发表于 2016-8-15 09:07:24 | 只看该作者
谢谢分享

出0入0汤圆

20
发表于 2016-9-23 21:21:46 | 只看该作者
不错的资料,好好研究一下

出0入0汤圆

21
发表于 2016-9-23 21:22:08 | 只看该作者
不错的资料,一定要好好学习一下!

出0入0汤圆

22
发表于 2016-10-4 13:51:02 | 只看该作者
这个是可以准确的判断电机初始位置的,只是启动的第一步。

出0入0汤圆

23
发表于 2016-10-5 19:50:58 | 只看该作者
留个记号

出0入0汤圆

24
发表于 2016-11-14 15:20:03 | 只看该作者
a409600516 发表于 2015-12-24 15:47
哥!!!多么希望你还是讲讲BLHeli吧,就像写《电调攻略》那样的干货出来,BLHeli好难看懂啊 ! ...

慢慢看,就是汇编看起来有点生涩,,

出0入0汤圆

25
发表于 2017-2-7 20:13:17 | 只看该作者
文档值得一看

出0入0汤圆

26
发表于 2017-2-7 20:27:24 | 只看该作者
mark                     

出0入0汤圆

27
发表于 2017-2-19 15:11:04 | 只看该作者
mark。。。。

出0入0汤圆

28
发表于 2017-2-20 22:52:18 | 只看该作者
本帖最后由 zlf66778899 于 2017-2-20 22:56 编辑

对定位函数分析了一下,请高手斧正
//*********************************************************************
//* This function detects the rotor position.  It's input parameter is
//* the previous rotor position.  It returns the current rotor position
//*********************************************************************
/*
!!!注意!!!
!>HallPatt数组的值是8进制数字
!>steady = 1时, 不产生变化的相未进行电流比较,但x和z的移位还是执行了


steady 为0时,顺次通过对ACB三相加以正反向脉冲电流的比较结果组合生产相应的位置
steady 为1时,则
        a> 先取得对应sense位置的下一预期位置与sense位置比较会产生变化的一相,
  b> 并对该相加以正反向脉冲电流取得比较结果
        c> 根据比较结果来判断是当前位置是sense位置还是sense的下一预期位置
对steady为1时举例,调用zerostart_sensor(2, 1)的情况如下
        a> y = ((HallPatt[2] & 7) ^ 2) & 7 = ((023 & 7) ^ 2) & 7 = 1
     如果当前位置是位置2的下一预期位置(位置3),B相的电流比较结果应该是1,
        b> 取得B相正反电流比较结果,有三种情况:
     1> 正向明显大于反向 x = 1, z = 0,已经进入位置3
                 2> 正向明显小于反向 x = 0, z = 0,未进入位置3
     3> 正向接近反向 x = 1 或 x = 0, z = 1,处于位置2和位置3的临界点
        c> 判断,
                 如果是b>步的比较结果是情况3>则if(z & y) x = HallPatt[sense] & 7;得以执行,x被赋值3;
                 如果是b>步的比较结果是情况2>则if(!(x ^ (sense & y))) x = sense;得以执行,x被赋值2;
                 如果是b>步的比较结果是情况1>则else x = HallPatt[sense] & 7;得以执行,x被赋值3;
调用zerostart_sensor(4, 1)的情况如下
        a> y = ((HallPatt[4] & 7) ^ 4) & 7 = ((046 & 7) ^ 4) & 7 = 2
     如果当前位置是位置4的下一预期位置(位置6)C相的电流比较结果应该是1,
        b> 取得C相正反电流比较结果,有三种情况:
     1> 正向明显大于反向 x = 2, z = 0,已经进入位置3
                 2> 正向明显小于反向 x = 0, z = 0,未进入位置3
     3> 正向接近反向 x = 2 或 x = 0, z = 2,处于位置2和位置3的临界点
        c> 判断,
                 如果是b>步的比较结果是情况3>则if(z & y) x = HallPatt[sense] & 7;得以执行,x被赋值6;
                 如果是b>步的比较结果是情况2>则if(!(x ^ (sense & y))) x = sense;得以执行,x被赋值4;
                 如果是b>步的比较结果是情况1>则else x = HallPatt[sense] & 7;得以执行,x被赋值6;
     
*/
unsigned char zerostart_sensor(unsigned char sense, bit steady)
{

        unsigned char x;
        unsigned char y;
        unsigned char z;
        unsigned char resultfor,resultrev;

        x=0;                                         //x is the rotor position
        z=0;                                         //to indicate that there is no significant difference between 2 current peaks
        y = HallPatt[sense] & 7;        //y is the expected commutation state
        y ^= sense;                                //y is now the bit that should change if the expected state is now the current state
        y &= 0x07;

        CC6_vLoadChannelShadowRegister_CC6_CHANNEL_3(0x20);
        CC6_vEnableShadowTransfer_CC6_TIMER_13();

        //取得A相正反电流比较结果
        if(!steady || (steady && y == 0x04))
        {
                resultfor = currentcompare(0x16);                //retrieve ADC conversion result of first current peak due to forward magnetic field in phase A
                resultrev = currentcompare(0x29);                //retrieve ADC conversion result of second current peak due to reverse magnetic field in phase A
                if(resultfor > resultrev++) x++;               
                if //if there is no significant difference between the 2 current peaks from phase A
                (
                        resultfor == resultrev ||
                        resultfor == (resultrev - 1) ||
                        resultfor == (resultrev - 2)
                )
                {
                        z++;
                };
        }
       
        z<<=1;
        x<<=1;

        //取得C相正反电流比较结果
        if(!steady || (steady && y == 0x02))
        {
                resultfor=currentcompare(0x25);                //retrieve ADC conversion result of first current peak due to forward magnetic field in phase C
                resultrev=currentcompare(0x1A);                //retrieve ADC conversion result of second current peak due to reverse magnetic field in phase C
                if(resultfor>resultrev++)x++;
                if //if there is no significant difference between the 2 current peaks from phase C
                (
                        resultfor==resultrev ||
                        resultfor==(resultrev-1) ||
                        resultfor==(resultrev-2)
                )
                {
                        z++;  
                }
        }

        z<<=1;
        x<<=1;

        //取得B相正反电流比较结果
        if(!steady || (steady && y == 0x01))
        {
                resultfor=currentcompare(0x19);           //retrieve ADC conversion result of first current peak due to forward magnetic field in phase B
                resultrev=currentcompare(0x26);           //retrieve ADC conversion result of second current peak due to reverse magnetic field in phase B
                if(resultfor>resultrev++)x++;
                if(resultfor==resultrev || resultfor==(resultrev-1) || resultfor==(resultrev-2))z++;  //if there is no significant difference between the 2 current peaks from phase B
        }

        if(steady)
        {
                if(z & y) x = HallPatt[sense] & 7;        //if the bit that is supposed to change(y) corresponds to the bit
                                                                                                                                                                //where the current peaks are almost the same(z), then the expected state is now the current state
                else
                {
                        if (!(x ^ (sense & y))) x = sense;
                        else x = HallPatt[sense] & 7;
                }
        }
        return x;
}

出0入0汤圆

29
发表于 2017-7-11 09:48:14 | 只看该作者
感谢!!!

出0入0汤圆

30
发表于 2017-7-11 12:01:56 | 只看该作者
不明觉厉!感谢楼上各位点评。

出0入0汤圆

31
发表于 2017-7-12 15:47:40 | 只看该作者
不错的资料,一定要好好学习一下!

出0入0汤圆

32
发表于 2017-11-2 13:17:46 | 只看该作者
xiangyuan_122 发表于 2015-12-18 09:52
传两篇隐极永磁同步初始角检测相关文章

试过,非凸极马达基本不可能实现

出0入0汤圆

33
发表于 2017-11-2 13:45:37 | 只看该作者
MARK一下,以后慢慢研究,最近在忙项目中!

出0入0汤圆

34
发表于 2017-11-10 10:02:00 | 只看该作者
难得的好资料,感谢楼主,改到自己程序里试试!

出0入0汤圆

35
发表于 2018-7-21 08:56:33 | 只看该作者
感谢分享

出0入0汤圆

36
发表于 2018-8-9 14:57:16 | 只看该作者
不错的资料,一定要好好学习一下!!!

出0入0汤圆

37
发表于 2018-10-12 15:01:15 | 只看该作者
我按照文档的意思尝试了下,发现电机转子在哪个位置,采回来的ADC值都差不多,很是怀疑可行性,楼主可否指点下。

出0入0汤圆

38
发表于 2018-10-21 16:57:20 | 只看该作者
zlf66778899 发表于 2017-2-20 22:52
对定位函数分析了一下,请高手斧正
//***************************************************************** ...

这段代码的源出处是哪里?

出0入0汤圆

39
发表于 2019-4-17 22:01:01 | 只看该作者
学习一下

出0入0汤圆

40
发表于 2019-6-18 12:33:02 | 只看该作者
学习一下,准备试验一下。

出150入0汤圆

41
发表于 2019-7-8 18:49:32 来自手机 | 只看该作者
好东西 收藏了

出0入0汤圆

42
发表于 2019-8-1 11:07:17 | 只看该作者
学习了

出0入0汤圆

43
发表于 2019-9-18 14:34:16 | 只看该作者
下载了,学习了

出0入0汤圆

44
发表于 2020-1-6 09:16:30 | 只看该作者
学习了谢谢

出0入0汤圆

45
发表于 2020-2-4 09:10:57 | 只看该作者
MARK      

出0入8汤圆

46
发表于 2021-1-19 09:44:57 | 只看该作者



有的电机只有80%的准确率。电机转子在特定的位置,还是会出现在全0和全1的无效位置。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

47
发表于 2021-11-25 10:54:41 | 只看该作者
zlf66778899 发表于 2017-2-20 22:52
对定位函数分析了一下,请高手斧正
//***************************************************************** ...

感谢楼主分享,英飞凌的这个文档确实挺有用

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

48
发表于 2022-7-17 11:52:24 | 只看该作者
在自己的板子上尝试了一下,发现经常测试不准确,反复测试,同一相正反测试,一时正向大于反向,一时反向大于正向,测试出来的转子所处扇区偏差大,不知道是什么原因。。

出0入0汤圆

49
发表于 2022-10-9 08:28:33 | 只看该作者
hfei1980 发表于 2022-7-17 11:52
在自己的板子上尝试了一下,发现经常测试不准确,反复测试,同一相正反测试,一时正向大于反向,一时反向大 ...
(引用自48楼)

大佬,您好。我也遇到了同样的问题,您解决了吗,可以指点一下方向吗?  谢谢了。 调了好几天了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 11:31

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表