amobbs.com 阿莫电子技术论坛

标题: STM32做的BLDC控制器,ADC检测反电动势,公开资料 [打印本页]

作者: 20061002838    时间: 2013-1-23 22:02
标题: STM32做的BLDC控制器,ADC检测反电动势,公开资料
本帖最后由 20061002838 于 2013-1-23 22:06 编辑

用STM32做BLDC控制器有一段时间了,先是手工焊了一个板子,不行,又画了一块板子,从元旦开始调程序,直到前两天才有所突破,现在可以用ADC检测到反电动势了。
整理了一下资料,现在发上来,希望能给正在或者将要用ADC检测反电动势的朋友提供一点帮助。
今天网络巨卡,视频要等会了。
上两张运行时的图片
[attach]87205[/attach]
[attach]87206[/attach]
拍照的时候,电机正在转,手机的闪光灯也亮了,桨都拍成了半透明的。
再发两张板子的照片
[attach]87203[/attach]
[attach]87191[/attach]
[attach]87204[/attach]
硬件简单介绍一下,STM32主控无需多说,使用的是103RCT6,有两路DAC,在调试中作用很大。
MOS管采用P管+N管的方式,使用的驱动器是TI的UCC27424。没有使用常规的全N关的原因是,我认为在电源电压比较低的情况下,P管+N管可以获得更加优秀的性能,因为低压用的双低MOSFET驱动器具有更好的性能,我这里使用的UCC27424有4A的驱动电流,我的MOS管导通和关断时间更是在200ns以内。
板子预留的有霍尔传感器接口。
使用了芯片自带的两路DAC,又用PWM波模拟了两路DAC,但是比较失败,本来是二阶滤波器结果二阶无法用只能用一阶的,频率高一点的波形显示的不太好。
果断放弃了JTAG口,只用SWD,使用效果很好。
串口使用的是USB转232,芯片是国产的CH340;板上还有一个CAN接口。
其他的就是4个LED,两个按键,一个电位器了。还有一个扩展的SPI接口,但是还没想好要怎么用。
硬件基本上就是这样了。

下面就是板子的资料了,有原理图和gerber文件,程序稍后上传。
[attach]87192[/attach]
[attach]87196[/attach]
最后声明一下版权,本PCB的资料仅用于交流学习,未经本人同意任何人不得将本资料直接或者间接用于商业目的,违者必究。
作者: 20061002838    时间: 2013-1-23 22:03
本帖最后由 20061002838 于 2013-1-23 22:41 编辑

硬件讲完了,该讲软件了。
我的程序ADC检测反电动势的时刻位于PWM-OFF,由于续流时二极管的压降比较大,在转速很低反电动势很小的情况下,二极管的压降把反电动势都给盖住了。因此果断放弃二极管续流,使用MOSFET同步整流。同步整流带来的最直接的好处就是电机启动时就可以检测到反电动势。传统的用比较器检测反电动势是定位-开环-闭环三个步骤,我的程序就只有两个步骤定位和闭环。
上传两篇比较有用的文档、程序以及个人调程序的一些心得。
[attach]87215[/attach]
ST的AN1103,关于反电动势太小无法检测的原因和解决办法。
[attach]87217[/attach]
飞思卡尔的AN1913,主要讲的是ADC检测反电动势的,我的程序就是根据这个文档写出来的。
[attach]87221[/attach]
程序,有MDK,IAR和VS的工程,我用的是MDK的;我电脑里面的IAR不能用盗版jlink,所以没用IAR调试,但是编译是没问题的;VS的工程是用来看代码和写代码的。
[attach]87225[/attach]
简单的调试心得,希望能帮助到有需要的朋友。

下面是程序的核心部分,贴出来和大家分享
  1. BLDC_SwitchStep();    //启动电机,做一次换向

  2.     while(1)
  3.     {

  4.         while (!DMA_GetFlagStatus(DMA1_FLAG_TC1))  
  5.         {
  6.             ;         //等待ADC转换完成
  7.         }

  8.         BLDC_Ctrl_Board_LEDOn(LED2);
  9.         DMA_ClearFlag(DMA1_FLAG_TC1);    //清楚转换完成标志
  10.         BLDC_Ctrl_Board_LEDOff(LED2);

  11.         switch(MotorA.State)       //状态机,State表示电机状态
  12.         {
  13.         case 0:                             //定位
  14.             if(MotorA.PWMTicks >= 1000)   //PWMTicks是每个PWM周期加1,换向时清零  这段就是给某两相通电一段时间,定位
  15.             {
  16.                 BLDC_Ctrl_Board_LEDOn(LED4);
  17.                 BLDC_SwitchStep();
  18.                 MotorA.State++;
  19.                 BLDC_Ctrl_Board_LEDOff(LED4);
  20.                 BEMF_Cnt = 0;
  21.             }

  22.             break;
  23.         case 1:                             //启动状态
  24.             if (MotorA.PWMTicks >= 8)   //消除消磁事件的影响,8个PWM周期有点大了啊
  25.             {
  26.                 if ( BEMF())              //判断是否过零
  27.                 {
  28.                     BLDC_Ctrl_Board_LEDOn(LED1);
  29.                     // 如果过零,就换向
  30.                     BLDC_SwitchStep();
  31.                     BEMF_Cnt++;  //启动时换向次数
  32.                     BLDC_Ctrl_Board_LEDOff(LED1);
  33.                 }
  34.             }

  35.             if (BEMF_ADC_Cnt < 6000)   //记录启动过程中的反电动势用来分析               
  36.            {
  37.                 ADC_Value[BEMF_ADC_Cnt][0] = ADCConvertedValue_2[0];
  38.                 ADC_Value[BEMF_ADC_Cnt][1] = ADCConvertedValue_2[1];
  39.                 ADC_Value[BEMF_ADC_Cnt][2] = ADCConvertedValue_2[2];

  40.                 BEMF_ADC_Cnt++;         
  41.             }

  42.             if (BEMF_Cnt >= 50) //换向超过50次,切换状态                    
  43.             {
  44.                 MotorA.State++;
  45.                 BEMF_Cnt = 0;
  46.             }
  47.             break;

  48.         case 2:
  49.             if (MotorA.FlagBEMF == 0)      //过零事件标志
  50.             {
  51.                 if (MotorA.PWMTicks >= 8)   //同上,消磁
  52.                 {
  53.                     if ( BEMF())            //检测过零点
  54.                     {
  55.                         BLDC_Ctrl_Board_LEDOn(LED3);
  56.                         MotorA.FlagSwitchStep = MotorA.PWMTicksPre >> 1;                     
  57.                          //延迟30电角度,PWMTicksPre记录的是上一步的时间
  58.                         MotorA.FlagBEMF = 1;  //检测到过零,不再检测
  59.                         BLDC_Ctrl_Board_LEDOff(LED3);
  60.                     }
  61.                 }
  62.             }
  63.             else
  64.             {
  65.                 if (MotorA.FlagSwitchStep == 0)  //延迟时刻到
  66.                 {
  67.                     BLDC_Ctrl_Board_LEDOn(LED1);
  68.                     BLDC_SwitchStep();               //换向
  69.                     BEMF_Cnt++;
  70.                     BLDC_Ctrl_Board_LEDOff(LED1);
  71.                 }
  72.                 else
  73.                 {
  74.                     MotorA.FlagSwitchStep--;      //延迟时刻未到,自减
  75.                 }
  76.             }

  77.             if (BEMF_Cnt >= 80000)       //自动停机
  78.             {
  79.                 MotorA.State++;
  80.                 BEMF_Cnt = 0;
  81.             }

  82.             break;

  83.         case 3:
  84.             BLDC_Stop();
  85.             break;
  86.         case 4:

  87.             break;
  88.         default:
  89.             break;
  90.         }
  91.     }
  92. }
复制代码

作者: tiancaigao7    时间: 2013-1-23 22:13
楼主可以考虑同步方式采样反电动势,但是不利用AD(利用AD一个是资源浪费,另外一个资源占用比较大);采用同步中断中读取比较器的电平值,这样既可以实现同步反电动势的不需要使用滤波电容的效果,又可以最大程度地减小资源占用。
作者: 20061002838    时间: 2013-1-23 22:32
tiancaigao7 发表于 2013-1-23 22:13
楼主可以考虑同步方式采样反电动势,但是不利用AD(利用AD一个是资源浪费,另外一个资源占用比较大);采用 ...

ADC并不怎么占用资源,定时器+ADC+DMA基本不需要COU干预,判断过零点也比较容易。用比较器的话需要增加硬件,关键是我的电机在开环运行时候遇到了下面的波形
[attach]87224[/attach]
这个波形里面,反电动势要么一直高于1/2VCC,要么一直低于1/2VCC,根本无法判断过零点。
作者: lcmdw    时间: 2013-1-24 00:03
mark
作者: nengcai0313    时间: 2013-1-24 00:20
MARK以下,收藏拜读,另感谢楼主的精彩奉献!
作者: rowa    时间: 2013-1-24 00:37
跟进一下
作者: Excellence    时间: 2013-1-24 08:28
谢谢。。。。顶。。。。
作者: tiancaigao7    时间: 2013-1-24 08:30
20061002838 发表于 2013-1-23 22:32
ADC并不怎么占用资源,定时器+ADC+DMA基本不需要COU干预,判断过零点也比较容易。用比较器的话需要增加硬 ...

我说的资源占用并不是指的CPU,而是AD,单独为了反电动势占用一个AD有一些浪费,而且你才一一个完整的反电动势波形有没有意义,关键的过零点只要采集到了就可以。关于硬件问题,用AD采集也需要增加电路的调理设备。而且增加一个比较器,对于后端来说也是一个保护,防止因为电机一侧的电压变化导致主控IC损坏。
作者: wuguoyan    时间: 2013-1-24 09:06
高手讨论帖,进来学习下。
作者: 20061002838    时间: 2013-1-24 09:19
tiancaigao7 发表于 2013-1-24 08:30
我说的资源占用并不是指的CPU,而是AD,单独为了反电动势占用一个AD有一些浪费,而且你才一一个完整的反 ...

上面发的那张图里面,下面的蓝线是三相反电动势波形,我给合成在一起的,依然没有可以换向的地方。
如果不做多合一电调,ADC通道是完全够用的。保护确实是个问题,现在用的是二极管保护。
作者: y1z2f4    时间: 2013-1-24 09:39
看看,学习了,谢谢
作者: imncn    时间: 2013-1-24 15:28
MOSFET续流,同步整流,AFW。。。。注意轻载和重载时的区别哦;MOSFET续流,过了就成了BRAKE了。。。。
作者: 20061002838    时间: 2013-1-24 16:49
imncn 发表于 2013-1-24 15:28
MOSFET续流,同步整流,AFW。。。。注意轻载和重载时的区别哦;MOSFET续流,过了就成了BRAKE了。。。。 ...

没有用再生啊
如果能用再生肯定很过瘾
作者: STM32_Study    时间: 2013-1-24 16:53
20061002838 发表于 2013-1-24 16:49
没有用再生啊
如果能用再生肯定很过瘾

请问楼主,同步整流的具体工作流程是怎样的?

能结合时序图详细讲解一下吗?非常感谢
作者: Phonse    时间: 2013-1-24 16:59
先学习备用了。。谢谢
作者: 20061002838    时间: 2013-1-24 18:19
STM32_Study 发表于 2013-1-24 16:53
请问楼主,同步整流的具体工作流程是怎样的?

能结合时序图详细讲解一下吗?非常感谢 ...

现在还在公司,原始的截图在家里
你看下我写的那个软件调试心得吧,里面有讲同步整流。
作者: moretolearn    时间: 2013-1-24 21:37
来顶一个,呵呵,楼主很厉害啊
作者: STM32_Study    时间: 2013-1-24 22:46
20061002838 发表于 2013-1-24 18:19
现在还在公司,原始的截图在家里
你看下我写的那个软件调试心得吧,里面有讲同步整流。 ...

谢谢楼主

调试心得在第一时间已经看过了,就是觉得还不是太明白,所以想请你讲深入一些

按照我的理解,以一个直流电机全桥驱动来说,分AB两个半桥
转动的时候,是A下桥打开,B上桥打开,其他关闭
同步整流,就是当A下桥关闭时,打开A上桥(此时B上桥仍然是打开状态)。使得反电动势能够从AB的上桥上短路消解。

以上理解是否正确?
如果是对的,那么具体的时序应该怎么把握呢?

13楼 imncn 的看法,我也想到了
当A上桥和B上桥同时打开的时候,不是进入了刹车状态吗?
那连续这样,是否对电机效率会产生影响呢?


所谓的再生又是什么技术?


非常感谢楼主传道授业解惑~~~~~
作者: 20061002838    时间: 2013-1-24 23:38
STM32_Study 发表于 2013-1-24 22:46
谢谢楼主

调试心得在第一时间已经看过了,就是觉得还不是太明白,所以想请你讲深入一些

是的,你的理解没错
[attach]87403[/attach]
时序就是这个样子的
没有同步整流,通常的做法是上桥臂PWM,下桥臂常开或常闭。这样在续流的时候,电流通过下桥臂的二极管续流。
使用同步整流的话,上桥臂PWM的时候,下桥臂也是PWM,不过是互补的。一旦上桥臂关断,进入续流阶段,下桥臂同时也打开(实际上有一点延迟的,死区,视MOS关断时间决定),这时续流就是有两个MOS管完成。这就是同步整流,MOS中电流流向和二极管方向一致。
我这里使用同步整流主要是为了消除反电动势较小的时候,二极管压降造成的影响;和降低MOS发热(相应的电机发热会多一些)

当A上桥和B上桥同时打开,并没有进入刹车。刹车是给线圈反向通电,电池要供电的,但是注意A上和B上同时打开时,电池没有供电。就你举的例子,A上桥,B下桥打开,线圈反向通电,才是刹车。

再升是一种制动技术,也叫反馈制动,电动车比较常用。车辆制动的时候,电机工作在发动机状态,把机械能转换成电能,通常制动是用一个电阻把电能转换成热能消耗掉(不能用我上面那种同步整流,线圈发热会受不了);再生就是把产生的电能再充回电池,提高效率。
再生的问题就是要在合适的时刻停止再生,不然线圈就反向通电了,电机会反转的。这也就是13L所说的刹车。
作者: STM32_Study    时间: 2013-1-24 23:44
20061002838 发表于 2013-1-24 23:38
是的,你的理解没错

时序就是这个样子的

非常感谢楼主~~~

终于明白了

关于刹车,我一直以来的概念中,反向给电是最强的刹车,但有可能会反转。直接将电机两极短路,也是一种刹车,效果没有前一种好,但是不会反转。


作者: 20061002838    时间: 2013-1-24 23:45
发帖超过24小时了,不能编辑,补上视频
http://v.youku.com/v_show/id_XNTA1OTQ0MjM2.html
作者: 20061002838    时间: 2013-1-24 23:46
STM32_Study 发表于 2013-1-24 23:44
非常感谢楼主~~~

终于明白了

是的,没错
反向通电,刹车是最迅速的。
作者: STM32_Study    时间: 2013-1-24 23:56
20061002838 发表于 2013-1-24 23:45
发帖超过24小时了,不能编辑,补上视频

强!!

请问楼主,驱动无刷电机,一般转速范围能达到多少可调? 调节范围比一般的直流电机会宽吗?

我看了原理,是要依靠三相变化来实现转动的,理论上高速是跟电机工艺和驱动速度有关

那么最低速呢?存在哪些限制?
作者: 20061002838    时间: 2013-1-25 00:19
STM32_Study 发表于 2013-1-24 23:56
强!!

请问楼主,驱动无刷电机,一般转速范围能达到多少可调? 调节范围比一般的直流电机会宽吗?

转速上限肯定是无刷的高,因为电刷会很大限制有刷电机。记得论坛里面有个帖子,一哥们把普通的有刷电机转子固定,定子变转子,改装成无刷电机,转速明显要比有刷的时候转得快。

如果是无传感器的无刷电机,换向主要是靠检测反电动势过零点,如果转速过低反电动势太小就不行了,因此无传感器的有一个转速下限,具体的就要看电机了。
如果是有传感器的无刷电机,速度是没有下限了,因为不需要靠检测反电动势过零来换向。

microchip 有个文档,AN885,讲的是无刷电机基础,里面有无刷电机跟有刷电机和交流电机的对比,你可以看下。
作者: racede    时间: 2013-1-25 01:02
本帖最后由 racede 于 2013-1-25 01:10 编辑

多少KV的电机 多少V的电源 启动的Duty是多少 PWM频率是多少 另外一个PWM周期检测多少次过零?

上个月用STM32F0的ADC做过 但是遇到了 高速转换时ADC各通道结果不一致的问题 所以改版用回比较器了.

P.S. 程序附件太大了...下载太慢 所以没有下...
作者: 20061002838    时间: 2013-1-25 09:19
racede 发表于 2013-1-25 01:02
多少KV的电机 多少V的电源 启动的Duty是多少 PWM频率是多少 另外一个PWM周期检测多少次过零?

