基于STM32单片机的直流电机调速正反转控制仿真

仿真图:

在这里插入图片描述

芯片/模块的特点:

STM32F103简介:
高性能处理器:STM32F103系列采用ARM Cortex-M3内核,工作频率可达到72MHz,具有较高的计算能力和执行效率。

多种存储容量和类型:STM32F103系列提供了不同存储容量和类型的微控制器,包括Flash存储器和RAM存储器。Flash存储器容量范围从16KB到512KB不等,RAM存储器容量从10KB到64KB不等,可以根据应用需求选择适当的存储容量。

丰富的外设接口:STM32F103系列微控制器提供了多种外设接口,包括串行通信接口(如USART、SPI、I2C等)、通用定时器和计数器、模拟数字转换器(ADC)、PWM输出、以太网接口等,可满足各种应用的需求。

低功耗特性:STM32F103系列微控制器具有多种低功耗模式,以在不同的应用场景下降低系统功耗,并延长电池寿命。例如,它支持停机模式、待机模式和休眠模式等。

强大的软件生态系统:STM32F103系列微控制器支持意法半导体公司的STM32Cube软件开发生态系统,提供了一系列工具和软件库,简化了软件开发过程,同时还有广泛的开发社区支持。

安全性功能:STM32F103系列微控制器具有硬件加密和校验功能,可确保代码的安全性和完整性。

丰富的包装选项:STM32F103系列提供多种封装选项,包括LQFP、BGA、LFBGA等,方便了不同应用和布局要求的设计。

L9110特点:
双路驱动:L9110可以同时驱动两个直流电机,每个驱动通道最大电流可达800mA。这使得它非常适用于需要控制多个电机的应用。

低电压工作:L9110可以在较低的电源电压下工作,通常在2.5V至12V之间。这使得它适用于电池供电的低电压应用,如机器人、小型车辆等。

高效能:该芯片采用了双H桥驱动技术,具有较高的效率和较低的功耗。它可以提供高达15kHz的PWM(脉冲宽度调制)频率,以实现电机速度的精确控制。

内置保护功能:L9110具有过温保护和短路保护功能,可有效保护芯片和电机免受过载和短路等异常情况的损害。

引脚简单:L9110只需要几个引脚就可以实现电机的驱动,包括两个输入引脚控制电机的正反转,以及两个输出引脚连接电机。

主程序:

#include "gpio.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include <stdio.h>
#include "timer.h"
#include "key.h"

unsigned char pwmRigh = 30; // pwm调整
unsigned char djs = 200;

char dis0[16]; // 暂存
char dis1[16]; // 暂存

unsigned char rekey = 0; // 按键防止抖动

unsigned char contNum = 0; // 循环计数

unsigned char motorFlag = 0;
unsigned char motorDir = 1;

int main(void)
{
	delay_init();	 // 延时函数初始化
	// uart_init(9600); // 串口初始化为9600
	//	uart2_init(9600)	;
	TIM3_Int_Init(9, 7199); // 2ms
	GPIO_LED_MOTOR_Init(); // 初始化与LED连接的硬件接口
	KEY_Init();

	MOTOR_INA = 1;
	MOTOR_INB = 1;
    
    LED_START = 1;
    LED_STOP = 0;
    LED_F = 0;
    LED_R = 1;
    
	pwmRigh = 30; // pwm调整

	delay_ms(100);

	while (1)
	{
		if ((KEY_START == 0) || (KEY_STOP == 0) || (KEY_F == 0) || (KEY_R == 0) || (KEY_ADD == 0) || (KEY_SUB == 0)) // 检测到按键按下
		{
			delay_ms(10); // 小抖动
			if (rekey == 0)
			{
				if (KEY_START == 0) //启动键
				{
					LED_START = 0;
					LED_STOP = 1;
					rekey = 1;
					motorFlag = 1;
				}
				else if (KEY_STOP == 0) //停止键
				{
					LED_START = 1;
					LED_STOP = 0;
					rekey = 1;
					motorFlag = 0;
				}
				else if (KEY_F == 0) //正转键
				{
					LED_F = 0;
					LED_R = 1;
					rekey = 1;
					motorDir = 1;
					MOTOR_INA = 1;
					MOTOR_INB = 1;
				}
				else if (KEY_R == 0) //反转键
				{
					LED_F = 1;
					LED_R = 0;
					rekey = 1;
					motorDir = 0;
					MOTOR_INA = 1;
					MOTOR_INB = 1;
				}
				else if (KEY_ADD == 0) //加速键
				{
					rekey = 1;
					if (pwmRigh < 50)
						pwmRigh = pwmRigh + 5; // pwm 调速
				}
				else if (KEY_SUB == 0) //减速键
				{
					rekey = 1;
					if (pwmRigh > 30)
						pwmRigh = pwmRigh - 5; // pwm 调速
				}
				
			}
		}
		else
		{
			rekey = 0; // 防止重复检测到按键
		}
		delay_ms(100);
	}
}

void pwmCtrl(void)
{
	static unsigned char countRigh;

	if (motorFlag == 1)
	{
		countRigh++;

		if (motorDir == 0)
		{
			if (countRigh < pwmRigh) // 占空比调节
			{
				MOTOR_INA = 0;
			}
			else if (countRigh <= 50) // 关闭时间段
			{
				MOTOR_INA = 1;
				if (countRigh == 50)
					countRigh = 0;
			}
		}
		else
		{
			if (countRigh < pwmRigh) // 占空比调节
			{
				MOTOR_INB = 0;
			}
			else if (countRigh <= 50) // 关闭时间段
			{
				MOTOR_INB = 1;
				if (countRigh == 50)
					countRigh = 0;
			}
		}
	}
	else
	{
		MOTOR_INA = 1;
		MOTOR_INB = 1;
	}
}

设计文件:

链接:https://pan.baidu.com/s/1HsRzRYA5xEQ5U8Ln8p1_Aw?pwd=xpo2

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值