详解Arduino Uno控制直流电机之应用

电子说

1.2w人已加入

描述

  直流电机
 
  直流电机(direct current machine)是指能将直流电能转换成机械能(直流电动机)或将机械能转换成直流电能(直流发电机)的旋转电机。它是能实现直流电能和机械能互相转换的电机。当它作电动机运行时是直流电动机,将电能转换为机械能;作发电机运行时是直流发电机,将机械能转换为电能。
 
  组成结构
 
  直流电机的结构应由定子和转子两大部分组成。直流电机运行时静止不动的部分称为定子,定子的主要作用是产生磁场,由机座、主磁极、换向极、端盖、轴承和电刷装置等组成。运行时转动的部分称为转子,其主要作用是产生电磁转矩和感应电动势,是直流电机进行能量转换的枢纽,所以通常又称为电枢,由转轴、电枢铁心、电枢绕组、换向器和风扇等组成。
 
  定子
 
  (1)主磁极
 
  主磁极的作用是产生气隙磁场。主磁极由主磁极铁心和励磁绕组两部分组成。
 
  铁心一般用0.5mm~1.5mm厚的硅钢板冲片叠压铆紧而成,分为极身和极靴两部分,上面套励磁绕组的部分称为极身,下面扩宽的部分称为极靴,极靴宽于极身,既可以调整气隙中磁场的分布,又便于固定励磁绕组。励磁绕组用绝缘铜线绕制而成,套在主磁极铁心上。整个主磁极用螺钉固定在机座上,
 
  (2)换向极
 
  换向极的作用是改善换向,减小电机运行时电刷与换向器之间可能产生的换向火花,一般装在两个相邻主磁极之间,由换向极铁心和换向极绕组组成。换向极绕组用绝缘导线绕制而成,套在换向极铁心上,换向极的数目与主磁极相等。
 
  (3)机座
 
  电机定子的外壳称为机座。机座的作用有两个:
 
  一是用来固定主磁极、换向极和端盖,并起整个电机的支撑和固定作用;
 
  二是机座本身也是磁路的一部分,借以构成磁极之间磁的通路,磁通通过的部分称为磁轭。为保证机座具有足够的机械强度和良好的导磁性能,一般为铸钢件或由钢板焊接而成。
 
  (4)电刷装置
 
  电刷装置是用来引入或引出直流电压和直流电流的。电刷装置由电刷、刷握、刷杆和刷杆座等组成。电刷放在刷握内,用弹簧压紧,使电刷与换向器之间有良好的滑动接触,刷握固定在刷杆上,刷杆装在圆环形的刷杆座上,相互之间必须绝缘。刷杆座装在端盖或轴承内盖上,圆周位置可以调整,调好以后加以固定。
 
  转子
 
  (1)电枢铁心
 
  电枢铁心是主磁路的主要部分,同时用以嵌放电枢绕组。
 
  一般电枢铁心采用由0.5mm厚的硅钢片冲制而成的冲片叠压而成,以降低电机运行时电枢铁心中产生的涡流损耗和磁滞损耗。叠成的铁心固定在转轴或转子支架上。铁心的外圆开有电枢槽,槽内嵌放电枢绕组。
 
  (2)电枢绕组
 
  电枢绕组的作用是产生电磁转矩和感应电动势,是直流电机进行能量变换的关键部件,所以叫电枢。它是由许多线圈(以下称元件)按一定规律连接而成,线圈采用高强度漆包线或玻璃丝包扁铜线绕成,不同线圈的线圈边分上下两层嵌放在电枢槽中,线圈与铁心之间以及上、下两层线圈边之间都必须妥善绝缘。为防止离心力将线圈边甩出槽外,槽口用槽楔固定。线圈伸出槽外的端接部分用热固性无纬玻璃带进行绑扎。
 
  (3)换向器
 
  在直流电动机中,换向器配以电刷,能将外加直流电源转换为电枢线圈中的交变电流,
 
  使电磁转矩的方向恒定不变;在直流发电机中,换向器配以电刷,能将电枢线圈中感应产生的交变电动势转换为正、负电刷上引出的直流电动势。换向器是由许多换向片组成的圆柱体,换向片之间用云母片绝缘。
 
  (4)转轴
 
  转轴起转子旋转的支撑作用,需有一定的机械强度和刚度,一般用圆钢加工而成。
 
  工作原理
 
  直流电机里边固定有环状永磁体,电流通过转子上的线圈产生安培力,当转子上的线圈与磁场平行时,再继续转受到的磁场方向将改变,因此此时转子末端的电刷跟转换片交替接触,从而线圈上的电流方向也改变,产生的洛伦兹力方向不变,所以电机能保持一个方向转动。
 
  直流发电机的工作原理就是把电枢线圈中感应的交变电动势,
 
  靠换向器配合电刷的换向作用,使之从电刷端引出时变为直流电动势的原理。
 
  感应电动势的方向按右手定则确定(磁感线指向手心,大拇指指向导体运动方向,其他四指的指向就是导体中感应电动势的方向)。
 
  导体受力的方向用左手定则确定。这一对电磁力形成了作用于电枢一个力矩,这个力矩在旋转电机里称为电磁转矩,转矩的方向是逆时针方向,企图使电枢逆时针方向转动。如果此电磁转矩能够克服电枢上的阻转矩(例如由摩擦引起的阻转矩以及其它负载转矩),电枢就能按逆时针方向旋转起来。

  Arduino Uno控制直流电机

  其实,三年前的东西都已经记不清楚了。研究生没有做硬件,相关的都快看不懂了!为了让大家看得懂程序,将总的系统设计思路贴出来,如下:

  整个系统是实现“太阳能智能控制环保路灯控制器设计”,主要是用直流电机控制太阳能电池板转动,确保其在每个时间段能够实现最高的发电效率,仿向日葵实现东西转动。

  Arduino Uno手册上有其关于控制直流电机的详细介绍,如果仔细阅读,实现起来很简单的。可以结合本文的系统,对其进一步理解,则可以编写响应的代码。

  主程序

  //#include

  int pinI1=8;

  int pinI2=9;

  int pinI3=2;

  //int pinI4=3;

  int pinI5=4;

  //int pinI6=5;

  //int pinI7=6;

  int speedin=11;

  volatile int state=LOW;

  void setup()

  {

  pinMode(pinI1,OUTPUT);

  pinMode(pinI2,OUTPUT);

  pinMode(pinI3,INPUT);

  // pinMode(pinI4,OUTPUT);

  pinMode(pinI5,OUTPUT);

  // pinMode(pinI6,OUTPUT);

  // pinMode(pinI7,OUTPUT);

  pinMode(speedin,OUTPUT);

  // myPID.SetMode(AUTOMATIC);

  // attachInterrupt(0,light,HIGH);

  }

  void loop()

  {

  while(1)

  {

  int m=analogRead(A0);

  int n=analogRead(A1);

  int err,err1,err2;

  int pidspeed1;

  float kp=0.1 ,ki=0,kd=0;

  err=m-n;

  pidspeed1=(int)(err*kp-err1*ki+err2*kd);

  err1=err;

  err2=err1;

  state=digitalRead(pinI3);

  digitalWrite(pinI5,state);

  if (m》n)

  {

  // while(1)

  // {

  digitalWrite(pinI1,LOW);

  digitalWrite(pinI2,HIGH);

  analogWrite(speedin,100+pidspeed1);

  // }

  // delay(2000);

  }

  else if(m

  {

  // while(1)

  // {

  digitalWrite(pinI1,HIGH);

  digitalWrite(pinI2,LOW);

  analogWrite(speedin,100-pidspeed1);

  // delay(2000);

  // }

  }

  1

  else

  {

  // while(1)

  // {

  digitalWrite(pinI1,HIGH);

  digitalWrite(pinI2,HIGH);

  //delay(2000);

  // }

  }

  }

  }

  这是我本科毕业设计的部分内容,之前回答别人相关问题时留下了QQ号,这几年总有人加我问相关的问题。今天也有一个本科生咨询,趁这个机会,就把相关资料贴出来吧。

  其实,三年前的东西都已经记不清楚了。研究生没有做硬件,相关的都快看不懂了!为了让大家看得懂程序,将总的系统设计思路贴出来,如下:

  12

  PID算法控制程序

  该部分系统原理图如下,有助于理解代码,可根据应用环境不同修改代码:

  int m=analogRead(A0);

  int n=analogRead(A1);

  int err,err1,err2;

  int pidspeed1;

  float kp=0.1 ,ki=0,kd=0;

  err=m-n;

  pidspeed1=(int)(err*kp-err1*ki+err2*kd);

  err1=err;

  err2=err1;

  void light();

  SetMotor(Output);

  void SetMotor()

  {

  if (m》n)

  {

  digitalWrite(pinI1,LOW);

  digitalWrite(pinI2,HIGH);

  12345

  analogWrite(speedin,100+pidspeed1);}

  else if(m

  { digitalWrite(pinI1,HIGH);

  digitalWrite(pinI2,LOW);

  analogWrite(speedin,100-pidspeed1);}

  12345

  else

  {digitalWrite(pinI1,HIGH);

  digitalWrite(pinI2,HIGH);}

  }


打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分