| 
 
论坛元老  
 
	积分8918金钱8918 注册时间2020-5-11在线时间4470 小时 | 
 
| 本帖最后由 LcwSwust 于 2025-7-29 15:24 编辑 
 接上回:"利用一路ADC作过零检测的无刷电调" http://www.openedv.com/forum.php?mod=viewthread&tid=351401&extra=
 这次用到了另一路ADC测电流。
 
 参考资料《基于电感法无刷直流电机起动方法的优化设计》:
 
  基于电感法无刷直流电机起动方法的优化设计 - 豆丁网.pdf
(4.74 MB, 下载次数: 8) 根据这个资料研究了无感无刷电机的零速启动;
 原理:
 1.定子绕组的电感量受转子位置影响;
 (但由于N极与S极产生的影响基本相同,所以可能会有180度的误差)
 
     2.转子磁极的NS极会影响定子绕组的饱和;(可确定NS极,纠正180度误差)
 ----------------------------
 电路:和之前差不多,为了测量瞬时电流,将R8改为了1K。
 
   单片机程序:
  BLDC2.2C程序1.2test _零速启动4_27M.rar
(79.62 KB, 下载次数: 4) 串口数据波形查看工具(波形显示器2.2A):
  波形显示器2.2A安装包.rar
(6.66 MB, 下载次数: 2) ----------------------------
 用途:需要低速或大力矩启动的场合,比如小车。
 介绍一下程序:
 getstep():通过对三个绕组正向通电、反向通电较长时间,测两个电压(AD_Z)值作比较、测两个电流值(AD_IS) 作比
 较,得到360度内的6种状态。
 为提高效率,可以把getstep()拆分为getvs()和getista(),得到getstep1();
 test2():通过getstep1()得到当前位置,驱动电机运转,由于getstep1()耗时较长,导致噪声较大,且不能高速运转。
 逐步对程序进行优化,最终得到test5_1():用getstep1()得到初始位置,后续只判断导通相的电感关系进行换相(参考上面“磁动势”那张图)。
 实际测试过的电机:1806(KV2280)、新西达2212(KV1000),均能正常运行。
 运转:
 
   getvs测量O1,用手缓慢转动电机:
 
   getstep测AD_IS,用手缓慢转动电机:
 
   getstep串口发送6个电压值(用手缓慢转动电机):
 
   getstep串口发送3个电压差(用手缓慢转动电机):
 
   getstep串口发送6个电流值(用手缓慢转动电机):
 
   getstep串口发送3个电流差(用手缓慢转动电机):
 
   代码片段:
 
 复制代码U8 getstep(void)
{
        U8 ton=20,toff=100;
        U8 vs,ss;
        U16 v;
        U16 vp0,vp1,vp2;//三相正电压
        U16 vn0,vn1,vn2;//三相负电压
        U16 ip0,ip1,ip2;//三相正电压
        U16 in0,in1,in2;//三相负电压
        MOT_STOP;
        delayus(toff);
        LED_ON;
        //--------------------AB
        MOT_AH;MOT_BL;//正向通电
        vp0=adc_read10(2);delayus(ton);//测电压
        ip0=adc_read10(3);//测电流
        MOT_AZ;MOT_BZ;MOT_CZ;
        delayus(toff);//避免续流影响,toff>ton
        MOT_BH;MOT_AL;//反向通电
        vn0=adc_read10(2);delayus(ton);//测电压
        in0=adc_read10(3);//测电流
        MOT_AZ;MOT_BZ;MOT_CZ;
        delayus(toff);
        //--------------------AC
   ......
自问自答:
 判断电感的大小关系为什么要对绕组正向通电、反向通电比较二者电压,而不是只通电一次然后与中点电压作比较?
 因为转起来之后,绕组反电势会叠加到测量电压,只测一次就可能误判,如果反向拧动电机,电机就可能反转。
 为什么AB相通电到AC相通电期间要断电较长时间?
 因为换相时有续流影响测量值。
 
 
 
 
 | 
 |