STM32单片机驱动步进电机—简单篇

STM32单片机驱动步进电机(一)

驱动电机运动
软件:Keil5
设备:步进电机(17HS4401)、驱动器、单片机(STM32F103)

接线方式:

  1. 电机与驱动器:黑A+,绿A-,红B+,蓝B-
  2. 驱动器与单片机:MF-PC8,DR-PC9,PU-PB5,COM-3.3V

main.c:(注解部分为此次用不上的程序)

1#include "led.h" 2#include "delay.h" 3#include "key.h" 4#include "sys.h" 5#include "usart.h" 6#include "timer.h" 7#include "foot_definition.h" 8 9int main(void) 10{ 11 TIM3_PWM_Init(99,99); 12 PC89_Init(); 13 //uart1_init(115200);//PA9 PA10 14 //uart2_init(115200);//PA2 PA3 15 //uart3_init(115200);//PB10 PB11 16 delay_init(); 17 //KEY_Init(); 18 LED_Init(); 19 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 20 21 while (1) 22 { 23 GPIO_SetBits(GPIOC,GPIO_Pin_9); 24 GPIO_SetBits(GPIOC,GPIO_Pin_8); 25 TIM_Cmd(TIM3, ENABLE); 26 LED1=!LED1; 27 } 28}

time.c:

1#include "timer.h" 2#include "led.h" 3#include "usart.h" 4 5void TIM3_PWM_Init(u16 arr,u16 psc) 6{ 7 GPIO_InitTypeDef GPIO_InitStructure; 8 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; 9 TIM_OCInitTypeDef TIM_OCInitStructure; 10 11 12 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); 13 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); 14 15 GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); 16 17 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; 18 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 19 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 20 GPIO_Init(GPIOB, &GPIO_InitStructure); 21 22 TIM_TimeBaseStructure.TIM_Period = arr; 23 TIM_TimeBaseStructure.TIM_Prescaler =psc; 24 TIM_TimeBaseStructure.TIM_ClockDivision = 0; 25 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 26 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); 27 28 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; 29 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 30 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 31 TIM_OCInitStructure.TIM_Pulse=arr; 32 TIM_OC2Init(TIM3, &TIM_OCInitStructure); 33 34 TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); 35 36 TIM_Cmd(TIM3, DISABLE); 37}

time.h:

1#ifndef __TIMER_H 2#define __TIMER_H 3#include "sys.h" 4 5void TIM3_PWM_Init(u16 arr,u16 psc);

foot_definition.c:(名字随意取得,用以存放调用串口的程序)

1#include "foot_definition.h" 2#include "stm32f10x_it.h" 3#include "delay.h" 4 5void PC89_Init(void) // 6{ 7 8 GPIO_InitTypeDef GPIO_InitStructure; 9 10 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); 11 12 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9; 13 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 14 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 15 16 GPIO_Init(GPIOC, &GPIO_InitStructure); 17 GPIO_ResetBits(GPIOC,GPIO_Pin_8); //MF 18 GPIO_ResetBits(GPIOC,GPIO_Pin_9); //DIR 19}

foot_definition.h:

1#ifndef _FOOT_DEFINITION_H 2#define _FOOT_DEFINITION_H 3 4void PC89_Init(void);

可以通过修改 TIM3_PWM_Init(99,99) 括号中的两个参数来改变PWM脉冲发送的频率,以达到控制电机转速的目的。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )