用STM32内部AD检测过零的电调终于成功了,但是启动时噪声大,请各位前辈指点,谢谢!
大概在3月份的时候,尝试过用LM3S1138的内部10位AD做电调,最终以失败告终,很惭愧最近用STM32搭了一个,经过几晚上的努力,终于可以检测到零了,但是在刚启动时噪声比较大,要转几秒钟才会好,请教这是什么原因?
高边PWM同步检测策略,PWM频率40KHZ,PWM ON 期间检测过零,在PWM占空比为20%时,大概要5秒噪声才会消失,电机是 XXD2212 KV1000
http://cache.amobbs.com/bbs_upload782111/files_32/ourdev_572544.jpg
实物图 (原文件名:20100802342.jpg)
http://cache.amobbs.com/bbs_upload782111/files_32/ourdev_572543.jpg
过零检测分压电路 (原文件名:20100803344.jpg)
http://cache.amobbs.com/bbs_upload782111/files_32/ourdev_572545.jpg
换相时间 (原文件名:QQ截图未命名.jpg)
第三张图是一个数组,值表示每换一次相需要多少个PWM周期 请用示波器观察波形 谢谢LS,以前用LM3S1138做的时候你还在QQ指导过我,不胜感激
家里没示波器,用公司的影响不好,请问你的程序是一检测到过零就换相还是等30度再换? 换相准确的前提条件是反电势检测准确,如果反电势检测有滞后,可以过零后不到30度就换相,不过,不看示波器恐怕...........
没有波形也不好分析你的问题 谢谢,我晚上调整下换相的时间试试,实在弄不好再用公司的示波器 顶楼主,我也用的是相同策略,不过没有用ad,也得到了了lijieamd 的指导。欢迎交流 QQ:44911430 我现在的问题是PWM为10%(高了怕烧东西)时容易启动失败,监视反电势发现刚启动时反电势根本和过零点对应不起来,晚上我再用 lijieamd 的启动策略试试 需要注意的是,在低PWM时,由于栅极驱动上升沿的不理想(过慢,或者振铃),在PWM ON的检测会变得不可靠
此时可采用在PWM OFF检测
然后就是,在启动时,由于硅钢几乎都会在饱和状态,因此线圈过流,所以换相之后消磁时间会有很大不同
最后,在解决这些问题之后,在反电势检测完全正确(一个都不能错,包括消磁)的情况下方可采用我所说的启动方式 谢谢LS的帮助,今晚没进展,明晚继续 我也在用STM32做电调...也是用2212电机,不过放下了好久了...但总有一天要把这个东西做好的...希望能和楼主多多交流,我的QQ:65293729 我一直都想用STM32做電調,但又沒時間, 各位努力, 如果有一天我想做電調,希望能得到各位的指導. 謝謝! 现在可以在PWM为10%时可靠启动了
启动步骤: 定位(AB导通约50MS),加速(逐步减少换相时间),断电并检测位置(读AD值检测转子位置),闭环运行
这种启动方法兼容性可能比较差,目前只使用XXD2212-KV1000的电机,这个问题先不考虑
又遇到新的问题了,电源为10.5V、PWM频率36K、PWM占空比到40%时,电流达到3A多,杂音也大,这是不是PWM频率低的原因?
各位用同步策略做电调的,PWM周期一般多高呢?
还有0度换相和推迟30度换相时效率会大概差多少? 回复【9楼】zhikai_wu
-----------------------------------------------------------------------
已加 PWM占空比高时噪声的问题已解决,是因为消磁没处理好,现在65% PWM时可以正常工作(再高还没测),电流1.5A,转速 7000多转,每7个PWM换一次相 代码写的很恶心,没人关注就不传了,上一张原理图
http://cache.amobbs.com/bbs_upload782111/files_32/ourdev_574120.jpg
电路是在ST三合一上搭的,用到的端口已说明 (原文件名:QQ截图未命名.jpg) 支持一下,希望能上传代码。 刚测试了下90% 占空比,电流3A,每5个PWM换一次相,转速约10000转每分
处理这只电机占用MCU时间最高不超过30%,预留10%给通讯,应该还有再驱动一只电机的潜力
下面是源代码(只有核心部分的代码,工程里好多没用的文件就不浪费大家时间了)
点击此处下载 ourdev_574186.txt(文件大小:8K) (原文件名:main.txt) 这是 36K 80% PWM 时的视频ourdev_574193.rar(文件大小:791K) (原文件名:20100810018.rar)
浆是垃圾堆里找来的,装在上面是为了好看 不错 看来没几个人关注这种东西,自己玩吧 我剛開始想做一個電調, 希望能和大家多交流 回复【楼主位】Clinging哆拉C梦
-----------------------------------------------------------------------
你好,能请教一下你的 启动策略么? 回复【21楼】dpedison
-----------------------------------------------------------------------
"启动步骤: 定位(AB导通约50MS),加速(逐步减少换相时间),断电并检测位置(读AD值检测转子位置),闭环运行" 回复【22楼】Clinging哆拉C梦
回复【21楼】dpedison
-----------------------------------------------------------------------
"启动步骤: 定位(ab导通约50ms),加速(逐步减少换相时间),断电并检测位置(读ad值检测转子位置),闭环运行"
-----------------------------------------------------------------------
请问如果刚启动 就发生堵转,等你的加速时间都过完了 该怎么办 这时候的电流增大,电机还未转,不能切到闭环 学习 回复【24楼】dpedison
-----------------------------------------------------------------------
16楼有我的代码,如果电机没转,检测位置会失败,会自己停止 回复【26楼】Clinging哆拉C梦
回复【24楼】dpedison
-----------------------------------------------------------------------
16楼有我的代码,如果电机没转,检测位置会失败,会自己停止
-----------------------------------------------------------------------
自己停止是关断上下桥吗,然后呢,再次启动喽? 回复【27楼】dpedison
-----------------------------------------------------------------------
关闭全部MOS管,我的代码里把重复启动注释掉了,去掉注释就会重启 谢谢楼主分享,关注中! 留意一下 请问楼主是多长时间检测一次反电动势,如果太久,就会造成相位延迟,将会导致相位不准确 回复【31楼】gao8051
-----------------------------------------------------------------------
每 1/36000 秒检测一次 mark 根据楼主的计算,大约27.8uS转换一次反电动势,对于1到2万转的可以勉强用但是效率不高,在加上PWM频率太高,损耗太大,虽然是高性能32位的ARM,但是比起比较低级的8位单片机 MEGA8来还是慢了27倍,因为MEGA8换向之后立即设成不通电相的比较模式(比较器的时间大约1uS) 这样有可能已经达到真正的过零时刻,但是因为采样的时刻还没到,这样就滞后了好长时间。 但是比起TI的LF2407 DSP官方推荐的50uS采集一次还是要快一倍,不过TI的这种方式在低与1万转的马达完全没有问题。 就像现在市场上面的电动自行车控制器,128uS采集一次霍尔也很好。 回复【35楼】gao8051
-----------------------------------------------------------------------
同步和异步检测都有优缺点
异步(你说的M8用的方法)的优点是MCU资源占用不高,但是需要在BEMF采样电路加低通,会使BEMF移相,比较器输出的过零信号也跟着移相
同步可以解决移相的问题,还可以省掉低通电路,但是需要较高的PWM频率,会使效率降低
至于转速,同样的换相速度,磁极越少转速越快,不像你说的"1到2万转", 要是二极的电机转速至少可以到7万转 无感无刷电调,无论那种策略,在启动初期的开环阶,总是有预测的成分在算法里
设计的核心在于:创造一个与转子(负载)机械特性匹配的,转速与强度逐渐变大的旋转磁场,并做好电流监控。 回复【37楼】feng_matrix 悟
-----------------------------------------------------------------------
谢谢!
"创造一个与转子(负载)机械特性匹配的,转速与强度逐渐变大的旋转磁场,并做好电流监控。"
电调启动遇到问题的,好好看看这句 http://cache.amobbs.com/bbs_upload782111/files_33/ourdev_584530M36XNM.jpg
这是最近做好的PCB,一只STM32驱动两只电机,PWM频率36K (原文件名:20100920419.jpg) 很漂亮 这是四轴用的,条件太简陋了,只能这样简单的测试 对于大部分无刷电机,可以说,只有第一步换相有可能是盲目的(可以通过脉冲电流检测判断,使得第一步都不是盲目的),只要反电势检测做的足够好,第二步之前就可以确切知道转子状态 反电势检测要做到电机 由静止到刚开始加速 就能检测到还是挺难的(至少对我这样的菜鸟来说是这样) 码酷 终于有空学习一下STM32驱动BLDC,看了楼主的代码,想请教一下楼主:
1.while(TIM2->CNT >= 8);while(TIM2->CNT <= 8);是保证在PWM_ON时进行检测反向电动势吗?
2.在GetBEMF()代码中 ch0 = ADC1->DR >> 3;
ch1 = ADC2->DR >> 2;
MotorA.NonceBEMF = 4096 + ch1 - ch0;
BEMF公式是怎么来的啊?
谢谢。 学习 回复【45楼】wenshui78
终于有空学习一下STM32驱动BLDC,看了楼主的代码,想请教一下楼主:
1.while(TIM2->CNT >= 8);while(TIM2->CNT <= 8);是保证在PWM_ON时进行检测反向电动势吗?
2.在GetBEMF()代码中 ch0 = ADC1->DR >> 3;
ch1 = ADC2->DR >> 2;
MotorA.NonceBEMF = 4096 + ch1 - ch0;
BEMF公式是怎么来的啊?
谢谢。
-----------------------------------------------------------------------
1, 是的
2, 假设AB相导通,PWM ON期间, C相的反电势 = (C相电压 - A相电压 / 2); 谢谢楼主的回答。
另在闭环运行的时候if(++MotorA.Count1 >= ((MotorA.Count0 >> 3) + 2))这个是不是消磁处理?
还有进行死区处理了吗? 回复【48楼】wenshui78
-----------------------------------------------------------------------
是消磁处理
死区是指 同一相的两只MOS同时导通? 不出意外没这个问题 好的,谢谢楼主的回答。 楼主加我QQ:153769336,我用STM8做的,刚开始,电机转起来电调发热很厉害,抖得厉害。 我的电调上臂用的是IRF7416,下臂用的是IRF7413,下面是IRF7416输出的PWM波形。
http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_590456RFGM8V.JPG
9KHz波形 (原文件名:TEK0000.JPG)
http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_590457DML3YC.JPG
36KHz波形 (原文件名:TEK0001.JPG)
这个波形很差,这个会有影响吗? 有没接电机测到的波形不一样的,MOS 关断时间不应该这么长 上面的波形是没有接电机时测得。
MOS关断的时候不知道为什么这么长,所以36K的波形就很差。是不是没有带负载的原因啊?等会儿试一下。 加了负载后好多了,看图片。
http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_590498EV3P7H.JPG
36KHz (原文件名:TEK0002.JPG) 我目前是驱动的光驱拆下来的无刷电机,在检测反向电动势时得不到过零点,用数组查看可以看到有过零点。
另量了一下ABC三相的波形,觉得怪怪的,见附图。
http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_591097D4T2NK.JPG
A (原文件名:TEK0003.JPG)
http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_591098AYL0A1.JPG
B (原文件名:TEK0005.JPG)
http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_591099BMRO6P.JPG
C (原文件名:TEK0006.JPG) 下图是A相的放大图,可以看到BEMF。
http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_591106U3Q92G.JPG
A相放大图 (原文件名:TEK0004.JPG) 如果你的电路和我的类似,电机达到一定的转速才能正确检测到过零点 我的电路与楼主你的全N管电路不一样,是和MK的差不多,上臂是P管,下臂是N管。
楼主帮我看看ABC三相的波形正常吗? 你的图不正常,三相的波形应该是基本一样的,你可能参考下下面的帖子
http://ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3883794&bbs_page_no=1&bbs_id=1025 难道是我的这个电机不对吗?
拆了几个破光驱里面的无刷电机都有些区别。我看这个电机的霍尔器件大概成60度,也有拆下来的成30度。 新买了XXD2212 KV1000无刷电机,用楼主方式可以启动起来,但还是有几个问题想请教一下楼主。
1.没有进入闭环式电流达到4A,进入到闭环后电流会降到1A(没有带浆)。
2.代码中 OFFAH();
MotorA.Count0= 0;
MotorA.Step = 2;
MotorA.State++;
是为了断电检测位置,但为什么只是关闭了上臂而没有关闭下臂?而且为什么要要MotorA.Step设置为2? 回复【62楼】wenshui78
-----------------------------------------------------------------------
1, 电流4A不知道是PWM占空比为多少时的,我四只电机同时启动时总电流约2A,闭环后电流约0.5A,XXD2212KV1000带9050桨
2, 没有关闭下臂是为了检测反电势时有个参考点,改变MotorA.Step值是为了方便检测自由旋转时的反电势 回复【63楼】Clinging 哆拉C梦
-----------------------------------------------------------------------
1, 电流4a不知道是pwm占空比为多少时的,我四只电机同时启动时总电流约2a,闭环后电流约0.5a,xxd2212kv1000带9050桨
-----------------------------------------------------------------------
谢谢楼主的答复,启动的时候PWM是10%的占空比。 刚开始学习这个,看到LZ的帖子,感觉很受益,希望能够交流,QQ:187354039。
看了几天你的源代码,lz方便的话,能不能给我完整的代码文件?多谢了! 回复【65楼】guang83
-----------------------------------------------------------------------
还是要弄懂原理,这个代码只是让电机转起来,没多少参考价值
QQ:342136967 回复【67楼】Clinging 哆拉C梦
-----------------------------------------------------------------------
恩,看了一晚上代码,感觉理解的差不多了。
多谢了,改天实验一下,刚刚起步,呵呵。 有学习了 一群牛人。 一群很牛的人,佩服! 楼主强啊。。。看到把主控也做起来了。。。看着这里这几天又把我的STM的电调拿出来调一下,,,现在的MOS管子总觉得温度太高了,电流也大得可怕,我用的是2212/1000KV的电机加1045桨,PWM 100%时20多A的电流啊。。吓人。。 这是调试时的一些信息,不会写上位机软件只能下位机显示了,我现用16K PWM 正打算把它改成8K。。
http://cache.amobbs.com/bbs_upload782111/files_36/ourdev_613114S1Z7WX.jpg
(原文件名:a.jpg)
http://cache.amobbs.com/bbs_upload782111/files_36/ourdev_613115LXSC5M.jpg
(原文件名:b.jpg) 这是100% PWM 时的波形
http://cache.amobbs.com/bbs_upload782111/files_36/ourdev_613117POGAJQ.jpg
(原文件名:c.jpg) http://cache.amobbs.com/bbs_upload782111/files_36/ourdev_613126EGJUPS.jpg
80% PWM (原文件名:d.jpg)
http://cache.amobbs.com/bbs_upload782111/files_36/ourdev_613127L1Q5V7.jpg
20% PWM (原文件名:f.jpg) 我是在PWM在ON期间都去采样,在一个PWM期间最多采样28个点,加上电流电压就32个点 回复【76楼】zhikai_wu
-----------------------------------------------------------------------
做的很完善呀,TFT界面也很漂亮呀,正纳闷PWM频率这么低转速怎么上去的,“PWM在ON期间都去采样”真是一语惊醒梦中人
能否讲解下启动过程? 启动还是三步方式.这个还没去改.楼主有什么好办法没 没 回复【47楼】Clinging 哆拉C梦
-----------------------------------------------------------------------
回复【47楼】Clinging 哆拉C梦
回复【45楼】wenshui78
终于有空学习一下stm32驱动bldc,看了楼主的代码,想请教一下楼主:
1.while(tim2->cnt >= 8);while(tim2->cnt <= 8);是保证在pwm_on时进行检测反向电动势吗?
2.在getbemf()代码中 ch0 = adc1->dr >> 3;
ch1 = adc2->dr >> 2;
motora.noncebemf = 4096 + ch1 - ch0;
bemf公式是怎么来的啊?
谢谢。
-----------------------------------------------------------------------
1, 是的 ......
-----------------------------------------------------------------------
能不能再详细一点!4096是什么值?谢谢 您好我自制的电调在10%的占空比的时候,开环启动,电机完全不动 用的6个N沟道mos管,没有采用独立的自举电压电路。这是怎么回事啊 回复【81楼】tian179587568
-----------------------------------------------------------------------
请先确认硬件电路没问题 回复【80楼】Ajian007
-----------------------------------------------------------------------
+4096是为了不出现负数
点击此处下载 ourdev_626239P655YW.pdf(文件大小:770K) 可以参考这篇资料 不错 回复【83楼】Clinging 哆拉C梦
-----------------------------------------------------------------------
谢谢,学习了 每天都在努力~好帖~ 回复【80楼】Ajian007
回复【47楼】clinging 哆拉c梦
-----------------------------------------------------------------------
回复【47楼】clinging 哆拉c梦
回复【45楼】wenshui78
终于有空学习一下stm32驱动bldc,看了楼主的代码,想请教一下楼主:
1.while(tim2->cnt >= 8);while(tim2->cnt <= 8);是保证在pwm_on时进行检测反向电动势吗?
2.在getbemf()代码中 ch0 = adc1->dr >> 3;
ch1 = adc2->dr >> 2;
motora.noncebemf = 4......
-----------------------------------------------------------------------
http://cache.amobbs.com/bbs_upload782111/files_38/ourdev_628643GGIYPE.jpg
这是某相通期间测得的反电动势 (原文件名:过O.jpg) 回复【88楼】Ajian007
-----------------------------------------------------------------------
这是按你的方法测得的,帮忙看一下是否正确 83L有文档,自己看吧,这种问题还能靠别人? 回复【90楼】Clinging 哆拉C梦
-----------------------------------------------------------------------
http://cache.amobbs.com/bbs_upload782111/files_38/ourdev_629260GJB85Q.jpg
这是pwmoff时ABC三相AD值图很好看吧 (原文件名:ABCpwmoff.jpg) 回复【91楼】Ajian007
-----------------------------------------------------------------------
这是开环运行时 A B C三相测得AD值的折线图,现在正在分析这些数据,找出过零点 看lz的代码仿佛不是手写的 记号 顶 有完整的电路图吗? 回复【楼主位】Clinging 哆拉C梦
-----------------------------------------------------------------------
昨天看到兄弟在我的帖子中有个回复。因为在出差没留意和及时保存。不知何故兄弟后来有删除了。能否在贴一次出来。万分感谢
详见:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5074651&bbs_page_no=1&search_mode=3&search_text=zhaofeng2008&bbs_id=9999
就是ppm解码的那段代码 STM32 BLDCM学习中 mark! 楼主是好人啊,需要这方面的资料。 真心感谢楼主,还有感谢Clinging 哆拉C梦前辈的共享。现在刚刚起步,不想用AVR,改用STM32还是要下一番苦力的 我也想用STM32做一个四合一电调,加油! zhikai_wu 发表于 2011-1-24 11:17 static/image/common/back.gif
这是调试时的一些信息,不会写上位机软件只能下位机显示了,我现用16K PWM 正打算把它改成8K。。
{:3_46:} 这个液晶的页面是自己做的??膜拜啊。。。。
页:
[1]
2