
本帖最后由 shiyongzhu 于 2015-1-17 08:45 编辑 拿到Nucleo开发板有一段时间了,这段时间认真的学习了一下Nucleo开发板,这款开发板的开发资源实在是太丰富了,且开发板的底层驱动很完善,必需点个赞 ![]() 做四轴飞行器电调一份重要的参考资料timegate墨鸢所写的《无感无刷直流电机之电调设计全攻略》,本文主要参考该文献。目前,国内外对无刷直流电机(Brushless DC motor,BLDCM)定义一般有两种:一种定义认为只有梯形波/方波无刷直流电机才可以被称为无刷直流电机,而正弦波无刷电机则被称为永磁同步电机(permanent magnet synchronous motor,PMSM);另一种定义则认为梯形波/方波无刷电机和正弦波无刷电机都是无刷直流电机。在此本帖采用第一种定义。 直流无刷电机根据转子结构可分为内转子和外转子两种结构,主要区别在于转动部分处于内部还是外部。) Z) h7 O- l2 M2 o W 直流无刷电机绕组通电后,线圈内产生电流,在永磁体的磁场下产生洛伦兹力,产生力矩,从而推动转子转动。为了产生持续的力矩,线圈内的电流需要根据转子所处的位置改变方向,这也就是所产说的换相。有刷电机的换相通过电刷完成,而无刷电机的换相则是通过电子器件控制电流的通断来完成。' f8 j, O o1 C8 R# A 无刷直流电机的换相与转子的位置有关,为了产生同一个方向持续的电磁力矩,需要根据位置的不同控制每相电流通断。根据换相位置的检测方式又可以分为无感和有感。有感指的是采用霍尔传感器检测转子位置,控制换相。而无感指的是直接利用电机的线圈绕组来控制换相。这也正是本次电调设计的主要方式。 本次电调设计主要控制框图如下图所示,零位检测电路检测能够检测出无刷电机转子的切换位置,控制器根据转子位置,控制驱动电路进行每相通断切换,从而实现对电机的控制。
![]() 如图所示,Nucleo开发板通过自制的电调驱动板进行电机控制。电调驱动板上设置有功率mosfet管、用于检测中性点电压的比较器等。" F8 i* m& K1 A) I 驱动板至Nucleo开发板的连接接口: A+、B+、C+为六臂全桥驱动电路的上臂导通控制接口,高电平时导通,低电平时截止; A-、B-、C-为六臂全桥驱动电路的下臂导通控制接口,高电平时导通,低电平时截止; INT A、INT B、INT C为各相感应反电势与中点电压比较; Current为电流检测电路输出的电压; 接口分配: A+、B+、C+需要接入PWM信号,在此利用Nucleo开发板的定时器TIM1产生三路PWM信号; A-、B-、C-只要输出低电平、高电平即可,利用普通的GPIO口即可即可; INT A、INT B、INT C接入Nucleo开发板的中断,并要求能够上升沿和下降沿都可以检测该中断; Current接入开发板的ADC用于检测电机工作电流。 驱动板至电机A、B、C三相分别接上电机即可。 ------------------------------分割线--------------------各位看官久等了,自从上次发布了BLDC电机电调设计方案后,一直没什么动静,还让管理员沐紫同学提醒了下,真心的不应该啊,在次谢罪啦,呵呵,第一次使用STM32,诸事不顺啊,闲话少叙了,现进入主题。上次发布的电调的方案中提到需要自制一块驱动板,今天将驱动板原理进行一下介绍。 电调驱动板由五部分组成,分别为六臂功率mos管桥、过零检测电路、电流检测电路、输入电源、对外接口。 六臂功率mos管桥用于控制电机线圈的通断电,也就是所说的换相。 ![]() ![]() ![]() 过零检测电路用于检测感应电动势的过零点,提供换相的参考。 ![]() 电流检测电路用于实时检测电机的工作电流。 ![]() 输入电源用于对输入电源的滤波和稳压。 ![]() 对外接口提供了电调的控制输入、检测输入以及电源等接口。 ![]() 如果大家对于上述电路的原理不甚了解的话,强烈建议大家拜读下网友timegate 墨鸢所著的《无感无刷直流电机之电调设计全攻略》一文,读完此文后相信大家对BLDC的控制方法会有清晰的认识,有此强大的参考资料在,本人也就不敢班门弄斧了。下面就说下,驱动板和STM32_Nucleo开发板之间的连接。 六臂功率桥的控制信号A+、B+、C+、A-、B-、C-与高级控制定时器TIM1的输出PA8、PA9、PA10、PB13、PB14、PB15相连。过零点比较输出的CMP_A、CMP_B、CMP_C分别与PC6、PC7、PC8相连。+5V、GND与开发板的+5V、GND相连。+12V、GND与锂电池连接。PHASE_A、PHASE_B、PHASE_C与电机连接。图中MIDDLE、NULL_A、NULL_B、NULL_C为预留接口,不需要接。实物连接图如下所示。![]() + p2 N4 s) C5 v* t |
首先请各位看官原谅俺,没有在一楼中进行内容更新,主要是因为上次更新的时候发现,所有的图片需要重新的插入,实在的费事,所以这次重开一楼了。
抱歉,这个是我软件PA9复用了,导致烧了PMOS.现在量了,上臂,下臂全部为低,这个没有问题,现在不会烧管子了,但是我双击启动后,点击来回摆动两下,就是不启动,装不起来,楼主能提供点思路吗?还有就是
char Check_Delay(unsigned int time) ) P) {1 X p* p. N2 H$ c
{
return (((time-countmillsecond)&0x8000)>>8);/5 t1 H; S0 b% M3 {8 J( j5 a/ T8 B. ?
}
这个实现多少的延时,实在抱歉,这个到现在都没有理解楼主的本意,希望楼主棒棒忙,我现在正在调试! l6 W6 w1 ]& ~& Z) _6 K. M
好的,现在就是按照你的方案,启动时10%,闭环时20%,来控制的,效果就是我前面说的那样,我再提高占空比试试。有一点,你的那个延时我真不太懂,我自己做了延时,原理差不多,也是用Systick延时1微秒来做的,现在change_phase的频率尽然和“电机运行时”灯的闪烁频率一样,这可定事不对的,我在想想原因吧,非常感谢大侠诚恳的帮忙!
原理图实物已有,这几天就传上论坛啊,
四个有点难啊,先实现控制一个吧。做飞控的话,需要单独一个飞控板的。
打算用这个开发板控制两个电机,然后只需要两块Nucleo开发板,就可以完成四个电机的控制了。