找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1227|回复: 4
收起左侧

为什么单片机不能控制步进电机停止,求解

[复制链接]
ID:858009 发表于 2021-5-19 11:52 | 显示全部楼层 |阅读模式
  1. #include <reg52.h>  //头文件

  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. uchar code CCW[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; //逆时钟旋转相序表
  5. uchar code CW[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08}; //正时钟旋转相序表

  6. sbit S2=P3^0;
  7. sbit S3=P3^1;

  8. void delaynms(uint aa)
  9. {
  10.         uchar bb;
  11.   while(aa--)
  12.                 {
  13.                         for(bb=0;bb<115;bb++) //1ms基准延时程序
  14.                         {
  15.                                 ;
  16.       }
  17.     }
  18. }
  19. void motor_ccw(void) //正转每次转5.625度
  20.         {
  21.                 uchar i,j;
  22.     for(j=0;j<64;j++)//电机旋转一周,不是外面所看到的一周,是里面的传动轮转了一周
  23.                 {
  24.                         for(i=0;i<8;i++) //旋转45度
  25.                         {
  26.                                 P1=CCW[i];
  27.                                 delaynms(2); //调节转速
  28.                         }
  29.                 }
  30.         }
  31. void motor_cw(void)//反转每次转5.625度
  32. {
  33.         uchar i,j;
  34.         for(j=0;j<64;j++)
  35.         {
  36.                 for(i=0;i<8;i++) //旋转45度
  37.                 {
  38.                         P1=CW[i];
  39.                         delaynms(2); //调节转速
  40.                         }
  41.         }
  42. }
  43. //停止转动
  44. void MotorStop(void)
  45.         {
  46.                 P1=0x00;
  47.         }
  48. void main(void)
  49.         {
  50.                 uchar r;
  51.                 uchar N=4; //因为步进电机是减速步进电机,减速比的1/64 ,所以N=64时,步进电机主轴转一圈 64*5.625=360
  52.                 while(1)
  53.                         {
  54. //                                if(S2==0)
  55.                                 {
  56.                                         for(r=0;r<N;r++)
  57.                                         {
  58.                                                 motor_ccw(); //电机正转
  59.                                           delaynms(100);
  60.                                           MotorStop();
  61.                                           delaynms(100);
  62.                                         }
  63.                                   MotorStop(); //停止转动
  64.                                   delaynms(500);
  65.                                 }
  66. //                                if(S3==0)
  67.                                         {
  68.                                                 for(r=0;r<N;r++)
  69.                                                 {
  70.                                                         motor_cw(); //电机反转
  71.                                             delaynms(100);
  72.                                             MotorStop();
  73.                                             delaynms(100);
  74.                                                 }
  75.                                                 MotorStop(); //停止转动
  76.                                     delaynms(500);
  77.                                         }
  78.                         }
  79.         }
复制代码
回复

使用道具 举报

ID:739545 发表于 2021-5-19 13:09 | 显示全部楼层
不给送脉冲就停止了
回复

使用道具 举报

ID:844772 发表于 2021-5-19 14:14 | 显示全部楼层
//     if(S2==0)
你把判断这句都加注释号了,就是要电机正转一会,反转一会不停的啊
回复

使用道具 举报

ID:858009 发表于 2021-5-19 15:54 | 显示全部楼层
glinfei 发表于 2021-5-19 14:14
//     if(S2==0)
你把判断这句都加注释号了,就是要电机正转一会,反转一会不停的啊

不注解动都不动
回复

使用道具 举报

ID:858009 发表于 2021-5-19 15:55 | 显示全部楼层
lovezjf234 发表于 2021-5-19 13:09
不给送脉冲就停止了

怎么修改
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表