虫虫好 发表于 2012-4-13 13:31:04

BLDC 无感

大家好,最近在做BLDC的实验,无感 反电势零点控制,开始要加速阶段
2对极电机 额定转速40003额定电流.2A电流额定电压24
我打算加速到2000转载切换到自动捕获状态通过读取来换向

开环启动,我是这样做的 刚开始的时候经过42.4ms换一次相 然后42.3在接下来每次减少0.1ms 直至减少到2.5ms 开始切换到无感运行(在捕获中断里边),期间总共换向400次 时间累计8.9s(我启动程序在周期中断里执行的可以打概的计算一下时间)

对于2对极电机到 当换向周期2.5ms时 转速为2000转,根据60f/P计算得到然后6f为换向频率,

起初占空比50%后来逐渐增加,到80%左右

然后电机一运行 开环启动开始很慢 抖动较大 后来忽快忽慢,噪音很大,而且对于换向我见hellodsp上capstastus=(GpioDataRegs.GPADAT.all&0x0700)>>8通过读取捕获口的数据来查找表换向,但是对于反电势检测不是检测关断相反电势吗,他就不担心干扰码,请问大家都是怎么处理的

istars2005 发表于 2012-4-19 20:30:27

图片显示不了啊?
思路就是这么个思路,但是八秒多才能启动起来确实太慢了
别人都能做到几十毫秒就能启动起来
我也想做到这么快的启动,但是没做好
现在需要两秒左右才能启动起来
不过我不是做四轴的

istars2005 发表于 2012-4-19 20:34:28

观察反向电动式,我总想在启动阶段就能得到干净的波形,方便处理,
但是我测老外做的无刷风机的反向电动式检测
他们用的滤波电容好像非常小,因为测出来的反向电动式都带有PWM波在里面
不知道他们程序里如何来处理
我试了一个多星期也没写出来更快速的启动办法
郁闷

虫虫好 发表于 2012-4-20 09:02:54

本帖最后由 虫虫好 于 2012-4-20 09:07 编辑

istars2005 发表于 2012-4-19 20:34 static/image/common/back.gif
观察反向电动式,我总想在启动阶段就能得到干净的波形,方便处理,
但是我测老外做的无刷风机的反向电动式检测 ...

你好,兄弟昨天晚上 发现IR2132输出的驱动信号 有点问题 在分析我现在是开环启动到 20002对极电机   然后根据 60f/P算出换向时间在2000的时候是 2.5ms120度导通 每一相导通时间5ms(2个2.5ms)也就是转1圈需要30ms 驱动波形有问题 上桥臂在30ms内出现了4个驱动信号 2个25V ,2个个40V (都是对地电压 ),而且下桥臂的信号看着也不规则我的2132是15v供电母线24我采用的是HPWM_LPWM 2812给的 但是不同的pwm源今天看看换调制方式能解决问题不

反电势 一直检测 不出来 可能跟这 有关系 今天处理这个问题   干扰很大 很 头疼


谢谢交流~{:handshake:}

虫虫好 发表于 2012-4-20 09:11:54

istars2005 发表于 2012-4-19 20:34 static/image/common/back.gif
观察反向电动式,我总想在启动阶段就能得到干净的波形,方便处理,
但是我测老外做的无刷风机的反向电动式检测 ...

恩 你的进展比我快很多呀,不过我觉得 既然要加滤波电容干嘛不一次尽量滤干净 还得去程序处理 ,不知道人家怎么想的呵呵

lixin91985 发表于 2012-4-20 09:26:29

反电动势的检测 有两种方式。

低端的是用一个和主PWM同步的PWM 去控制三相电动势外部模拟,滤波。

另外一种是不需要电容的。直接在PWM的中间触发AD。 这个也是为什么STM8系列的高级定时器 需要弄个中间对齐模式。
不过这种需要大量的MCU时间。

虫虫好 发表于 2012-4-20 12:42:01

本帖最后由 虫虫好 于 2012-4-20 13:36 编辑

lixin91985 发表于 2012-4-20 09:26 static/image/common/back.gif
反电动势的检测 有两种方式。

