当前位置:   article > 正文

步进电机基础知识_步进电机技术指标

步进电机技术指标

一、基础知识

1、步进电机

它是将电脉冲信号转变为角位移或线位移的开环控制元件。(一个脉冲信号就会使电机转动一定角度)

注:电机的转速、停止的位置仅取决于脉冲信号的频率和脉冲数;

2、步进电机工作原理

  • 转子是永磁体。当电流流过绕组的时候,它会产生一个矢量磁场,该磁场会带动转子旋转一定角度,转子和定子的磁场保持一致,定子随着磁场旋转一定角度时转子也会随之转动,该角度称为步距角。(每输入一个脉冲,转子就会转动一个步距角)
  • 步进电机的角位移与输入的脉冲成正比,旋转的速度脉冲的频率成正比。
  • 改变电机的转动方向:改变绕组的通电顺序(改变电流方向)
  • 步进电机的极性区分

        

  •  步进电机驱动原理

 (1)双极性步进电机:由于A、B其中只有一个有高低电平差得电,例如A+为高电平,A-为低电平,N极与S极会反向,两者之间会产生作用力使得转子转动一定角度,从而带动整个电机转动(单向) 。 而双向,则是改变了步距角,且A与B两组均产生高低电平差异。

    (2) 单极性步进电机:    单极性的电机电流方向不可变,公共端必须一直处于通电状态,然后改变其它端的通电情况即可。

  3、步进电机技术指标 

        1、静态技术指标 :相数(线圈数量)、拍数(完成磁场变化所需的脉冲数)(可以同时通电的组数)、步距角(一个脉冲电机旋转的角度)、定位转距(电机各相绕组不通电且处于开路状态时,由于混合式电机转子上有永磁材料产生磁场,从而产生的转距)、静转距(步进电机在通电但无转动时,定子锁住转子的力距)。

        2、动态技术指标: 步距角精度、失步(负载太大或者频率过快会导致)、失调角、最大空载起动频率、最大空载运行频率、运行转矩特性、电机正反转控制。 

 二、步进电机编程思路

1、各端口电平情况(根据下面图示设置)

2、28BYJ-48步进电机转角脉冲换算

360/5.625*64=4096

3、实现功能

按下KEY1调节电机旋转方向,按下KEY2电机加速,按下KEY3电机减速

三、实现代码

  1. #include <stdio.h>
  2. typedef unsigned char u8;
  3. typedef unsigned int u16;
  4. sbit IN1_D=P1^0;
  5. sbit IN1_C=P1^1;
  6. sbit IN1_B=P1^2;
  7. sbit IN1_A=P1^3;
  8. sbit KEY1=P3^1;
  9. sbit KEY2=P3^0;
  10. sbit KEY3=P3^2;
  11. sbit KEY4=P3^3;
  12. #define KEY1_PRESS 1
  13. #define KEY2_PRESS 2
  14. #define KEY3_PRESS 3
  15. #define KEY4_PRESS 4
  16. #define KEY_UNPRESS 0
  17. #define STEPMOTOR_MAXSPEED 1 //表示电机所能允许的最大速度(延时最短)
  18. #define STEPMOTOR_MINSPEED 5//表示电机所能允许的最小速度(延时最大)
  19. //10us级延时
  20. void delay_10us(u16 ten_us){
  21. while(ten_us--);
  22. }
  23. //ms级延时
  24. void delay_ms(u16 ms){
  25. u16 i,j;
  26. for(i=ms;i>0;i--)
  27. for(j=110;j>0;j--);
  28. }
  29. //按键扫描 mode0表示单值扫描,为1表示连续扫描
  30. u8 key_scan(u8 mode){
  31. static u8 key=1;
  32. if(mode) key=1;
  33. if(key==1&&(KEY1==0||KEY2==0||KEY3==0||KEY4==0))
  34. {
  35. delay_10us(1000); //消抖
  36. key=0;
  37. //判断四个按键中哪一个按键被按下
  38. if(KEY1==0){
  39. return KEY1_PRESS;
  40. } else if(KEY2==0){
  41. return KEY2_PRESS;
  42. } else if(KEY3==0){
  43. return KEY3_PRESS;
  44. } else if(KEY4==0){
  45. return KEY4_PRESS;
  46. }
  47. } else if(KEY1==1&&KEY2==1&&KEY3==1&&KEY4==1){
  48. key=1;
  49. }
  50. return KEY_UNPRESS; //没有按键被按下
  51. }
  52. //step 表示步数 dir表示方向
  53. void step_motor_28BYJ48_send_pulse_(u8 step,u8 dir){
  54. u8 temp=step;
  55. //dir为0表示方向变化,通过temp中间变量让其倒过来,实现反向的功能
  56. if(dir==0)
  57. temp=7-step;
  58. switch(step){
  59. case 0: IN1_A=1;IN1_B=1;IN1_C=1;IN1_D=0; break;
  60. case 1: IN1_A=1;IN1_B=1;IN1_C=0;IN1_D=0; break;
  61. case 2: IN1_A=1;IN1_B=1;IN1_C=0;IN1_D=1; break;
  62. case 3: IN1_A=1;IN1_B=0;IN1_C=0;IN1_D=1; break;
  63. case 4: IN1_A=1;IN1_B=0;IN1_C=1;IN1_D=1; break;
  64. case 5: IN1_A=0;IN1_B=0;IN1_C=1;IN1_D=1; break;
  65. case 6: IN1_A=0;IN1_B=1;IN1_C=1;IN1_D=1; break;
  66. case 7: IN1_A=0;IN1_B=1;IN1_C=1;IN1_D=0; break;
  67. }
  68. }
  69. void main(){
  70. u8 key=0; //保存按键返回值
  71. u8 dir=0; //表示电机转动方向
  72. u8 step=0; //用于记录步骤并循环
  73. u8 speed=STEPMOTOR_MAXSPEED; //用于记录速度
  74. while(1){
  75. key=key_scan(0);
  76. if(key==KEY1_PRESS)
  77. dir=!dir;
  78. else if(key==KEY2_PRESS){
  79. if(speed>STEPMOTOR_MAXSPEED){ //判断速度是否已经到达最大速度(即延时时间不可再减)
  80. speed-=1;
  81. }
  82. } else if(key==KEY3_PRESS){
  83. if(speed<STEPMOTOR_MINSPEED){ //判断速度是否已经到达最小速度(即延时时间不可再加)
  84. speed+=1;
  85. }
  86. }
  87. step_motor_28BYJ48_send_pulse_(step++,dir);
  88. if(step==8) step=0;
  89. delay_ms(speed);
  90. }
  91. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/540197
推荐阅读
相关标签
  

闽ICP备14008679号