找回密码
 立即注册

QQ登录

只需一步,快速开始

打印 上一主题 下一主题
开启左侧

BLDC 的启转

  [复制链接]
跳转到指定楼层
楼主
Angus 发表于 2016-3-15 13:52:03 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Angus 于 2018-3-26 09: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:退磁时间

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 顶 踩
回复

使用道具 举报

沙发
harvardx 发表于 2016-3-15 20:46:51 | 只看该作者
Mark一下 正在研究学习BLDC\
回复 支持 反对

使用道具 举报

板凳
ketose 发表于 2016-4-2 09:34:20 | 只看该作者
Mark一下 正在研究学习BLDC
回复 支持 反对

使用道具 举报

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

使用道具 举报

5#
 楼主| 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 繁杂,但准确。
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

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

使用道具 举报

8#
 楼主| Angus 发表于 2016-10-25 14:25:43 | 只看该作者
本帖最后由 Angus 于 2018-6-25 13:42 编辑
冰破 发表于 2016-10-25 10:18
原来如此,还以为那套代码是编译后就直接能运行的。ADC的方式,对ADC的资源占用太厉害了。我喜欢用比较器 ...

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

使用道具 举报

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

使用道具 举报

10#
 楼主| Angus 发表于 2016-11-27 22:01:27 | 只看该作者
本帖最后由 Angus 于 2018-6-25 13:43 编辑
冰破 发表于 2016-11-1 10:16
mark,这个启动过程没有考虑反转的情况,启动时假如电机正在反转,那么也是会测到反电势信号的。不过这个代 ...

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

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU