用STM32定时器中断产生PWM控制步进电机
文章目录
- 前言
- 一、硬件部分
- 1.使用的硬件
- 2.硬件连接
- 3.总硬件连接图
- 二、控制步进电机转动
- 三、电机驱动代码
- 1.GPIO.h
- 2.timer.c
- 3.main.c
- 代码文件
前言
控制步进电机可以使用PWM、定时器中断、延时,这里用的就是
定时器中断来让它转动。
一、硬件部分
1.使用的硬件
板子用的是正点原子的STM32F103 mini板,驱动器是DM420(DM420驱动器资料),用开关电源供电,电机就是普通的42步进电机,步距角为1.8°,虽然按照图片来看它是个蠕动泵。如下图
2.硬件连接
PUL+——PB0,脉冲输入
DIR+——PB1,方向使能
ENA+——PB2,脱机使能,共阴极接法的话,输入低电平,让它无效。
这里连接驱动器采用共阴极接法,如图
3.总硬件连接图
二、控制步进电机转动
想让它转,简单的说就是高电平,低电平循环输入,产生脉冲,让它转动。
其转速与产生脉冲频率有关:
arr:自动重装载寄存器的值
psc:定时器频率
α为步距角(1.8°),x为驱动器细分倍数(设置为2,也就是说转动一圈需要400个脉冲,每个脉冲转动0.9度)
脉冲频率 = Fck_int(72MHZ) / ((arr+1)*(psc+1))
转速(r/min)= 脉冲频率 * 60 / ((360/α)*x)
假如我将arr设置为100-1,psc设置为7200-1,则脉冲频率为100Hz,转速为15r/min.
三、电机驱动代码
1.GPIO.h
#ifndef __GPIO_H
#define __GPIO_H
#include "sys.h"#define LED0 PAout(8) // PA8,测试是否进入中断#define PUL PBout(0) //脉冲输出
#define DIR PBout(1) //方向使能
#define ENA PBout(2) //脱机使能void GPIO_Init(void);//端口初始化#endif
2.timer.c
#include "timer.h"
#include "led.h"void TIM3_Int_Init(u16 arr,u16 psc)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能TIM_TimeBaseStructure.TIM_Period = arr;TIM_TimeBaseStructure.TIM_Prescaler =psc;TIM_TimeBaseStructure.TIM_ClockDivision = 0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //初始化TIMx的时间基数单位TIM_ITConfig(TIM3,TIM_IT_Update ,ENABLE);NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级3级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能NVIC_Init(&NVIC_InitStructure); //初始化外设NVIC寄存器TIM_Cmd(TIM3, ENABLE); //使能TIMx外设}void TIM3_IRQHandler(void)
{if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET)//是否发生中断{ PUL = !PUL;LED0 = !LED0; }TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除TIMx的中断待处理位:TIM 中断源
}
3.main.c
#include "GPIO.h"
#include "delay.h"
#include "sys.h"
#include "timer.h"int main(void){ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2GPIO_Init(); //初始化连接的硬件接口ENA = 0; //脱机使能失效TIM3_Int_Init(99,7199);//72MHz / ((99+1)*(7199+1)) =100Hzwhile(1){; }
}
代码文件
CSDN:https://download.csdn.net/download/weixin_51649181/32713617
对于一些积分/C币不够的小伙伴对于一些积分/C币不够的小伙伴,链接就放这了:
https://pan.baidu.com/s/12mM-IK6k8j8O1BH9czQbDA
提取码:rv6t
如果你觉得好的话可以给我点个赞!
用STM32定时器中断产生PWM控制步进电机相关推荐
- STM32控制步进电机:基于定时器中断的ULN2003驱动器/步进电机驱动程序
STM32控制步进电机:基于定时器中断的ULN2003驱动器/步进电机驱动程序 一.ULN2003驱动器 1.工作原理 2.步距角以及一圈所需步数的计算 二.硬件连接 三.STM32F103定时器中断 ...
- STM32定时器中断
目录 一.关于STM32定时器中断 1.定时器分类 2.通用定时器的功能特点 3.定时器中断的触发 4.定时时钟计算方法 二.CubeMX初始化配置 1.芯片选型(我们这里运用的STM32F103C8 ...
- stm32定时器中断的配置步骤
stm32定时器中断的配置步骤 1>TIM3 时钟使能 位于低速的APB1总线上(注意:高级定时器是在高速的APB2总线上): RCC_APB1PeriphClockCmd(RCC_APB1Pe ...
- STM32L475裸机例程学习 定时器中断和PWM输出实验
定时器中断和PWM输出实验 所以阿-笔记的重要性哇!之前看过的内容在做后面的内容涉及到了发现没有笔记,看的时间太久远,竟然全部忘记了,真是个悲伤的故事:( 那就重来吧.由于这两个实验都跟TIM定时器关 ...
- 7. STM32——定时器中断(1秒闪烁灯)
STM32--定时器中断(1秒闪烁灯) 基本框架 1. 配置定时器时钟 在 stm32f10x_rcc.h 头文件中查找相关函数函数 2. 配置定时器结构体 在 stm32f10x_tim.h 头文件 ...
- 【CubeMX配置stm32定时器中断】
CubeMX配置stm32定时器中断 一.使用CubeMX对STM32进行基础的配置 1.选择需要使用的定时器 选择TIM2和TIM3示例, 注意: TIM2和其它定时器选择时钟的方法不同,TIM3等 ...
- stm32定时器中断配置及使用
stm32定时器中断配置及使用 定时器中断就是:可以周期性的执行某些功能,而不受main函数的影响. 我们以通用定时器time3为例说明 1.首先配置时钟源为内部时钟,分频和充装载值根据自己需要填入, ...
- STM32定时器中断显示时间
前言 利用STM32的定时器中断,实现时间的显示.我们知道利用定时器中断只能进行tick的计算,然而用来显示时间我们应该怎么办呢?经过项目的实际运用,我发现利用定时器中断配合串口通讯也能实现时间显示. ...
- C51使用定时器中断产生PWM方波信号
使用定时器中断产生PWM方波信号,完成50个频率为1KZ的矩形脉冲输出,P20端口接LED闪烁,用于演示. 矩形脉冲频率为1KZ,周期则为1ms, 中断为0.5ms, 所以T0: TH0=(6 ...
最新文章
- 下载 NCBI sra 文件
- 判断某值是否属于枚举类中的值_编写高质量可维护的代码之优化逻辑判断
- DCMTK:DSRNumericMeasurementValue类的测试程序
- The World is a Theatre(组合数学)
- HDU 3966 Aragorn's Story (树链点权剖分,成段修改单点查询)
- boost.asio防止恶意空连接的方法
- 鼠标移动或者鼠标点击div消失不见排查
- 关于Cortex-M3处理器内核中断异常处理机制你了解多少?
- Java : ServiceLoader详解
- 百度 UEditor--自定义上传文件路径及读取文件
- 关于遥感图像的控制点片匹配算法的一点想法(一)
- C语言—预定义宏调试__LINE__、__func__
- 2017年数学建模美赛个人国际一等奖论文
- linux 下安装安装rzsz命令
- linux查看trunk信息,linux网卡启用trunk模式操作标准.docx
- Android开发前景及现状分析
- 计算机程序设计员英语单词,计算机程序设计员个人英文简历
- 揭秘世上唯一无癌国家吃什么?原来肿瘤也有克星
- 一步搞定IP地址查询:这个在线工具帮你快速掌握设备的位置信息!
- RFID防盗安全门在图书馆的应用
热门文章
- MacBook Pro拓展坞失灵问题的解决建议
- 从2020全球前十的数字货币交易所甄别风险
- Photoshop 去除图片中文字六个方法
- wilson免费视频学习网站
- C# AutoCAD二次开发: 读取DWG文件将全部实体变为一个块。
- [附源码]计算机毕业设计springboot房产中介管理系统
- thinksnsv4.6运行php,开源微博系统ThinkSNS电脑版
- 今夕何夕 今天是2017年8月6日,农历闰六月十五。 小度独自凭栏,望着一轮圆月,发出了“今夕何夕,见此良人”的寂寞感慨。
- 利用Java爬取基金网站的基金数据,快速筛选优质热门基金
- gstreamer之G_DEFINE_TYPE