上个月用STM3 ...

850KV的电机,电源电压12V,10%启动占空比,PWM频率25K,一个PWM周期检测一次过零。

能否详细解释一下 高速转换时ADC各通道结果不一致的问题 是怎么回事啊?
作者: aworker    时间: 2013-1-25 09:33
BLDC控制器用在什么产品上?检测到反电动势,对开发一个产品的软件来说,是重大的突破么?
作者: 20061002838    时间: 2013-1-25 09:42
aworker 发表于 2013-1-25 09:33
BLDC控制器用在什么产品上?检测到反电动势,对开发一个产品的软件来说,是重大的突破么? ...

对我的四轴来说是一个不小的突破。8月份的时候就卡住了,到现在才解决。
作者: zhengfengran    时间: 2013-1-25 10:26
楼主真慷慨无私啊!谢谢啦
作者: shower.xu    时间: 2013-1-25 11:22
先收藏了,有时间再仔细看看
作者: luoshengyang    时间: 2013-1-25 11:23
非常感谢
作者: DiaoMao_Huang    时间: 2013-1-26 00:40
非常感谢,正在研究中……
作者: racede    时间: 2013-1-26 03:59
20061002838 发表于 2013-1-25 09:19
850KV的电机,电源电压12V,10%启动占空比,PWM频率25K,一个PWM周期检测一次过零。

能否详细解释一下  ...

一个PWM周期检测一次过零是不够的

ADC内部有采样电容 采样时间越短 对应的充电时间越短 等效阻抗越小 结果也不精确

各通道不一致的原因还没有查清楚 就是 同一个ADC的三个通道对同一个点进行采样 采样时间越短 不一致性越大 有意思的是 每启动一次ADC 不一致的趋势会改变 比如上次一直是A通道偏大

下次再启动ADC的时候 有可能变成B通道偏大 原因不明 把采样时间增长有好转
作者: xuexian99    时间: 2013-1-26 04:23
半夜起来顶一下,资料下过来了,还在努力中
作者: mdj-fish    时间: 2013-1-26 08:09
资料下过来了
作者: 20061002838    时间: 2013-1-26 09:29
racede 发表于 2013-1-26 03:59
一个PWM周期检测一次过零是不够的

ADC内部有采样电容 采样时间越短 对应的充电时间越短 等效阻抗越小  ...

我用的采样时间是7.5个周期,精度还可以啊
作者: lijieamd    时间: 2013-1-26 23:31
不管是tiancaigao7坛友所说的同步检测比较器,还是楼主的同步AD采样,如果每个PWM周期只检测一次的话,那么PWM频率一定的情况下,转速越高,换相误差越大(正负一个PWM的误差),因此要在高速达到更好的换相精度,需要更高的PWM频率,但这显然是不现实的,因为PWM频率的提高,也意味着开关损耗的提高,同时由于死区时间不变,电源利用率会大大下降。
因此一个PWM周期检测一次,对于高速来说,已经无法满足需求了
作者: YS126    时间: 2013-1-26 23:55
电机的启动比我自己DIY的那个好很多啊,记号一下。
作者: 20061002838    时间: 2013-1-27 00:06
lijieamd 发表于 2013-1-26 23:31
不管是tiancaigao7坛友所说的同步检测比较器,还是楼主的同步AD采样,如果每个PWM周期只检测一次的话,那么 ...

说的有道理
简单计算了一下,假设电机转速达到6000RPM,电机是7对磁极,那么换向频率是6000/60*7*6=4200Hz。电调PWM频率也就做到几十K,假设是40K,那么基本上10个PWM周期就要换一次向,换向的误差大约是10%。
呵呵,现在只是刚把这个电机转起来,能正确的检测到反电动势过零,后面还有很长的路要走。昨晚尝试使用COM事件换向,结果换向有问题,现在还在查原因。
作者: lijieamd    时间: 2013-1-27 00:26
20061002838 发表于 2013-1-27 00:06
说的有道理
简单计算了一下,假设电机转速达到6000RPM,电机是7对磁极,那么换向频率是6000/60*7*6=4200H ...

恩,多多交流,希望能看到你的最新进展
作者: zyjyslc    时间: 2013-1-28 00:46
来顶一个,呵呵,楼主很厉害啊
作者: why1220    时间: 2013-1-28 13:32
赞一个!
作者: aysyjgw    时间: 2013-1-28 13:34
记号一下,这个的技术含量比较高
作者: 20061002838    时间: 2013-1-28 17:57
linac 发表于 2013-1-28 13:19
你前面不是说启动时能直接闭环,说明无论转速多小,都能检测到反电动势? ...

