论坛元老
 
- 积分
- 9069
- 金钱
- 9069
- 注册时间
- 2020-5-11
- 在线时间
- 4711 小时
|
本帖最后由 LcwSwust 于 2025-7-29 15:24 编辑
接上回:"利用一路ADC作过零检测的无刷电调" http://www.openedv.com/forum.php?mod=viewthread&tid=351401&extra=
这次用到了另一路ADC测电流。
参考资料《基于电感法无刷直流电机起动方法的优化设计》:
基于电感法无刷直流电机起动方法的优化设计 - 豆丁网.pdf
(4.74 MB, 下载次数: 9)
根据这个资料研究了无感无刷电机的零速启动;
原理:
1.定子绕组的电感量受转子位置影响;
(但由于N极与S极产生的影响基本相同,所以可能会有180度的误差)
2.转子磁极的NS极会影响定子绕组的饱和;(可确定NS极,纠正180度误差)
----------------------------
电路:和之前差不多,为了测量瞬时电流,将R8改为了1K。
单片机程序:
BLDC2.2C程序1.2test _零速启动4_27M.rar
(79.62 KB, 下载次数: 6)
串口数据波形查看工具(波形显示器2.2A):
波形显示器2.2A安装包.rar
(6.66 MB, 下载次数: 4)
----------------------------
用途:需要低速或大力矩启动的场合,比如小车。
介绍一下程序:
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相通电期间要断电较长时间?
因为换相时有续流影响测量值。
|
|