电调控制直流无刷电机

实验材料:

1.直流无刷电机(A2212-10 KV:1400)
2.好盈天行者电调
3.stm32c8t6核心小板

先了解一下无刷电机工作原理:https://www.bilibili.com/video/av29780856
电机参数:
电调控制直流无刷电机_第1张图片
电调参数:
电调控制直流无刷电机_第2张图片
**实物图片:
电调控制直流无刷电机_第3张图片

接线方式:

我电调用的是转压板12v供电(最粗的红黑两根线),电调带bec5V线性稳压输出给单片机供电(细的红黑两根线),细的白线为pwm控制信号输入,三根粗的黑线接无刷电机。

控制方式:

需要注意的是无刷电机并不像直流电机一样任意给一个占空比的pwm就可以转动,而且频率也有要求。频率允许在50ZH-432HZ,然后一般要给他一个0.5ms-2.5ms高电平才能转动。我的频率就配置为200HZ,在控制电机之前必须先要给电调设置一个时间的最大值和最小值。我让他的高电平时间控制在0.7-1.9ms,所以在刚开始初始化时,先设置一个高电平时间的最大值1.9ms,因为频率为200hz,周期为5ms,此时对应占空比为duty = 0.38,TIM2->CCR1 = 7199*duty;然后通过按键使占空比为高电平时间0.7ms最小时对应的值,即duty = o.14;下载程序到单片机后,给电调上电,会听到哔哔哔三声,然后按下按键设置最小时间,设置成功后会有长的哔一声;完后修改程序初始化时先让pwm占空比最小0.14,通过按键一点一点的加占空比duty,从而实现无刷的调速。

####我的代码:

#include "led.h"
#include "oled.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "led.h"
#include "ultrasonic.h"
#include "pwm.h"
#include "key.h"


char distance[30];
float acdis;
///C8T6核心板模板//////////////
int main(void)
 { 
   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //设置中断优先级分组2
  delay_init();    //延时函数初始化
  uart_init(9600);    //串口初始化为9600
  LED_Init();     //LED初始化
  OLED_Init();   //初始化OLED 
   KeyInit();
//   Tim3CountInit();   //初始化定时器3,用于超声波计数,每计一次为0.001ms,60ms后溢出
//   UltrasonicInit();   //初始化超声波所用的IO口
  
  PWM_GPIO_Config(); 
  PWM_Mode_Config();//自动装载值7199,时钟分频系数49,频率200hz

   while(1)
  {
   static float duty = 0.14;
   if(KEY0 == 0)
   {
      delay_ms(10);
      if(KEY0 == 0)
      {
       if(duty < 0.38)duty += 0.03;
       //duty = 0.14; 
      }
    while(!KEY0) ;    
   }
   else if(KEY1 == 0)
   {
      delay_ms(10);
      if(KEY1 == 0)
      {
       if(duty > 0.14)duty -= 0.03;
      }
     while(!KEY1) ;     
   }

    else if(WK_UP == 0)
   {
      delay_ms(10);
      if(WK_UP == 0)
      {
       duty = 0.14;//占空比如果瞬间给0的话,电机会以当前速度运转大概长达3秒后才会停止
                          //为了安全,占空比给这个对应0.7ms最小值时会立刻自由停止。
      }       
     while(!WK_UP) ;     
   }

     if(duty > 0.38)duty = 0.38;
     if(duty < 0.14)duty = 0.14;
     TIM2->CCR1 = 7199*duty;
     sprintf(distance,"Duty : %.3f    TH : %.3f ms",(float)duty,(float)duty*5);
    OLED_ShowString(0,0,(u8 *)distance);   
    }
}




千万要注意的一点,假若在控制四旋翼飞行器时要实现故障时自锁定使飞机的螺旋桨快速停转,四个电机的pwm占空比不是直接给为0,不是直接给为0,不是直接给为0,而是给高电平最小时间对应占空比,我的WK_UP按键实现电机快速停止,duty = 0.14;直接给个0的话电机还会以高速旋转长达约3秒才会停止转动。大四旋翼非常危险,生命安全是第一。

你可能感兴趣的:(嵌入式技术,无刷电机的实现,单片机)