找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1832|回复: 8
收起左侧

基于stm32的ULN2033求助,电机在震,但是不转

[复制链接]
ID:558088 发表于 2019-12-19 21:04 | 显示全部楼层 |阅读模式
我电机在震,但是不转怎么办呀,用一开始的程序能转起来,但是看了之后改进我的里面就不行,可以帮我看看嘛.步进电机c文件
  1. #include "bujin.h"
  2. #include "SysTick.h"

  3. #define uint unsigned int

  4. uint16_t phasecw[4] ={0x0800,0x0400,0x0200,0x0100};

  5. void Delay_xms(uint x)
  6. {
  7. uint i,j;
  8. for(i=0;i<x;i++)
  9.   for(j=0;j<112;j++);
  10. }

  11. void MOTO_Init(void)
  12. {
  13.         
  14. GPIO_InitTypeDef GPIO_InitStructure;
  15. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
  16. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 ;
  17. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  18. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  19. GPIO_Init(GPIOD,&GPIO_InitStructure);
  20. GPIO_ResetBits(GPIOD,GPIO_Pin_8 | GPIO_Pin_9 |GPIO_Pin_10 |GPIO_Pin_11 );
  21.         
  22. }

  23. void Motorcw(uint speed)  
  24. {  
  25.     uint8_t i=0;         
  26.         {
  27.     for(i=0;i<4;i++)  
  28.     {  
  29.         GPIO_Write(GPIOD,phasecw[i]);  
  30.         delay_ms(speed);  
  31.     }
  32.         }
  33. }

  34. void MotorStop(void)  
  35. {
  36. GPIO_Write(GPIOD,0x0000);  
  37. }

  38. void Motorcw_angle(int angle,int speed)
  39. {
  40.         int i,j;
  41.         j=(int)(angle/0.70312);
  42.         for(i=0;i<j;i++)
  43.         {
  44.                 Motorcw(speed);
  45.         }
  46. }
复制代码
主程序的
  1. if(hum>=setup||shi>=setup)
  2. {
  3.         led3=!led3;
  4.         beep=!beep;
  5.         Motorcw_angle(90,4);
  6.                  data_pros();
  7.                 }
  8.                 else
  9.                 {
  10.                  data_pros();
  11.                  }
  12. }
复制代码





回复

使用道具 举报

ID:558088 发表于 2019-12-19 21:06 | 显示全部楼层
一直在震,但是不会转,气死了
回复

使用道具 举报

ID:558088 发表于 2019-12-20 08:37 | 显示全部楼层
有人会不
回复

使用道具 举报

ID:25310 发表于 2019-12-20 08:48 | 显示全部楼层
看下速度是否太快启动不了。就是哪个延时。
回复

使用道具 举报

ID:558088 发表于 2019-12-20 09:07 | 显示全部楼层
步进电机有一个技术参数:空载启动频率,即步进电机在空载情况下能够正常启 
动的脉冲频率,如果脉冲频率高于该值,电机不能正常启动,可能发生丢步或堵
转。在有负载的情况下,启动频率应更低。如果要使电机达到高速转动,脉冲频
率应该有加速过程,即启动频率较低,然后按一定加速度升到所希望的高频(电
机转速从低速升到高速)。

刚刚看到这个,是因为这个吗
回复

使用道具 举报

ID:532541 发表于 2019-12-20 10:03 | 显示全部楼层
main()
for(;;)
{
  if(hum>=setup||shi>=setup)
{
        led3=!led3;
        beep=!beep;
        Motorcw_angle(90,4);
                 data_pros();
                }
                else
                {
                 data_pros();
                 }
}
}
主程序应该是的死循环
回复

使用道具 举报

ID:558088 发表于 2019-12-20 11:07 | 显示全部楼层
pcbboy 发表于 2019-12-20 08:48
看下速度是否太快启动不了。就是哪个延时。

我没调过,电机能转,但是加到我的程序里,就不转只会震
回复

使用道具 举报

ID:558088 发表于 2019-12-20 11:10 | 显示全部楼层
  1.         while(1)
  2.         {
  3.                 key=KEY_Scan(0);  
  4.                 switch(key)
  5.                 {
  6.                         case KEY_UP:    setup=setup+1;break;   
  7.                         case KEY_DOWN:  setup=setup-1;break;   
  8.                 }
  9.                 if(setup>=99)
  10.                 {
  11.                         setup=99;
  12.                 }
  13.                 i++;
  14.                 if(i%20==0)
  15.                 {
  16.                         data_pros();  
  17.                 }               

  18.                 delay_us(10);
  19.      hum=humi/10;
  20.                 shi=shidu/10;
  21.                 if(hum>=setup||shi>=setup)
  22.                 {
  23.         led3=!led3;
  24.         beep=!beep;
  25.         Motorcw_angle(90,4);
  26.                  data_pros();
  27.                 }
  28.                 else
  29.                 {
  30.         GPIO_SetBits(LED_PORT,LED_PIN);
  31.                  data_pros();
  32.                 }       
  33.         }
复制代码

这个是主程序的while循环
回复

使用道具 举报

ID:558088 发表于 2019-12-20 11:10 | 显示全部楼层

我发了个主程序的while循环 在楼下
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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