低端的是用一个和主PWM同步的PWM 去控制三相电动势外部模拟,滤波。


恩,以前画板子的时候没注意 直接用2812的6路pwm 去控制了后来想想要是H_pwm_LPWM 的话 不如用一个比较器 一路互补的pwm 外加硬件 去控制BLDC   这样也能保证H_pwm_LPWM同时导通, 你说的那个 增减模式下 周期中断去 查询 检测 CAP是不是进了周期中断然后读端口的状态 比较 相同不处理 不同 就是 换到下一个状态,是不是这样啊?换成了om-PWMIR2132的输出还是那样

istars2005 发表于 2012-4-20 14:49:50

24V的母线电压? 你做的是什么东西啊
四轴上普遍都是12V电源

反向电动势出不来是不是你的C66 C67 C68这三个电容的问题啊?
这里看其他电路一般都是直接导线过去了
我也是用的导线直接过去的

虫虫好 发表于 2012-4-20 15:00:13

本帖最后由 虫虫好 于 2012-4-20 15:04 编辑

istars2005 发表于 2012-4-20 14:49 static/image/common/back.gif
24V的母线电压? 你做的是什么东西啊
四轴上普遍都是12V电源



24V 40W的小电机,我在不接电机的情况下 看了下IR2132的输出第一幅图为on_pwm下 IR2132的输出。第二幅为上下桥同时pwm 的上桥臂的输出郁闷中自举电容为1uf您说的那几个电容为47nf 看的别人的电路   

istars2005 发表于 2012-4-20 15:08:30

如果你能在开环的情况下转起来那就不是2132驱动部分的问题了
你得查你的反向电动势检测部分电路

虫虫好 发表于 2012-4-20 16:22:08

istars2005 发表于 2012-4-20 15:08 static/image/common/back.gif
如果你能在开环的情况下转起来那就不是2132驱动部分的问题了
你得查你的反向电动势检测部分电路 ...

你好,但是他的驱动波形 很不理想 如上图所示, 对了就是如果3个比较寄存器产生3路互补的pwmpwm 135 对应上桥 246 对应下桥的情况下 如果AB导通pwm14 那么 pwm 23 强制 还是要互补输出 请指教

虫虫好 发表于 2012-4-21 08:46:24

istars2005 发表于 2012-4-20 15:08 static/image/common/back.gif
如果你能在开环的情况下转起来那就不是2132驱动部分的问题了
你得查你的反向电动势检测部分电路 ...

现在IR2132在不接电机的情况下上下桥驱动波形正常,接上电机 就无输出了现在 调制方式对于AB导通 pwm1 和pwm4 同事调制 高有效 然后与1互补的2 低有效给自举电容充电   接上电机 就无输出了 ,如果把2的强制了驱动信号虽然不稳定但是 电机可以转求指教

istars2005 发表于 2012-4-21 16:30:52

能问一下你自举电容用了多大的吗?

虫虫好 发表于 2012-4-21 20:01:33

istars2005 发表于 2012-4-21 16:30 static/image/common/back.gif
能问一下你自举电容用了多大的吗?

10U 1U 都试过啦调制方式对于AB导通 pwm1 和pwm4 同事调制 高有效 然后与1互补的2 低有效给自举电容充电   其他的5个换向状态也类似这样设置接上电机fault 拉低   如果把2的强制了 电机可以转,今天奇怪的是 像上面的调制方式 带互补的 设置了5个 另外一个换向状态 不带互补 电机 有时候转 有时候不转 但是fault 不拉低 IR2132 有输出, 一旦6个全设置成带互补的又保护了。。。

aishiqi1992 发表于 2012-4-21 20:50:53

加速不能每次减多少,而是每次除多少……

虫虫好 发表于 2012-4-21 21:00:59

aishiqi1992 发表于 2012-4-21 20:50 static/image/common/back.gif
加速不能每次减多少,而是每次除多少……

呵呵 没考虑那么多呢减法确实有点浪费资源

虫虫好 发表于 2013-12-18 22:58:16

本帖最后由 虫虫好 于 2013-12-18 23:00 编辑