转速很低的情况下,有脉动,而且扭矩很小,没有多少使用价值的。
作者: 20061002838    时间: 2013-1-28 22:29
linac 发表于 2013-1-28 22:21
那就是说在重载启动的情况下,还不如开环?

不明白怎么样才算重载
我先前的回复的意思是说电机本身不适合工作在低转速下
作者: 20061002838    时间: 2013-1-28 22:48
linac 发表于 2013-1-28 22:36
比如很多机械就是重载启动,就是启动力矩接近或大于额定力矩.
如果反电动势能检测准确的话,低速性能与 ...

我现在检测出的过零点位置不是特别准确,最直观的现象就是换向时刻不均匀,一个大一个小
现在用的检测算法太简陋了
作者: snglnc    时间: 2013-2-2 07:40
20061002838 发表于 2013-1-28 22:48
我现在检测出的过零点位置不是特别准确,最直观的现象就是换向时刻不均匀,一个大一个小
现在用的检测算 ...

兄弟,能否谈谈定位时如何避免转子在定位点振荡?
作者: lhhsea2004    时间: 2013-2-2 11:28
学习,好好参考一下,
作者: 20061002838    时间: 2013-2-2 12:58
snglnc 发表于 2013-2-2 07:40
兄弟,能否谈谈定位时如何避免转子在定位点振荡?

呵呵,我还没有研究到这么深入。
作者: rifjft    时间: 2013-2-2 13:11
低速性能、重载启动是有感的长处,无感控制的如果能够比拟,那技术是相当的厉害了
作者: 李二牛    时间: 2013-2-2 15:08
20061002838 发表于 2013-1-23 22:03 硬件讲完了,该讲软件了。 我的程序ADC检测反电动势的时刻位于PWM-OFF,由于续流时二极管的压降比较大,在 ...

先顶一下,下载下来学习
作者: AK971    时间: 2013-2-3 13:12
很精彩!学习,实践
作者: redmaple    时间: 2013-2-18 18:37
请教一下,ADC采样反向电动势时为负值怎么处理的?
作者: showgu    时间: 2013-2-18 19:36
请补个电流波形。
作者: kmani    时间: 2013-2-18 19:42
20061002838 发表于 2013-2-2 12:58
呵呵,我还没有研究到这么深入。

同求楼主,ADC怎么处理负电动势呢?
作者: tian179587568    时间: 2013-2-20 13:01
20061002838 发表于 2013-1-23 22:32
ADC并不怎么占用资源,定时器+ADC+DMA基本不需要COU干预,判断过零点也比较容易。用比较器的话需要增加硬 ...

你的这个波形我也碰到过 但是我找不到我记录的波形在哪了。我说说我的看法不知道是不是正确的。
1、我用的是XXD的电机,据网友拆机分析,xxd电机是三角形连接,如果AB相通电的时候,实际上A——>C——>B也是出于通电状态,所以刚换向的时候不考虑自感电压,那么C点电压就是1/2VCC,
     换向后叠加了感应电动势那么就出现要么大于1/2VCC,要么小于1/2VCC。
2、开环转的时候换向应该是滞后的,也就是说开环的时候实际上每一次换向都对应的存在电机在换向点附近震荡的效果,所以悬空相的电压值就在1/2VCC附近。那么就出现你lz所上波形。
顺附两张我用比较器处理换向,上桥PWM的波形图(显然是存在问题的,我还没有找到原因)
作者: jetshao    时间: 2013-2-22 01:18
mark,谢谢楼主分享。
作者: John_123    时间: 2013-2-22 21:44
Thank you for the sharing
作者: mage99    时间: 2013-2-22 23:08
谢谢楼主分享,
作者: 20061002838    时间: 2013-2-23 09:24
tian179587568 发表于 2013-2-20 13:01
你的这个波形我也碰到过 但是我找不到我记录的波形在哪了。我说说我的看法不知道是不是正确的。
1、我用 ...

应该不是三角形接法的原因,我手上有一个光驱电机,可以看到接线,能够确认是星型连接,也存在相同的问题。

