单片机控制步进电机的方法很简单,可以用IO口输出脉冲控制线圈电流驱动电机旋转,可分为四相四拍,四相八拍。四相电机,有四相四拍运行方式AB-BC-CD-DA-AB,四相八拍运行方式即 A-AB-B-BC-C-CD-D-DA-A。前面文档给出的表是四相八拍。

下面说下STM32单片机的程序部分,主函数只有定时器、IO初始化和循环。如下

int main(void)
{LED_GPIO_Config();TIM_Config();while(1){      }
}

定时器初始化部分,使用定时器的计数功能,使能定时器中断,使用内部晶振,计算8000000/(79+1)/100 =1000 ,即1ms中断一次。

void TIM_Config(void)
{GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef    TIM_TimeBaseInitStruct;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , ENABLE);  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);TIM_DeInit(TIM3);        TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1 ;    TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up ;   TIM_TimeBaseInitStruct.TIM_Period = 100 ;  TIM_TimeBaseInitStruct.TIM_Prescaler = 79 ;TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct ) ;       NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;     NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;     NVIC_Init(&NVIC_InitStructure);TIM_ClearFlag(TIM3, TIM_FLAG_Update);            TIM_ITConfig(TIM3, TIM_IT_Update,ENABLE);    TIM_Cmd(TIM3, ENABLE);
}

四相八拍 中断服务函数,按照A-AB-B-BC-C-CD-D-DA-A方式控制IO输出。

void TIM3_IRQHandler(void)
{if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  {TIM3_count++;if(TIM3_count>7){TIM3_count=0;}if(TIM3_count==0){GPIO_WriteBit(GPIOA, GPIO_Pin_8,0);GPIO_WriteBit(GPIOA, GPIO_Pin_9,0);GPIO_WriteBit(GPIOA, GPIO_Pin_10,0);GPIO_WriteBit(GPIOA, GPIO_Pin_11,1);}else if(TIM3_count==1){GPIO_WriteBit(GPIOA, GPIO_Pin_8,0);GPIO_WriteBit(GPIOA, GPIO_Pin_9,0);GPIO_WriteBit(GPIOA, GPIO_Pin_10,1);GPIO_WriteBit(GPIOA, GPIO_Pin_11,1);}else if(TIM3_count==2){GPIO_WriteBit(GPIOA, GPIO_Pin_8,0);GPIO_WriteBit(GPIOA, GPIO_Pin_9,0);GPIO_WriteBit(GPIOA, GPIO_Pin_10,1);GPIO_WriteBit(GPIOA, GPIO_Pin_11,0);}else if(TIM3_count==3){GPIO_WriteBit(GPIOA, GPIO_Pin_8,0);GPIO_WriteBit(GPIOA, GPIO_Pin_9,1);GPIO_WriteBit(GPIOA, GPIO_Pin_10,1);GPIO_WriteBit(GPIOA, GPIO_Pin_11,0);}else if(TIM3_count==4){GPIO_WriteBit(GPIOA, GPIO_Pin_8,0);GPIO_WriteBit(GPIOA, GPIO_Pin_9,1);GPIO_WriteBit(GPIOA, GPIO_Pin_10,0);GPIO_WriteBit(GPIOA, GPIO_Pin_11,0);}else if(TIM3_count==5){GPIO_WriteBit(GPIOA, GPIO_Pin_8,1);GPIO_WriteBit(GPIOA, GPIO_Pin_9,1);GPIO_WriteBit(GPIOA, GPIO_Pin_10,0);GPIO_WriteBit(GPIOA, GPIO_Pin_11,0);}else if(TIM3_count==6){GPIO_WriteBit(GPIOA, GPIO_Pin_8,1);GPIO_WriteBit(GPIOA, GPIO_Pin_9,0);GPIO_WriteBit(GPIOA, GPIO_Pin_10,0);GPIO_WriteBit(GPIOA, GPIO_Pin_11,0);}else if(TIM3_count==7){GPIO_WriteBit(GPIOA, GPIO_Pin_8,1);GPIO_WriteBit(GPIOA, GPIO_Pin_9,0);GPIO_WriteBit(GPIOA, GPIO_Pin_10,0);GPIO_WriteBit(GPIOA, GPIO_Pin_11,1);}TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  }
}

使用逻辑分析仪抓的信号如下

四相四拍中断服务函数,按照AB-BC-CD-DA-AB控制输出IO

void TIM3_IRQHandler(void)
{if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET){TIM3_count++;if(TIM3_count>3){TIM3_count=0;}if(TIM3_count==0){GPIO_WriteBit(GPIOA, GPIO_Pin_8,1);GPIO_WriteBit(GPIOA, GPIO_Pin_9,1);GPIO_WriteBit(GPIOA, GPIO_Pin_10,0);GPIO_WriteBit(GPIOA, GPIO_Pin_11,0);}else if(TIM3_count==1){GPIO_WriteBit(GPIOA, GPIO_Pin_8,0);GPIO_WriteBit(GPIOA, GPIO_Pin_9,1);GPIO_WriteBit(GPIOA, GPIO_Pin_10,1);GPIO_WriteBit(GPIOA, GPIO_Pin_11,0);}else if(TIM3_count==2){GPIO_WriteBit(GPIOA, GPIO_Pin_8,0);GPIO_WriteBit(GPIOA, GPIO_Pin_9,0);GPIO_WriteBit(GPIOA, GPIO_Pin_10,1);GPIO_WriteBit(GPIOA, GPIO_Pin_11,1);}else if(TIM3_count==3){GPIO_WriteBit(GPIOA, GPIO_Pin_8,1);GPIO_WriteBit(GPIOA, GPIO_Pin_9,0);GPIO_WriteBit(GPIOA, GPIO_Pin_10,0);GPIO_WriteBit(GPIOA, GPIO_Pin_11,1);}TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  }
}

