电机相关知识

一,A4950电机驱动模块

1,看A4950芯片手册

2,看模块原理图

我没有,谁有可以给我

3,接线图

水平有限:不知道怎么讲

二,软件驱动电机

1,STM32CubeMX配置

VBAT_IN:12V电源正极         AIN1与BIN1:控制正反转         AIN2与BIN2:PWM控制速度

VCC:5V电源正极                 BO1,BO2和AO1,AO2:电机的电源线                                编码器其他的线还用不到

配置后可以实现转动        通过2个函数:

	__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_4, 10);
	HAL_GPIO_WritePin(BIN1_GPIO_Port,BIN1_Pin,GPIO_PIN_SET);
2,电机运动模块
#include "motor.h"
#include "tim.h"

//正值向前走
void Motor_Set(int Motor1,int Motor2)
{
	Motor1 = -Motor1;
	Motor2 = -Motor2;
	//1.先根据正负设置方向GPIO 高低电平
	if(Motor1 <0) BIN1_SET;
	else  BIN1_RESET;
	
	if(Motor2 <0) AIN1_SET;
	else AIN1_RESET;
	
	//2.然后设置占空比  
	if(Motor1 <0)
	{
		if(Motor1 <-99) Motor1 =-99;
		__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, (100+Motor1));
	}
	else 
	{
		if(Motor1 >99) Motor1 = 99;
		__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1,Motor1);
	}

	if(Motor2<0)
	{
		if(Motor2 <-99) Motor2=-99;
		__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_4, (100+Motor2));
	}
	else
	{
		if(Motor2 >99) Motor2 =99;
		__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_4, Motor2);
	}


}


#ifndef  MOTOR_H__
#define  MOTOR_H__

#include  "main.h"



#define  AIN1_SET    HAL_GPIO_WritePin(AIN1_GPIO_Port,AIN1_Pin,GPIO_PIN_SET)
#define  AIN1_RESET  HAL_GPIO_WritePin(AIN1_GPIO_Port,AIN1_Pin,GPIO_PIN_RESET)

#define  BIN1_SET    HAL_GPIO_WritePin(BIN1_GPIO_Port,BIN1_Pin,GPIO_PIN_SET)
#define  BIN1_RESET  HAL_GPIO_WritePin(BIN1_GPIO_Port,BIN1_Pin,GPIO_PIN_RESET)


void Motor_Set(int Motor1,int Motor2);
#endif

三,编码器电机

①,编码器测速原理

1,普遍编码器原理

Encoder Interface 编码器接口

编码器接口可接收增量(正交)编码器的信号,根据编码器旋转产生的正交信号脉冲,自动控制CNT自增或自减,从而指示编码器的位置、旋转方向和旋转速度

每个高级定时器和通用定时器都拥有1个编码器接口

两个输入引脚借用了输入捕获的通道1和通道2

 具体的计数方式略

2,具体编码器测速

具体哪一个引脚可以配置看:STM32中文参考手册-第119页 的 TIMx的复用功能重映像

可以得出转速公式(每10ms执行一次)

MotorSpeed = (float)EncodeCount*100/9.6/11/4;

单位(圈/秒)        EncodeCount是编码器的计数

3,具体编码器测速的STM32CubeMX配置

具体步骤        略

设置TIMx为编码器模式,设置最大值为655535 ,用两路TIM1和TIM2计数(就是4倍的)

滤波器为6,打开中断,端口输入设置为上拉      

②,实现中断定时测量速度

将以下函数放入中断回调函数中(将这些函数设定为没10ms执行一次)

Encode2Count = (short)__HAL_TIM_GET_COUNTER(&htim2);    //记录计数器的值
 __HAL_TIM_SET_COUNTER(&htim4,0);                       //清空计数器CNT的值
Motor1Speed = (float)Encode1Count*100/9.6/11/4;         //计算出速度

其他略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值