lixin91985 发表于 2012-4-20 09:26
反电动势的检测 有两种方式。

低端的是用一个和主PWM同步的PWM 去控制三相电动势外部模拟,滤波。


兄台 你的stm的 无刷代码Mstart   里 的 函数段作用是什么呢
if((BLDCParam.Speed_Capture>1000)&&(BLDCParam.Speed_Capture<MaxCapT))
      { temp=46875/BLDCParam.Speed_Capture;
      BLDCParam.SpeedRPM_Realy=temp*10;
      BLDCParam.SpeedRPM_Realy=BLDCParam.SpeedRPM_Realy*MotorPole;
      
       /**/ if(BLDCParam.SpeedRPM_Realy>1500)
                   BLDCParam.SpeedRPM_Realy=1500;
         
      temp=BLDCParam.SpeedRPM_Realy*10;      
temp=temp/MotorMaXRPM;
      BLDCParam.PwmDuty_Real=temp*(PWM_PERIOD/10);
      
      /**/if(BLDCParam.PwmDuty_Real>1024)
                   BLDCParam.PwmDuty_Real=1024;
      
      if(BLDCParam.PwmDuty_Real<MinStartDuty)
                BLDCParam.PwmDuty_Real=MinStartDuty;
          }
else BLDCParam.PwmDuty_Real=MinStartDuty;


还有下面这个函数 意图是什么呢   谢谢
// 通过HALL 的电平跳变特点,获取转动防线,
void GetMDirect(void)// used by readhall get step

lixin91985 发表于 2013-12-19 08:15:59

M=motor.

Mstart函数,其实是给sensorless预留的。对于sensor可以添加反转检查,缓启动等功能。

虫虫好 发表于 2013-12-19 22:09:39

本帖最后由 虫虫好 于 2013-12-19 22:11 编辑

lixin91985 发表于 2013-12-19 08:15
M=motor.

Mstart函数,其实是给sensorless预留的。对于sensor可以添加反转检查,缓启动等功能。 ...

