找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STM32F407+ULN2003驱动步进电机源码,使用方法及现象在readme文本里面很清楚。

  [复制链接]
ID:857818 发表于 2021-4-15 17:14 | 显示全部楼层 |阅读模式
如果你们有更好的方法,多多交流!
       ULN2003驱动-----STM32F407
           IN1-------------PC6
           IN2-------------PC7
           IN3-------------PC8
           IN4-------------PC9
           -5V-------------GND
           +12V-------------+5V
单片机源程序如下:
  1. #include "motor.h"

  2. #define uint unsigned int
  3.         
  4. uint16_t phasecw[4] ={0x0200,0x0100,0x0080,0x0040};// D-C-B-A   
  5. uint16_t phaseccw[4]={0x0040,0x0080,0x0100,0x0200};// A-B-C-D.

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

  12. void Moto_Init(void)
  13. {
  14.         GPIO_InitTypeDef GPIO_InitStructure;
  15.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
  16.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 ;
  17.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  18.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  19.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  20.   GPIO_Init(GPIOC, &GPIO_InitStructure);
  21.   GPIO_ResetBits(GPIOC,GPIO_Pin_6 | GPIO_Pin_7 |GPIO_Pin_8 |GPIO_Pin_9 );
  22. }

  23. void Motorcw(int speed)//步进电机顺时针转  
  24. {  
  25.     uint8_t i;  
  26.     for(i=0;i<4;i++)  
  27.     {  
  28.         GPIO_Write(GPIOC,phasecw[i]);  
  29.         Delay_xms(speed);  
  30.     }  
  31. }


  32. void Motorccw(int speed) //步进电机逆时针转  
  33. {  
  34.     uint8_t i;  
  35.     for(i=0;i<4;i++)  
  36.     {  
  37.         GPIO_Write(GPIOC,phaseccw[i]);  
  38.         Delay_xms(speed);  
  39.     }  
  40. }


  41. void MotorStop(void)  //步进电机暂停
  42. {  
  43.     GPIO_Write(GPIOC,0x0000);  
  44. }


  45. //由于   *一个脉冲*   *输出轴*  转0.08789度(电机实转0.08789*64=5.625度),即步进角为5.625度。
  46. //则转完A-B-C-D为  *8个脉冲*  ,即0.08789*8=0.70312度。若称A-B-C-D为一个周期,则j为需要的转完angle角度所需的周期数。
  47. void Motorcw_angle(int angle,int speed)//步进电机逆时针转 ,angle控制旋转角度,speed控制旋转速度(>500)
  48. {
  49.         int i,j;
  50.         j=(int)(angle/0.70312);
  51.         for(i=0;i<j;i++)
  52.         {
  53.                 Motorcw(speed);
  54.         }
  55.         MotorStop();
  56. }


  57. void Motorccw_angle(int angle,int speed)//步进电机逆时针转 ,angle控制旋转角度,speed控制旋转速度(>500)
  58. {
  59.         int i,j;
  60.         j=(int)(angle/0.70312);
  61.         for(i=0;i<j;i++)
  62.         {
  63.                 Motorccw(speed);
  64.         }
  65.         MotorStop();
  66. }



复制代码

所有资料51hei提供下载:
ULN2003 5V四相步进电机.7z (294.89 KB, 下载次数: 108)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:929128 发表于 2021-6-8 19:16 | 显示全部楼层
这个不错,增加了角度控制,备注清晰,谢谢分享,值得学习。
回复

使用道具 举报

ID:929128 发表于 2021-6-8 19:17 | 显示全部楼层
这个不错,可以调整电机旋转角度,备注清晰,谢谢分享!
回复

使用道具 举报

ID:731673 发表于 2021-6-20 16:55 | 显示全部楼层
本帖最后由 未蓝澄海烟 于 2021-6-20 16:58 编辑

有资源,很友好
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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