Arduino基础篇(九)

您所在的位置:网站首页 无刷直流电机闭环控制系统的构成和速度调节 Arduino基础篇(九)

Arduino基础篇(九)

2024-07-17 19:23| 来源: 网络整理| 查看: 265

        本文选择Arduino MEGA 2560开发板做调试,通过调整PWM的占空比,控制BLDC3525,内置有感有霍尔驱动,实现对无刷直流电机的转速控制,通过调整数字口输出高低电平,从而实现电机方向控制。

1 认识BLDC电机

        无刷直流电机(BLDC)是永磁式同步电机的一种,而并不是真正的直流电机。区别于有刷直流电机,无刷直流电机不使用机械的电刷装置,采用方波自控式永磁同步电机,以霍尔传感器取代碳刷换向器,以钕铁硼作为转子的永磁材料,性能上相较一般的传统直流电机有很大优势,是当今最理想的调速电机。

        无刷直流电机(BLDC)以电子换向器取代了机械换向器,所以无刷直流电机既具有直流电机良好的调速性能等特点,又具有交流电机结构简单、无换向火花、运行可靠和易于维护等优点。

        无刷直流电机有以下的特点:

无刷直流电机的外特性好,能够在低速下输出大转矩,使得它可以提供大的起动转矩;无刷直流电机的速度范围宽,任何速度下都可以全功率运行;无刷直流电机的效率高、过载能力强,使得它在拖动系统中有出色的表现;无刷直流电机的再生制动效果好,由于它的转子是永磁材料,制动时电机可以进入发电机状态;无刷直流电机的体积小,功率密度高;无刷直流电机无机械换向器,采用全封闭式结构,可以防止尘土进入电机内部,可靠性高;无刷直流电机比异步电机的驱动控制简单。

        无刷直机电机的驱动方式按不同类别可分多种驱动方式:

按驱动波形:方波驱动,这种驱动方式实现方便,易于实现电机无位置传感器控制;正弦驱动:这种驱动方式可以改善电机运行效果,使输出力矩均匀,但实现过程相对复杂。同时,这种方法又有 SPWM 和 SVPWM(空间矢量 PWM)两种方式,SVPWM的效果好于 SPWM。 2 PWM调速原理

        PWM 调速实质上是调节占空比,我们一般是根据占空比的大小来衡量速度,占空比是高电平在一个周期之中的比值,高电平的所占的比值越大,占空比就越大,对于直流电机来讲,电机输出端引脚是高电平电机就可以转动,当输出端高电平时,电机会转动,但是是一点一点的提速,在高电平突然转向低电平时,电机由于电感有防止电流突变的作用是不会停止的,会保持这原有的转速,以此往复,电机的转速就是周期内输出的平均电压值,所以实质上我们调速是将电机处于一种,似停非停,似全速转动又非全速转动的状态,那么在一个周期的平均速度就是我们占空比调出来的速度了。

        在电机控制中,电压越大,电机转速越快,而通过PWM输出不同的模拟电压,便可以使电机达到不同的输出转速。在电机控制中,不同的电机都有其适应的频率,频率太低会导致运动不稳定,如果频率刚好在人耳听觉范围,有时还会听到呼啸声。频率太高的电机可能反应不过来。

        在 PWM 调速系统中,一般可以采用定宽调频、调宽调频、定频调宽3 种方法改变控制脉冲的占空比,但是前两种方法在调速时改变了控制脉宽的周期,从而引起控制脉冲频率的改变,当该频率与系统的固有频率接近时将会引起振荡。为避免之,设计采用定频调宽改变占空比的方法来调节PWM。正常的电机频率在 6-16kHz之间为好。

        定频调速是在脉冲波形的频率不变的前提下(脉冲波形的周期不变),通过改变一个周期波形中高电平的时间从而改变波形的占空比,从而改变平均电压,调整电机的转速。 假定电机始终接通电源时,电机最大转速为Vmax, 占空比为D = t /T, 则电机的平均速度Vd =D*Vmax, 由公式可知,当改变占空比D = t /T 时,就可以得到不同的电机平均速度Vd,从而达到调速的目的。

        对于直流电机的调速,我们可以通过提调节输出PWM的占空比,实现电机转速的控制;对于测速,通过定时器设置一定的时间,并计算反馈信号触发外部中断的次数,进行转换,就可以得到电机转速。

3 实验器材 Arduino MEGA 2560BLDC 352512V电池组,或者电压源接线方式:共地

4 程序代码 /********************************************************************* ——————1.开发环境:Arduino IDE—————————————————————————————————— ——————2.使用开发板型号:Arduino Mega 2560—————————————————————— ——————3.电机型号:36GP BLDC3525直流无刷电机内置霍尔驱动(五线)— *********************************************************************/ #include //定时器库的头文件 // 引脚命名 #define FG_Pin 20 // 霍尔信号,对应外部中断编号3 #define Motor 22 // PWM波输入 #define Direction 24 // 换向线 // 定义变量,如果变量要在中断中访问,要使用volatile进行申明 uint16_t counter = 0; // 霍尔信号计数器 volatile int16_t speed = 0; // 定义转速 // 中断函数 void counterISR(){ counter++; // 计数+1 } // 把计数器置零 void resetCounter(){ measurement(); counter = 0; } // 计算测量到的电机转速 long measurement( ){ /* * 此电机一圈输出9个脉冲信号,计时0.5s,测一次速度,计算信号变化的次数,转化为转速(rpm) */ speed = counter/9/0.5*60; Serial.print("当前转速:"); Serial.print(speed); Serial.println("r/min"); } void setup() { Serial.begin(115200); pinMode(FG_Pin,INPUT); pinMode(Motor,OUTPUT); pinMode(Direction,OUTPUT); attachInterrupt(3,counterISR,RISING); // 外部中断,每次上升沿触发一次中断,便计一次数 FlexiTimer2::set(500,resetCounter); // 定时器中断,中断设置函数,每 500ms 进入一次中断,计算一次转速 FlexiTimer2::start(); // 开始计时 } void loop() { digitalWrite(Direction,HIGH); // 设置旋转方向,高电平逆时针转,方向为负 digitalWrite(Motor, HIGH); delayMicroseconds(100); // 此时占空比100%,频率10KHz digitalWrite(Motor, LOW); delayMicroseconds(100 - 0); // 修改这里的100可以调整频率,可知,方波周期为100微妙 } 5 实验结果         根据输出结果,可知,电机空载转速6000r/min。

6 实验总结 不要直接从Arduino板引脚驱动电机,这可能会损坏电路板,可以使用驱动电路或IC。注意 PWM 信号的频率和占空比设置是否合适。注意共地,否则有可能Arduino的PWM没法对电机调速。

    警告:若电机没有内置驱动,则不要直接从Arduino板引脚驱动电机,这可能会损坏电路板。使用驱动电路或IC。



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3