别看这个步进电机小,其实挺有劲的,转起来手抓不住。直接用脉冲的控制方式噪音大,震动明显,后面介绍正弦波驱动方式,能很好的解决噪音和震动问题。

步进电机-STM32单片机控制四相五线步进电机的程序相关推荐

  1. 【mcuclub】四相五线步进电机

    一.实物图(四相五线步进电机,型号:28BYJ-48-5V) 二.原理图 编号 名称 功能 1 IN1 脉冲输入端 2 IN2 脉冲输入端 3 IN3 脉冲输入端 4 IN4 脉冲输入端 8 GND ...

  2. 四相五线步进电机初解

    步进电机是个很有意思的东东.不同于普通的电机,它的结构中只有线圈和机械部分,控制电路部分是完全独立于电机之外的,因此,使用者得以随心所欲的对步进电机实现完全的控制. 一般来说,步进电机最少有两相,所谓 ...

  3. 51单片机控制二相四线步进电机

    步进电机按定子上绕组来分,有二相.三相和五相等系列.最受欢迎的是两相混合式步进电机,约占97%以上的市场份额,其原因是性价比高,配上细分驱动器后效果良好.该种电机的基本步距角为1.8°/步,配上半步驱 ...

  4. 89c52单片机控制两个步进电机正反转加减速(程序+仿真)

    89c52单片机控制两个步进电机正反转加减速(程序+仿真) 先上图: 源代码: /*********************************************************** ...

  5. stm32单片机控制伺服电机转动固定角度

    stm32单片机控制伺服电机转动固定角度 在用伺服电机进行二维平台移动时,会涉及让二维平台移动一个步长的情况,落实到伺服电机上,就是让伺服电机转动一个固定的角度.所以本文说说让伺服电机转动固定角度,然 ...

  6. 通过STM32单片机控制直流电机实现位置速度电流PID三闭环,让电机精准控制!

    今天我们将会为大家带来一个非常实用的主题,那就是如何通过STM32单片机控制直流电机实现位置速度电流PID三闭环,让电机精准控制! 首先,我们需要准备一台直流电机和一块STM32单片机开发板.接下来, ...

  7. STM32单片机紫外线强度检测仪器蜂鸣器报警(程序+原理图+PCB)

    本设计: 基于STM32单片机紫外线强度检测仪器蜂鸣器报警(程序+原理图+PCB) 原理图:Altium Designer 程序编译器:keil 5 编程语言:C语言 编号C0023 完整下载链接: ...

  8. 单片机18b20c语言程序,AVR单片机控制DS18B20的示例C程序

    原标题:AVR单片机控制DS18B20的示例C程序 #include #include #include #include unsigned char data_H, data_L,wendu; un ...

  9. 步进电机-STM32单片机定时器正弦波输出

    前面的文章介绍了单片机控制步进电机四相四拍.四相八拍的方式.用的是持续电平驱动,这种驱动方式电机的噪音大,震动明显,下面介绍正弦波驱动方式,这种方式能很好的解决噪音和震动问题. 首先需要准备下stm3 ...

最新文章

  1. 结对开发--求二维数组的最大子数组
  2. 如何识别 Linux 上的文件分身
  3. 最新Ceph L版与openstack Pike对接
  4. 博客搬到CSDN了,以后就老实的呆在这儿吧~~
  5. UML图入门学习笔记
  6. js 返回上一页和刷新以及页面跳转
  7. 魅族管理层换血?官方回应:信息被错误解读 黄章仍为最大股东
  8. elementui el-input输入数字为整数的验证
  9. 解析几何:第六章 二次曲面(1)球面 椭球面 双曲面
  10. 对待新知识、新领域的心态——好奇、批判、独孤求败
  11. 存储器计算机原理实验,存储器扩展实验|计算机原理存储器扩展实验
  12. 基于Android的天气预报APP设计与实现
  13. java安卓字体_Android中添加外部字体库和竖直排列字体
  14. 【miscellaneous】视频浓缩摘要简介
  15. Unity 数学基础
  16. ppt复制切片器_手把手教你使用Excel切片器,小白也能做出好看又好玩的动态图表...
  17. pgsql遇到小问题及小功能记录
  18. オフショア開発を成功させる工夫10点
  19. java实习生面试题总结
  20. kali2020 vnc安装,在Kali Linux 2020.x上安装和卸载VLC媒体播放器的方法

热门文章

  1. 盈利能力、成长性与内在价值(续)
  2. 鱼C工作室 零基础学python 第3讲
  3. 归档--网络规划师的论文写作心得-指南
  4. 怎么在windows上安装 ansible How to install ansible to my python at Windows
  5. 2019年全美数学建模竞赛(B题,重心法选址+类蚁群算法路径规划)
  6. 清除华为路由交换设备console登录密码
  7. Android模仿奇怪的大冒险主界面表情变化
  8. Android:数据存储和界面展示
  9. windows下最好的围棋_小孩子学围棋有些什么好处和坏处?
  10. 手游服务器ip 修改密码,手游无双小师妹一键启动服务端+配套客户端+启动教程+IP修改说明等...