模块——步进电机驱动&&STM32代码实现控制

步进电机驱动&&STM32代码实现控制




一、驱动电路说明

1.芯片简介

步进电机驱动所用芯片为TB67S109AFNAG。

TB67S109A是一种配备PWM斩波器的两极步进电机驱动器。内置时钟解码器。本驱动器采用BICD工艺制作,额定值为50V/4.0A。

特点: ◉能控制一台双极步进电机。

◉由PWM控制的恒流驱动。

◉允许全步,半步,四分,1/8,1/16,1/32步运行。

◉低导通电阻(高+低侧 = 0.49(经典值))MOSFET输出级。

◉高效电机电流控制机构(高级动态混合衰减)

◉高电压与电流

◉错误检测(TSD/ISD)信号输出功能。

◉内置错误检测电路()热关断(TSD),过流关断(ISD),以及上电复位(POR)。

◉内置VCC调节器供内部电路使用。

◉可通过外电阻与电容自定义电路使用。

2.芯片原理图

芯片驱动原理图如图:

具体实物图:

二STM32软件控制实现

1.硬件说明

①控制主板 “司南电气控制STM32单片机开发板”,如图

②驱动板 "步进电机TB67S109AFNAG 驱动 ",如图

③42步进电机

④接线说明:

◉驱动板VCC与GND接12V或者24V电源

◉COM+ → 司南主板步进电机接口3.3v

◉ DIR- → 司南主板步进电机接口 DIR

◉CLK- → 司南主板步进电机接口 CLK

◉EN- → 司南主板步进电机接口 EN

2.代码说明

PWM配置
void TIM3_PWM_Init(u16 arr,u16 psc)
{
          
   
	GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	TIM_OCInitTypeDef  TIM_OCInitStructure;
		
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);// 
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO , ENABLE);
  //GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //TIM_CH1
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
	
	
	TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值	 计数到5000为500ms
	TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  10Khz的计数频率  
	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
 
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
	TIM_OC3Init(TIM3, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx

	TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable); 
	TIM_Cmd(TIM3, ENABLE);
	
}
主函数
#include "stm32f10x.h"
#include "led.h"
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "pwm.h"
#include "timer.h"
//说明
//连接好线后,细分数调到6400
 int main(void)
	 {
          
    
		 u8 key;
		 RS485_Init(9600);	 //串口初始化为9600
		 RS232_Init(9600);	 //串口初始化为9600
		 TIM3_PWM_Init(30,111);
		 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
		 delay_init();	     //延时函数初始化
		 LED_Init();         //输出I/O初始化函数
     LED1=0;LED2=0;LED3=0;LED4=0;LED5=0;LED6=0;LED7=0;LED8=0;	BEEP=0; 
		 while(1)
		 {
          
   
	TIM_SetCompare3(TIM3,20);
 // delay_ms(300);
		 }
	 }
}

非常感谢大家的观看,希望对大家有所帮助。小编常接外包设计定单哦!非常乐意为大家提供毕设技术指导以及产品设计等服务。

经验分享 程序员 微信小程序 职场和发展