你的PWM波形怎么是那个样子啊?
作者: tian179587568    时间: 2013-2-24 15:16
20061002838 发表于 2013-2-23 09:24
应该不是三角形接法的原因,我手上有一个光驱电机,可以看到接线,能够确认是星型连接,也存在相同的问题 ...

我这是闭环后的效果,你觉得是哪里有问题呢
作者: tian179587568    时间: 2013-2-24 21:12
20061002838 发表于 2013-2-23 09:24
应该不是三角形接法的原因,我手上有一个光驱电机,可以看到接线,能够确认是星型连接,也存在相同的问题 ...

我又想了想,如我说的第2点,开环启动换向滞后,转子会在换向点附近震荡,这时候星型连接的悬空相的电压有一部分是导通两相的中点电压,也就是VCC/2,然后再叠加了震荡引起的感应电压。
另外我的波形的确存在问题,为什么会这样,我现在也没有弄清楚。
作者: 20061002838    时间: 2013-2-24 21:26
tian179587568 发表于 2013-2-24 21:12
我又想了想,如我说的第2点,开环启动换向滞后,转子会在换向点附近震荡,这时候星型连接的悬空相的电压 ...

你分析的有点道理
我觉得像MK的方案,由于有个电容,电压必须从VCC变到0,有一个过程。
我现在电机转起来了,这个问题也就不存在了

你的第一条线,看起来就不像是PWM啊
作者: tian179587568    时间: 2013-2-24 21:36
20061002838 发表于 2013-2-24 21:26
你分析的有点道理
我觉得像MK的方案,由于有个电容,电压必须从VCC变到0,有一个过程。
我现在电机转起来 ...

第一条线示波器每隔表示的时间值大,电压的最高点表示PWM_ON,中间很亮的部分是BEMF,你用ADC换向的波形有吗  上来看看。
作者: racede    时间: 2013-2-24 22:28
本帖最后由 racede 于 2013-2-24 22:31 编辑

http://player.youku.com/player.php/sid/XNTEwMjU4NzQw/v.swf

最近做的STM32F0电调 24kHz PWM, 每个PWM周期同步检测4次过零(检测频率96k), 现在能测试到的极限是等效一对磁100000转, 应该还有不少上升空间, 视频1:45有100%时的波形.

这个视频的程序是用COMP检测的, 我的视频里还要一个ADC检测的 但是觉得低速性能不如COMP检测.
作者: racede    时间: 2013-2-24 22:41
tian179587568 发表于 2013-2-20 13:01
你的这个波形我也碰到过 但是我找不到我记录的波形在哪了。我说说我的看法不知道是不是正确的。
1、我用 ...

应该是没有处理好 续流期间的检测
作者: leicai05    时间: 2013-2-26 17:35
谢谢共享
作者: TANK99    时间: 2013-2-26 19:55
这可以个推精的帖子啊。
作者: 20061002838    时间: 2013-2-26 21:45
tian179587568 发表于 2013-2-24 21:36
第一条线示波器每隔表示的时间值大,电压的最高点表示PWM_ON,中间很亮的部分是BEMF,你用ADC换向的波形 ...

呵呵,大功率电源还没买,没有满占空比的。
作者: hqsdz1    时间: 2013-2-27 12:37
我顶,好东西!!~~~
作者: LemonLemon    时间: 2013-2-28 10:49
racede 发表于 2013-2-24 22:28
最近做的STM32F0电调 24kHz PWM, 每个PWM周期同步检测4次过零(检测频率96k), 现在能测试到的极限是等效一 ...

racede, 请问你这个是用PWM_OFF时检测BEMF的么,我现在用PWM_ON检测,还有些问题。
作者: yh1036164041    时间: 2013-2-28 17:08
顶!!留着学习!
作者: yh1036164041    时间: 2013-2-28 17:09
刚刚涉及,求大神给无线模块开源程序

作者: 20061002838    时间: 2013-2-28 17:09
LemonLemon 发表于 2013-2-28 10:49
racede, 请问你这个是用PWM_OFF时检测BEMF的么,我现在用PWM_ON检测,还有些问题。 ...

是的  PWM-OFF时检测
作者: yue621    时间: 2013-3-1 14:37
感谢楼主无私分享!
作者: hotibet    时间: 2013-3-1 15:27
我的BLDC洞洞板也出来了。特乱。
作者: hotibet    时间: 2013-3-1 15:43
本帖最后由 hotibet 于 2013-3-1 15:52 编辑
tian179587568 发表于 2013-2-20 13:01
你的这个波形我也碰到过 但是我找不到我记录的波形在哪了。我说说我的看法不知道是不是正确的。
1、我用 ...