if((BLDCParam.Speed_Capture>1000)&&(BLDCParam.Speed_Capture<MaxCapT))
      { temp=46875/BLDCParam.Speed_Capture;
      BLDCParam.SpeedRPM_Realy=temp*10;
      BLDCParam.SpeedRPM_Realy=BLDCParam.SpeedRPM_Realy*MotorPole;
      
       /**/ if(BLDCParam.SpeedRPM_Realy>1500)
                     BLDCParam.SpeedRPM_Realy=1500;
         
      temp=BLDCParam.SpeedRPM_Realy*10;      
temp=temp/MotorMaXRPM;
      BLDCParam.PwmDuty_Real=temp*(PWM_PERIOD/10);

如果是sensorless启动求速度的过程中   BLDCParam.SpeedRPM_Realy=temp*10; 的意思是 150转左右 切到sensorless 模式吗,BLDCParam.PwmDuty_Real=temp*(PWM_PERIOD/10); 这句话的意思 是不是 如果我超过启动的 150转    就在先前的启动占空比 下乘个系数temp   负载后 这个系数 这么算合适吗

反转检查的 这个函数 有什么作用啊   不理解 兄台的意图




lixin91985 发表于 2013-12-19 22:20:11

我在论坛发布的好像是sensor的程序。

当然上面的程序还是存在较大问题的。

if((BLDCParam.Speed_Capture>1000)&&(BLDCParam.Speed_Capture<MaxCapT))//当时 是这样认为,当捕捉到的定时器时间大于某值&&小于系统设定的某值时认为电机已经运作起来。准备切换工作状态。
      { temp=46875/BLDCParam.Speed_Capture;
      BLDCParam.SpeedRPM_Realy=temp*10;
      BLDCParam.SpeedRPM_Realy=BLDCParam.SpeedRPM_Realy*MotorPole;//以上都是计算转速。
      
       /**/ if(BLDCParam.SpeedRPM_Realy>1500)
                     BLDCParam.SpeedRPM_Realy=1500;//认为速度不会超过1500
         
      temp=BLDCParam.SpeedRPM_Realy*10;      //反向计算理论PWM,以免在状态切换时产生过大的力矩抖动。
temp=temp/MotorMaXRPM;
      BLDCParam.PwmDuty_Real=temp*(PWM_PERIOD/10);

虫虫好 发表于 2013-12-20 23:23:40

lixin91985 发表于 2013-12-19 22:20
我在论坛发布的好像是sensor的程序。

当然上面的程序还是存在较大问题的。


好的谢谢不过兄台切 无感 1500转 好高的速度   

lixin91985 发表于 2013-12-21 08:20:53

虫虫好 发表于 2013-12-20 23:23
好的谢谢不过兄台切 无感 1500转 好高的速度

整个程序都是给有感的用的。。 不是无感的。

电机的转速不会高于1500转

虫虫好 发表于 2013-12-23 22:55:30

lixin91985 发表于 2013-12-21 08:20
整个程序都是给有感的用的。。 不是无感的。

电机的转速不会高于1500转 ...

请问 兄台 用过stm32霍尔异或吗如果只捕获 单边沿 怎么能查询到6个霍尔状态

虫虫好 发表于 2014-2-28 20:54:25

lixin91985 发表于 2013-12-21 08:20
整个程序都是给有感的用的。。 不是无感的。

电机的转速不会高于1500转 ...

兄台你好,想请教个关于带霍尔的无刷电机问题,在做PID 调节的时候 单P 调节的时候 如果给定速速-反馈速度 <0 ,此时 我做过刹车处理(开下桥MOS) 或者相序反接 制动 但是 电机基本立刻 就停止运转了 ,有的时候电机启动的时候 咔咔响几声 自己平稳运行了,也有的时候电机转着转着稍微用手碰一下就停转了或者自己运行一会就停了, 可能对于单比例 P 调节有静差 ,如果ERR小于0 速度出现超调 ,目前的情况是 P 小点 电机空载不转 大了 直接出现速度超调,我能确信电机无刷电机的正反转 换相逻辑是正确的换相是在捕获中断处理的,经验不足 谢谢 。

lixin91985 发表于 2014-3-1 19:37:18

虫虫好 发表于 2014-2-28 20:54
兄台你好,想请教个关于带霍尔的无刷电机问题,在做PID 调节的时候 单P 调节的时候 如果给定速速-反馈 ...

其实你忘了一个问题。

假设对于下桥全开,你有没想过给三个下桥通同步pwm这样就可以控制刹车的力度了。

同时我想你对于BLDC还是很不了解。 对于负载电机如果 给定 小于 实际,你也不用马上刹车。减小PWM就可以了。

BLDC四象限调速 ,应该分三个区间,, 正常运转状态,下桥PWM状态,上桥PWM状态。

至于你的电机用手碰一下就停止的问题。是你对PID不了解的问题。多网上找找看。

虫虫好 发表于 2014-3-1 22:59:50

本帖最后由 虫虫好 于 2014-3-1 23:13 编辑

lixin91985 发表于 2014-3-1 19:37
其实你忘了一个问题。

假设对于下桥全开,你有没想过给三个下桥通同步pwm这样就可以控制刹车的力度了。...

非常感谢兄台的回答,我之前说的 给定 小于反馈 做下桥MOS 全开 电机停转或者 轻碰一下 电机就停了 , 这些都是在PID 里 单 比例环节调试时候的现象,并没有加入积分环节。如果加入积分环节 给定小于反馈此时 比例环节的作用 应该不如积分环节的作用强,PID运算的结果是能能达到减小PWM的效果的,现在调试 比例系数 大了速度过冲 小了吧 电机不动。。。。   关于刹车力度 下桥MOS 做PWM处理我看过EABS的资料但是还是不明白他的原理,我是这样理解的 在做能耗制动时 下桥全开 在电机速度比较高时 E较大 PWM占空比高I 就大一点制定转矩就大 能有较好的制动效果那为什么我还需要做PWM 改变占空比呢   请兄台能指点一二 谢谢。
页: [1]
查看完整版本: BLDC 无感