编程思路及步骤

以输出一路pwm为例:

  1. 初始化gpio(以下两个io口控制驱动器的使能端和方向端):
void STEP_MOTO_GPIO_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;/*开启GPIOB和GPIOC的外设时钟*/RCC_APB2PeriphClockCmd(Moto_RCC1 | Moto_RCC2, ENABLE);/*选择要控制的GPIOB引脚*/                                                             GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13;    /*设置引脚模式为通用推挽输出*/GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   /*设置引脚速率为50MHz */   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /*调用库函数,初始化GPIOB*/GPIO_Init(Moto_Port1, &GPIO_InitStructure);          /* 高电平    */GPIO_SetBits(Moto_Port1, GPIO_Pin_12 | GPIO_Pin_13);
}

2.初始化定时器以及输出pwm的io口PB9:

void TIM4_PWM_Init(u16 arr,u16 psc)
{  GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;TIM_OCInitTypeDef  TIM_OCInitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);   //使能定时器4时钟//初始化TIM4TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值TIM_TimeBaseStructure.TIM_Prescaler = psc; //设置用来作为TIMx时钟频率除数的预分频值 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位//PWMB PB9RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //使能定时器4时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO, ENABLE);  //使能GPIO外设和AFIO复用功能模块时钟//设置该引脚为复用输出功能,输出TIM4 CH4的PWM脉冲波形    GPIOB.9GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //TIM4_CH4GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO//初始化TIM4 Channel4 PWM模式  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高TIM_OCInitStructure.TIM_Pulse = 0;TIM_OC4Init(TIM4, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM4 OC2TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable);  //使能TIM4在CCR2上的预装载寄存器TIM_Cmd(TIM4, ENABLE);  //使能TIM4
}
  1. 最后就是通过调节频率来控制步进电机的速度了:
/*具体控制电机的功能使用*/#include "moto.h"
#include "step_moto.h"#define  Updown_Moto_Left_UP()       {GPIO_SetBits(Moto_Port1, Updown_Moto_Left_DIR); GPIO_ResetBits(Moto_Port1, Updown_Moto_Left_ENA);}
#define  Updown_Moto_Left_DOWM()     {GPIO_ResetBits(Moto_Port1, Updown_Moto_Left_DIR); GPIO_ResetBits(Moto_Port1, Updown_Moto_Left_ENA);}
#define  Updown_Moto_Left_STOP()     {GPIO_SetBits(Moto_Port1, Updown_Moto_Left_ENA);}#define  Updown_Moto_Right_UP()       {GPIO_SetBits(Moto_Port1, Updown_Moto_Right_DIR); GPIO_ResetBits(Moto_Port1, Updown_Moto_Right_ENA);}
#define  Updown_Moto_Right_DOWM()     {GPIO_ResetBits(Moto_Port1, Updown_Moto_Right_DIR); GPIO_ResetBits(Moto_Port1, Updown_Moto_Right_ENA);}
#define  Updown_Moto_Rightt_STOP()     {GPIO_SetBits(Moto_Port1, Updown_Moto_Right_ENA);}#define  Moto_PWM_SET_Updown_Moto_LEFT()     {TIM_SetCompare4(TIM4,5000);}
#define  Moto_PWM_SET_Updown_Moto_RIGHT()    {TIM_SetCompare2(TIM2, 5000);}
#define  Moto_PWM_REMOVE()    {TIM_SetCompare4(TIM4, 0);TIM_SetCompare2(TIM2, 0);TIM_SetCompare3(TIM2, 0);TIM_SetCompare4(TIM2, 0);}/*左右同步电机的运动*/
void Updown_Moto_UP(void)
{Updown_Moto_Left_UP();Updown_Moto_Right_UP();Moto_PWM_SET_Updown_Moto_LEFT();Moto_PWM_SET_Updown_Moto_RIGHT();
}void Updown_Moto_DOWN(void)
{Updown_Moto_Left_DOWM();Updown_Moto_Right_DOWM();Moto_PWM_SET_Updown_Moto_LEFT();Moto_PWM_SET_Updown_Moto_RIGHT();
}void Updown_Moto_STOP(void)
{Updown_Moto_Left_STOP();Updown_Moto_Rightt_STOP();Moto_PWM_REMOVE();
}

通过调节在下一个更新事件装入活动的自动重装载寄存器周期的值来设置步进电机的转速:

