stm32定时器TIM输出PWM驱动电机调速

stm32f103c8t6

简介

AIN1(AO1) 0 AIN2(AO2) 1 反转

AIN1(AO1) 1 AIN2(AO2) 0 正转

由图可见我AIN1和AO2接了,所以原理正好相反

配置cubemx

配置为GPIO_OUT

代码

新建motor.c

#include "motor.h"
#include "main.h"
extern TIM_HandleTypeDef htim1;


//取绝对值
int abs(int p)
{
	if(p>0)
		return p;
	else
		return -p;
}

//电机的转动包括速度和方向

//方向
//输入左/右电机和方向

void motor_dir(int motor,int dir)
{
	if(motor==left)
	{
		//正转
		if(dir==forward)
		{
			//AIN1  0    AIN2   1
			HAL_GPIO_WritePin(AIN1_GPIO_Port,AIN1_Pin,GPIO_PIN_RESET);//0
			HAL_GPIO_WritePin(AIN2_GPIO_Port,AIN2_Pin,GPIO_PIN_SET);//1
		}
		//反转
		else
			{
			//AIN1  1    AIN2   0
			HAL_GPIO_WritePin(AIN1_GPIO_Port,AIN1_Pin,GPIO_PIN_SET);//1
			HAL_GPIO_WritePin(AIN2_GPIO_Port,AIN2_Pin,GPIO_PIN_RESET);//0
		}
	}
	//右电机没接线,就注释了
	/*
	else
	{
		//正转
		if(dir==forward)
		{
			//AIN1  1    AIN2   0
			HAL_GPIO_WritePin(BIN1_GPIO_Port,BIN1_Pin,GPIO_PIN_SET);//1
			HAL_GPIO_WritePin(BIN2_GPIO_Port,BIN2_Pin,GPIO_PIN_RESET);//0
		}
		//反转
		else
			{
			//AIN1  0    AIN2   1
			HAL_GPIO_WritePin(BIN1_GPIO_Port,BIN1_Pin,GPIO_PIN_SET);//0
			HAL_GPIO_WritePin(BIN2_GPIO_Port,BIN2_Pin,GPIO_PIN_RESET);//1
		}
	}
	*/
}

//速度
//输入左/右电机和速度

void motor_speed(int motor,int pwm)
{
	if(motor==left)
	{
		__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_4,pwm);
	}
	
	/*
	else
	{
		__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_4,abs(pwm));
	}
	*/
}

//输入电机,方向,速度
void run(int motor ,int dir ,int pwm)
{
	motor_dir(motor,dir);
	motor_speed(motor,pwm);
}

motor.h

#ifndef __MOTOR_H__
#define __MOTOR_H__

#include "stm32f1xx_hal.h"

typedef enum{
	left=0,
	right=1
}motor;

typedef enum{
	forward=0,
	backward=1
}dir;
void motor_dir(int motor,int dir);
void motor_speed(int motor,int pwm);
void run(int motor ,int dir ,int pwm);
#endif

main.c

HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_4);
  run(left ,forward,100);
  while (1)
{}

结果

因为crr最大为100% *(arr+1)=1*99+1=100,所以输入的速度最好在这个范围之内

注意

有个至今未解决的问题,stm32和其他部件的灯正常亮,但是电机就是没反应,而且我有两次尝试的时候,一次芯片特别特别烫,根本不是正常的温度,还有一次板子直接冒烟烧了,怀疑是以下原因:

1.下载器的问题

换了一个下载器,然并卵

2.不能边开着12V的外接电压,边下载程序

感觉极有可能是这个,最好下载程序的时候把其他部分,除了下载器之外的输入全都关了

3.外接的12V电压会突变??

因为第一次测tb6612模块引脚的电压的时候,发现应该是12V以内的地方,电压为16.8V,应该是5V的地方为8V,但是就只有一次,不排除是没接稳,

因为最近有很多结课作业和考试,暂时没法投入到这个问题中,只能换个板子走一步看一步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值