毕业设计_单片机实战入门1——电机驱动简介及常用操作

 系列文章:

1,单片机实战入门1--电机驱动简介及常用操作(本文)

2,......

3,......

 

 一,毕设需求

作为电子信息相关的专业呢,大家想必都很苦恼,对于毕设做什么。

电机呢作为工作也好,毕设也好,项目也好,都是非常使用的东西和内容

二、电机驱动

1、电机驱动简介

直流电机大概分为以下,有刷和无刷,同时又分有没有减速。 

 

        有刷和无刷的字面意思是有无碳刷;有刷电机电机工作时需要线 圈和换向器旋转,磁钢和碳刷不转,线圈电流方向的交替变化是随电机转动的换相器和电刷来完 成的。无刷直流电动机是采用半导体开关器件来实现电子换向的,使用电子开关器件代替传统的 接触式换向器和电刷。 

         普通的直流电机当空载时,电机的转速由电压决定 ; 直流减速电机的转速由齿轮组和电压决定;齿轮组的作用是,提供较低的转速,较大的力矩; 同时不同的减速比会提供不同的转速和力矩。这样就大大提高了减速电机的使用率。喜欢车的小伙伴应该有所了解。

         ​​​​

每一种电机需要各自特定的驱动电路(桥式电路),也就是驱动器 

像我们常用的直流电机驱动 ,TB6612,L298N,私服有特定的驱动,步进电机也是。

 

 电机驱动有很多种模块

 

2、常用电机操作

常用的电机就说普通的直流电机,舵机作为转向

 1、舵机

舵机操作比较简单,在初始化相关引脚和定时器之后,直接调用相关API即可

//舵机角度控制
void SERVO_Angle_Control(unsigned int Compare1)
{
    TIM_SetCompare1(TIM4,Compare1);//设置通道1为可变的pwm
}




void SERVO_Init(void)
{
    GPIO_InitTypeDef  GPIO_InitStruct;
    TIM_TimeBaseInitTypeDef TIM_TimeStructure;
    TIM_OCInitTypeDef   TIM_OCInitStructure;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); 
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

    GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;               //配置为复用推挽输出
    GPIO_InitStruct.GPIO_Pin=GPIO_Pin_6;
    GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOB,&GPIO_InitStruct); 

    TIM_TimeStructure.TIM_Period=1000;                        //1000 自动重装载寄存器的值,周期为50 000Hz/1000=50Hz,即输出PWM波形的频率为20ms。
    TIM_TimeStructure.TIM_Prescaler=1440-1;;                  // 1400 时钟预分频系数为3600,72 000 000Hz/1400=50000Hz =50KHZ。  
    TIM_TimeStructure.TIM_ClockDivision=TIM_CKD_DIV1;
    TIM_TimeStructure.TIM_CounterMode=TIM_CounterMode_Up;
    TIM_TimeStructure.TIM_RepetitionCounter=0;
    TIM_TimeBaseInit(TIM4,&TIM_TimeStructure);
    TIM_ARRPreloadConfig(TIM4,ENABLE);  
    
    
    TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
    TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
    TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
		
    TIM_OCInitStructure.TIM_Pulse=0;                    //占空比大小
    TIM_OC1Init(TIM4,&TIM_OCInitStructure);
    TIM_OC1PreloadConfig(TIM4,TIM_OCPreload_Enable); 
		
    TIM_Cmd(TIM4,ENABLE);
    TIM_CtrlPWMOutputs(TIM4,ENABLE);    
}
2,普通直流电机

 需要定时器初始化四个通道,一个轮子两个通道,一个作为0,另一个设置占空比


static void GENERAL_TIM_GPIO_Config(void) 
{
	 GPIO_InitTypeDef              GPIO_InitStructure;
	// 输出比较通道1 和2 GPIO 初始化
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6 |GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);	           //Prescaler= (uint16_t)(72M/240000000)-1;
	//通道3和4
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0 |GPIO_Pin_1;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);	           //Prescaler= (uint16_t)(72M/240000000)-1;	
	
}



/* ----------------   PWM信号 周期和占空比的计算--------------- */
// ARR :自动重装载寄存器的值
// CLK_cnt:计数器的时钟,等于 Fck_int / (psc+1) = 72M/(psc+1)
// PWM 信号的周期 T = ARR * (1/CLK_cnt) = ARR*(PSC+1) / 72M
// 占空比P=CCR/(ARR+1)

 void GENERAL_TIM_Mode_Config(void)
{
  TIM_TimeBaseInitTypeDef       TIM_TimeBaseStructure;
	TIM_OCInitTypeDef             TIM_OCInitStructure;
	
	
	GENERAL_TIM_APBxClock_FUN(RCC_APB1Periph_TIM3 | RCC_APB2Periph_AFIO,ENABLE);	// 配置周期,这里配置为100K
	TIM_TimeBaseStructure.TIM_Period=99;		                        // 自动重装载寄存器的值,累计TIM_Period+1个频率后产生一个更新或者中断
	TIM_TimeBaseStructure.TIM_Prescaler= 719;		                    // 驱动CNT计数器的时钟 = Fck_int/(psc+1)
	TIM_TimeBaseStructure.TIM_ClockDivision=0;			                // 时钟分频因子 ,配置死区时间时需要用到
	TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;			  // 计数器计数模式,设置为向上计数
	TIM_TimeBaseStructure.TIM_RepetitionCounter=0;		              // 重复计数器的值,没用到不用管
	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);	                // 初始化定时器
	
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;	               // 配置为PWM模式1
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;	   // 输出使能
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;	       // 输出通道电平极性配置	
	//通道1
	TIM_OCInitStructure.TIM_Pulse = 0;
	TIM_OC1Init(TIM3, &TIM_OCInitStructure);
	TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
	//通道2
	TIM_OCInitStructure.TIM_Pulse = 0;
	TIM_OC2Init(TIM3, &TIM_OCInitStructure);
	TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
	//通道3
	TIM_OCInitStructure.TIM_Pulse = 0;
	TIM_OC3Init(TIM3, &TIM_OCInitStructure);
	TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
	//通道4
	TIM_OCInitStructure.TIM_Pulse = 0;
	TIM_OC4Init(TIM3, &TIM_OCInitStructure);
	TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);	
	
	TIM_Cmd(GENERAL_TIM, ENABLE);	

}

如图就说一个case中有两个设置占空比的就是设置电机的,还要看通道的个数

 输入定时器使能的两队通道,分别连接到黄色两个,输出A,B分别接到小车的电机。

        一般连接方法,121V给这块板子供电,这个板子的5V分出去给开发板供电,记得共地,这个板子和开发板的地线要连接起来,不然无法形成回路,动不了

 

 调节占空比控制速度,调整接线方向,控制郑凡界,同时,两个占空比也可以反过来,倒转。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值