void pwm_init(void)
{delay_init();STEP_MOTO_GPIO_Init();TIM2_PWM_Init(15000,0);//不分频。PWM频率为7200000000/15000=4800hz    //一秒转6圈TIM4_PWM_Init(5625,0);//不分频。PWM频率为7200000000/5625=12800hz   //一秒转16圈}
 int main(void){     pwm_init();               while(1){//Updown_Moto_UP();//丝杆往上Updown_Moto_DOWN();//丝杆往下//Updown_Moto_STOP();//丝杆停止}    return 0;
}

源程序附上:https://download.csdn.net/download/weixin_39589455/10972985

具体的接线后面更新

【stm32开发日志】步进电机、直线模组、丝杆的接线、编程与使用相关推荐

  1. plc 滑台流程图_PLC控制直线模组滑台运动概述

    设备中直线模组滑台常用的可编程操控器(简称PLC)以其通用性强.可靠性高.指令体系简单.编程简便易学.易于掌握.体积小.修理作业少.现场接口装置方便等一系列长处,被广泛应用于工业自动操控中.特别是在组 ...

  2. 直线模组使用滚珠丝杆和普通丝杆的区别

    滚珠丝杆模组是直线模组中的其中一种,滚珠丝杆模组能成为工业设备产业界使用最广的自动化产品之一,很大程度上在于滚珠丝杆与其他配件相互协调相互作用:目前市场上,丝杆的种类有很多,那为什么选用滚珠丝杆,而不 ...

  3. 直线模组常用的驱动模式有哪些?

    直线模组是工业生产中经常用到的直线运动单元,其驱动方式有很多种,但常用的驱动方式通常有两种,一种是滚珠丝杆传动,另一种是同步带传动. 滚珠丝杆传动方式的特点是重复定位精度较高,最高精度可达±0.005 ...

  4. 飞创高精度长行程直线模组丨行业解决方案及应用案例

    直线电机模组平台发展至今,已经被广泛应用到各种各样的设备中.相对于传统丝杆.皮带模组等传统直线传动方式,直线电机模组完美展现了其单体运动速度快.重复定位精度高.使用寿命长等一系列优点,让越来越多的设备 ...

  5. 直线模组在运行过程中出现抖动应该怎么处理?

    直线模组的出现,在一定程度上改变了人们的生活方式,也让传统的制造业发生了质的变化!例如,我们的智能家居,新能源汽车都需要用到直线模组. 直线模组最常用的有丝杆模组和同步带模组,特别是丝杆模组,因其具有 ...

  6. 直线模组和直线电机的区别

    现已进入智能时代了,在精密行业中,机器人也逐渐代替人工,自动化设备行业已经蓬勃发展了.作为重要传动原件的直线模组和直线电机也逐渐走进人们的生活,被广泛使用. 在日常生活中,很多人都以为直线模组和直线电 ...

  7. 原来这些行业都在使用单轴直线模组!

    需要用到直线模组的设备有很多,众所周知,直线模组是可以单轴使用,也可以单轴组合成多轴使用,应用领域可以说是非常广泛的!今天我们就来简单说一下单轴直线模组具体应用在哪些行业中! 1.PCB电路板切割装置 ...

  8. 直线模组常见故障的解决方法

    直线模组因其具有单体运动速度快.重复定位精度高.本体质量轻.占设备空间小.寿命长等特点,运用的范围一直在扩大,发展至今,已经被广泛应用到各种各样的设备当中. 在直线模组的使用过程中,或多或少都会出现一 ...

  9. 怎么区分直线模组中的行程和导程

    直线模组是一种直线传动装置,其传动方式主要有两种,一种是由滚珠丝杆和直线导轨组成,另一种是由同步带及同步带轮组成,直线模组是指在自动化工业领域中对能够实现直线运动的装置的说称,也称为定位模组. 直线模 ...

  10. 直线电机对比直线模组有哪些优点

    随着工业4.0时代的到来,随着生产需求不断提高,直线电机和直线模组在工业生产中得到广泛应用,也促使直线电机的技术不断发展,那么直线电机相对于直线模组的优势是什么呢? 1.高速度是直线电机驱动相对于直线 ...

最新文章

  1. 【求锤得锤的故事】Redis锁从面试连环炮聊到神仙打架。
  2. 对Android GPS获取位置信息的新研究.
  3. 最多7次比较解决5个数的排序问题的解法
  4. 工信部王卫明:我国5G研发开局良好
  5. 某互联网公司校园招聘的小组面试题
  6. HTML5怎么编辑另一个页面,html中嵌套iframe页面 如何将一个html页面中嵌入另一个html页面...
  7. 二代CMS旅游网站程序国际版开发中(支持英文、法文等),支持拓展语言包
  8. OCR数据处理(上篇)+OCR数据处理(下篇)
  9. 积极向上,努力工作,提高能力,提高战斗力,保持热情,保持创业热情。
  10. (2)基于Bootstrap的网页开发
  11. 图书销售管理系统数据库SQL应用编程 和 安全管理
  12. 分区助手是什么?(博主推荐)(图文详解)
  13. android拖拽 字体变形,字体变形的几种方法与技巧
  14. Java关于中查询数据时,报错java.lang.IllegalArgumentException: HOUR_OF_DAY: 0 -> 1的问题
  15. JAVA实现时间换算
  16. Padavan编译技巧
  17. rto净化效率计算公式_设备综合效率计算公式详解
  18. windows应用启动java -jar
  19. Unity 水体浮力的实现
  20. python简单小游戏代码教程,python小游戏程序源代码

热门文章

  1. c语言课程设计报告内容,c语言课程设计报告
  2. 输入一个数求其倒数c语言,C语言答案(1)
  3. c语言cg平台答案,【2017年整理】非常好的C语言习题集带答案.doc
  4. 《Blender权威指南》
  5. Codejock Xtreme Calendar 最新版下载试用2021版本
  6. 网页设计html5留言板代码,web网页设计期末大作业_留言板制作.doc
  7. FreeTextBox设置编辑页面
  8. 《Java和Android开发实战详解》
  9. 研究生们都在推荐哪些好用的论文在线翻译软件?
  10. DIP 电源跌落瞬时中断(Voltage dips)