其实我没有完全看明白,有线路图吗?开环的话,在换相点附近肯定是不稳定的。为了获得一个比较流畅的采样,是否应该考虑对采样的数据积分,或者在线路上添加电容?另外避免干扰,采样的时候最好在PWM_OFF的时候做。
作者: racede    时间: 2013-3-2 11:31
LemonLemon 发表于 2013-2-28 10:49
racede, 请问你这个是用PWM_OFF时检测BEMF的么,我现在用PWM_ON检测,还有些问题。 ...

ON 和 OFF 都检测
作者: racede    时间: 2013-3-2 11:33
hotibet 发表于 2013-3-1 15:43
其实我没有完全看明白,有线路图吗?开环的话,在换相点附近肯定是不稳定的。为了获得一个比较流畅的采样 ...

低速的时候 大部分是OFF 高速的时候 反势足够大 ON和OFF 检测都没有关系了...
作者: racede    时间: 2013-3-2 11:37
20061002838 发表于 2013-2-28 17:09
是的  PWM-OFF时检测

我的检测周期是和PWM周期同步的 一个PWM周期均分成4个检测点 无论ON和OFF都检测过零 PWM跳变的时候跳过这一次检测就OK了
作者: 87hedong87    时间: 2013-3-4 21:29
mark                     
作者: huxiaoping    时间: 2013-3-5 10:39
不错的贴要顶。。。。。。
作者: zng521    时间: 2013-3-7 14:44

作者: haiwanad    时间: 2013-4-5 06:19
楼主你好,
我测量的反电势很奇怪,呈现周期性变化,一会波形较理想,一会完全不行,能否指点下?波形如图片所示,是不同时刻测量的同一个电机在相同转速下,外同步
作者: haiwanad    时间: 2013-4-5 06:24
20061002838 发表于 2013-1-23 22:03
硬件讲完了,该讲软件了。
我的程序ADC检测反电动势的时刻位于PWM-OFF,由于续流时二极管的压降比较大,在 ...

在外同步模式下,将波形在x轴压缩,得到的反电势竟然是呈周期性变化的,造成的原因可能是外同步换相速度2khz,远大于电机实际换相速度,请问,这该怎么解决?
作者: haiwanad    时间: 2013-4-5 06:28
楼主,你好,我现在正在做无刷电机控制,遇到了问题,没人请教,很欣喜看到你的帖子,有几个问题困扰我几周了,想请楼主指点一下,楼主方便给个qq么,我的qq是489271839,邮箱haiwanad at gmail.com
作者: wudision    时间: 2013-4-9 13:45
谢谢楼主 mark一下
作者: zqbing    时间: 2013-4-9 21:49
楼主,请问你那个MOS下接的那个0.02R电阻是做什么用的,只是检测电流吗,然后怎么处理的呢?
作者: 崆峒    时间: 2013-4-9 22:04
多谢楼主分享
作者: 20061002838    时间: 2013-4-9 23:06
zqbing 发表于 2013-4-9 21:49
楼主,请问你那个MOS下接的那个0.02R电阻是做什么用的,只是检测电流吗,然后怎么处理的呢? ...

哦,这个暂时没用,用一根粗铜丝短路了。
作者: g22261846    时间: 2013-4-9 23:55
我很佩服你,加油,我也要加油
作者: 20061002838    时间: 2013-4-10 00:11
g22261846 发表于 2013-4-9 23:55
我很佩服你,加油,我也要加油

呵呵,过奖了
作者: Phonse    时间: 2013-4-10 09:22
好吧。。看看一下
作者: milo112    时间: 2013-4-19 13:27
不错,看看先。
作者: tomatoyyh    时间: 2013-4-19 13:53
mark
作者: cndongj    时间: 2013-4-19 15:29
谢谢,收藏了。
作者: yue621    时间: 2013-4-19 22:41
膜拜啊!!!!!!!!!!!
作者: hemeizhi    时间: 2013-4-19 23:23
mark mark               
作者: ddcour    时间: 2013-4-20 00:16
好贴!谢谢共享!




欢迎光临 amobbs.com 阿莫电子技术论坛 (https://www.amobbs.com/) Powered by Discuz! X3.4