牛卧堂 ARM Cortex m0 M4技术交流

 找回密码
 立即注册

QQ登录

只需一步,快速开始

开启左侧

BLDC 的静止启转和非静止启转

[复制链接]
Angus 发表于 2016-3-15 13:52:03 | 显示全部楼层 |阅读模式
本帖最后由 Angus 于 2016-10-24 15:36 编辑



Untitled.png
一,静止启转
     BLDC 转起来才能检到过0。第一步先通电1~3ms后再检过0(电动工具等低速电机可取5~10ms)。线圈磁场若刚好对准永磁体,通电时间再长也不会转,一直等到最大换相周期 PeriodMax 若仍未检到过 0 ,就不再等了,直接换下一相。
      BLDC_Start(PeriodMax,  3000) ;                // 参数二是第一次通电后到检过 0 的延迟时间
    启转阶段,对过 0 点时刻,按前后相关性做必要的筛选和限制,可让启转更顺畅。

二,非静止启转
    启转前若 BLDC 已在转,测到过 0 点后延时半个周期或者立即从下一相通电起转,就可以直接顺畅起转。

    Wait_Zero(TabPhase[5],  30*1000)             // 等第5相过 0,30 ms 超时
    T1 = TIMER1->DR ;
    Wait_Zero(TabPhase[6],  30*1000)             // 等第6相过 0,30 ms 超时
    Period = (TIMER1->DR - T1) & 0xFFFFFF ;  // 相减得到换相周期 Period
           // 此处可延时半个周期,也可不延时
     PWM->CMR0 = Duty_Min ;                       // 启转电压。
     pPhase         = &TabPhase[1] ;                 // 启转相
     BLDC_Start(Period,  Period >> 1) ;        // 启转
   






回复

使用道具 举报

harvardx 发表于 2016-3-15 20:46:51 | 显示全部楼层
Mark一下 正在研究学习BLDC\
回复 支持 反对

使用道具 举报

ketose 发表于 2016-4-2 09:34:20 | 显示全部楼层
Mark一下 正在研究学习BLDC null - 副本 - 副本 - 副本.png null - 副本 - 副本 (2).png null - 副本 - 副本 (3).png null - 副本 - 副本.png null - 副本 (2) - 副本.png null - 副本 (2).png null - 副本 (3).png null - 副本 (4).png null - 副本.png null.png
回复 支持 反对

使用道具 举报

冰破 发表于 2016-10-24 13:18:38 | 显示全部楼层
下载下来的Wait_Zero函数是这么写的,这样什么功能都没有,楼主你那的Wait_Zero函数不一样?
uint32_t Wait_Zero(uint32_t Phase, uint32_t TimOV)
{
  return 1 ;
}
回复 支持 反对

使用道具 举报

 楼主| Angus 发表于 2016-10-24 14:47:23 | 显示全部楼层
本帖最后由 Angus 于 2016-10-24 15:28 编辑
冰破 发表于 2016-10-24 13:18
下载下来的Wait_Zero函数是这么写的,这样什么功能都没有,楼主你那的Wait_Zero函数不一样?
uint32_t Wait ...

这个函数是等某相反电势跳变。这个留给客户自己去写。不同的人有不同的写法。
一,用比较器:ACMP正端选择某一引脚。测 ACMP 输出的跳变。
二,用 ADC,不停地做ADC,判断电压是否反相。用 ADC 还可以测反电势大小,以确定在转。
用比较器简单,但有误判。用 ADC 繁杂,但准确。
回复 支持 反对

使用道具 举报

冰破 发表于 2016-10-25 10:17:47 | 显示全部楼层
Angus 发表于 2016-10-24 14:47
这个函数是等某相反电势跳变。这个留给客户自己去写。不同的人有不同的写法。
一,用比较器:ACMP正端选择 ...

原来如此,还以为那套代码是编译后就直接能运行的。ADC的方式,对ADC的资源占用太厉害了。我喜欢用比较器加数字滤波,你觉得如何?
回复 支持 反对

使用道具 举报

冰破 发表于 2016-10-25 10:18:21 | 显示全部楼层
Angus 发表于 2016-10-24 14:47
这个函数是等某相反电势跳变。这个留给客户自己去写。不同的人有不同的写法。
一,用比较器:ACMP正端选择 ...

原来如此,还以为那套代码是编译后就直接能运行的。ADC的方式,对ADC的资源占用太厉害了。我喜欢用比较器加数字滤波,你觉得如何?
回复 支持 反对

使用道具 举报

 楼主| Angus 发表于 2016-10-25 14:25:43 | 显示全部楼层
本帖最后由 Angus 于 2016-10-25 14:29 编辑
冰破 发表于 2016-10-25 10:18
原来如此,还以为那套代码是编译后就直接能运行的。ADC的方式,对ADC的资源占用太厉害了。我喜欢用比较器 ...

编译后是可以运行, 有些应用是不需要非零启转的。所以这个函数就没写。
如果突然把电压降到0,一直到停转,电机都会保持同步。停转之前又突然加电压,直接加速,不是从0启转。只有完全停下来,才会从0启转。
回复 支持 反对

使用道具 举报

冰破 发表于 2016-11-1 10:16:24 | 显示全部楼层
mark,这个启动过程没有考虑反转的情况,启动时假如电机正在反转,那么也是会测到反电势信号的。不过这个代码应用在航模上,可能实际应用中不需要反转。
回复 支持 反对

使用道具 举报

 楼主| Angus 发表于 2016-11-27 22:01:27 | 显示全部楼层
冰破 发表于 2016-11-1 10:16
mark,这个启动过程没有考虑反转的情况,启动时假如电机正在反转,那么也是会测到反电势信号的。不过这个代 ...

反转时是会测到过0信号,但按过0点正转换相,会让电机加速停转,再改为正转。你可以测试一下。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注新唐微信服务号

小黑屋|手机版|新唐(华邦)ARM Cortex M0 M4技术交流 ( 沪ICP备13045913号

GMT+8, 2017-1-19 23:26 , Processed in 0.207719 second(s), 31 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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