基于STM32无刷电机BLDC速度控制器系统设计-毕设课设资料

摘要

本文设计了一种基于STM32的无刷电机(BLDC)速度控制器系统。该系统通过可调电阻和STM32的ADC功能实现转速的可调性,并通过定时器1的PWM互补输出控制电机的转动。同时,系统利用L293D驱动器和IRF540 MOS管作为驱动电路,实现电机的稳定驱动。此外,系统还采用了外部中断进行换向控制,利用定时器2的三路输入捕获进行测速,并通过LCD1602显示屏实时显示转速和目标转速。在Proteus仿真中,系统表现出良好的性能,但也存在一些延时和误差问题。

关键词:STM32;无刷电机;速度控制;PWM;ADC;外部中断

一、引言

无刷直流电机(BLDC)作为一种高效、低噪音的电机类型,在工业自动化、电动汽车等领域得到了广泛应用。然而,其速度控制一直是一个技术难题。因此,设计一种基于STM32的无刷电机速度控制器系统具有重要意义。

二、系统总体设计

本系统以STM32微控制器为核心,通过可调电阻和ADC功能实现转速的可调性,利用定时器1的PWM互补输出控制电机的转动。同时,系统通过外部中断进行换向控制,利用定时器2的三路输入捕获进行测速,并通过LCD1602显示屏实时显示转速和目标转速。

三、硬件设计

  1. STM32微控制器:作为系统的核心控制单元,负责接收输入信号、处理控制逻辑并输出控制信号。

  2. 可调电阻与ADC功能:通过可调电阻调节输入电压,利用STM32的ADC功能将其转换为数字信号,实现转速的可调性。

  3. 定时器1与PWM输出:利用定时器1产生PWM信号,通过互补输出方式控制电机的转动。

  4. 驱动电路:采用L293D驱动器和IRF540 MOS管组成驱动电路,实现电机的稳定驱动。

  5. 外部中断:通过外部中断实现电机的换向控制。

  6. 定时器2与测速:利用定时器2的三路输入捕获功能进行测速,但由于Proteus仿真中的限制,最终只使用了一路作为测速通道。

  7. LCD1602显示屏:用于实时显示转速和目标转速。

四、软件设计

软件设计主要包括STM32的程序编写和调试。程序主要包括初始化设置、ADC读取、PWM控制、外部中断处理、测速逻辑以及LCD显示更新等部分。通过合理的编程和调试,确保系统能够稳定可靠地运行。

五、系统实现与测试

在完成硬件和软件设计后,对系统进行实现与测试。首先,在Proteus仿真环境中搭建系统模型,并进行仿真测试。通过调整可调电阻的值,观察转速的变化情况;通过触发外部中断,测试换向功能;通过定时器2的测速功能,获取电机的实时转速;最后,通过LCD1602显示屏观察转速和目标转速的显示情况。仿真测试结果表明,系统能够实现可调转速、可控转动方向以及实时显示转速和目标转速的功能。然而,在仿真过程中也发现了一些问题,如LCD显示的延时和误差等。针对这些问题,提出了相应的优化措施,并在后续的研究中加以改进。

六、结论与展望

本文设计了一种基于STM32的无刷电机速度控制器系统,通过可调电阻和ADC功能实现转速的可调性,利用定时器1的PWM互补输出控制电机的转动。同时,系统采用外部中断进行换向控制,利用定时器2进行测速,并通过LCD1602显示屏实时显示转速和目标转速。在Proteus仿真中,系统表现出良好的性能,但也存在一些延时和误差问题。未来可以进一步优化系统设计和算法,提高系统的稳定性和精度,并探索更多应用场景。

下面是原理图和程序

#include "main.h"
#include "adc.h"
#include "tim.h"
#include "gpio.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "includes.h"
#include "lcd.h"
/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
#define HALL_GPIO GPIOA
//START 任务
//设置任务优先级
#define START_TASK_PRIO      			10 //开始任务的优先级设置为最低
//设置任务堆栈大小
#define START_STK_SIZE  	  			64
//任务堆栈	
OS_STK START_TASK_STK[START_STK_SIZE];
//任务函数
void start_task(void *pdata);	
 			   
//LED0任务
//设置任务优先级
#define LED0_TASK_PRIO       			2 
//设置任务堆栈大小
#define LED0_STK_SIZE  		    		64
//任务堆栈	
OS_STK LED0_TASK_STK[LED0_STK_SIZE];
//任务函数
void led0_task(void *pdata);

//Speed_ADC 任务
//设置任务优先级
#define SPEED_ADC_TASK_PRIO       			1
//设置任务堆栈大小
#define SPEED_ADC_STK_SIZE  		    		64
//任务堆栈	
OS_STK SPEED_ADC_TASK_STK[SPEED_ADC_STK_SIZE];
//任务函数
void speed_adc_task(void *pdata);

【资源下载】下载地址:点击下载(1605) https://docs.qq.com/doc/p/ffc421513a628b30450ae742547c0b850456d7c8

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值