打印
[应用方案]

BLDC 的启转

[复制链接]
1009|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cr315|  楼主 | 2021-3-2 15:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式



一,静止启转
     BLDC  动起来才有反电势,才能检到过0。BLDC 静止时要先通电First_Delay时间(1~10ms)后再检过0。若第一次通电,电磁场刚好与永磁体方向一致,通电时间再长也不会转,所以要定义一个超时时间——PeriodMax ——超过这个时间检不到过 0 ,就直接换下一相
      BLDC_Start(PeriodMax,  1000) ;                // 参数1:超时变量,参数2:换相后到检过 0 的最短时间
   
二,非静止启转
    启转前 BLDC 若已在转,先测一下换相时间 PeriodNow,在过 0 点立即通电起转,就可以直接顺畅起转。

    pPhase       = &TabPhase[1]  ;                        // 启转相。
    Wait_Zero(TabPhase[1],  15*1000)                // 等过 0,15 ms 超时
    T1 = TIMER1->DR ;
    Wait_Zero(TabPhase[1],  15*1000)            
           // 这个时刻,永磁体刚好在第一相的过0点
    Period = (TIMER1->DR - T1) & 0xFFFFFF ;       // 相减得到换相周期 Period
    if(Period < 3000)   BLDC_Start(Period,  0) ;      // 换相周期小于3ms,已在高速转,直接同步
    else    BLDC_Start(Period,  1000) ;                  // 启转, 参数1:测到的周期,参数2:退磁时间

使用特权

评论回复
沙发
内政奇才| | 2021-3-2 15:57 | 只看该作者

下载下来的Wait_Zero函数是这么写的,这样什么功能都没有,楼主你那的Wait_Zero函数不一样?
uint32_t Wait_Zero(uint32_t Phase, uint32_t TimOV)
{
  return 1 ;
}

使用特权

评论回复
板凳
麻花油条| | 2021-3-2 15:58 | 只看该作者
mark,这个启动过程没有考虑反转的情况,启动时假如电机正在反转,那么也是会测到反电势信号的。不过这个代码应用在航模上,可能实际应用中不需要反转。

使用特权

评论回复
地板
豌豆爹| | 2021-3-2 15:59 | 只看该作者
[color=rgb(153, 153, 153) !important]2017-4-3 19:40 上传



如果所用的驱动电路上下桥MOS管都是输入高电时平导通, 请问是否删除下图这行指令即可?

使用特权

评论回复
5
yangxiaor520| | 2021-3-2 18:59 | 只看该作者
学习,谢谢楼主分享。

使用特权

评论回复
6
xiaoqizi| | 2021-4-1 16:15 | 只看该作者
这两种方式有什么不同呢

使用特权

评论回复
7
木木guainv| | 2021-4-1 16:16 | 只看该作者
在什么情况下用什么方式的启转呢

使用特权

评论回复
8
磨砂| | 2021-4-1 16:18 | 只看该作者
代码还是非常简单的

使用特权

评论回复
9
晓伍| | 2021-4-1 16:19 | 只看该作者
应该是可行的

使用特权

评论回复
10
八层楼| | 2021-4-1 16:21 | 只看该作者
有没偶更加详细的代码啊

使用特权

评论回复
11
twjiang| | 2021-4-1 20:20 | 只看该作者
mark

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1339

主题

3897

帖子

0

粉丝