【毕业设计】基于STM32无刷直流电机控制器的设计仿真与实现(原理图+源码+仿真工程+详细过程设计说明书)
任务书
1.基于单片机实现无刷直流电机控制器的设计,完成系统芯片选型;
2.确定无刷直流电机控制器的总体设计方案;
3.给出系统的硬件设计,包括主控模块、位置检测模块、PWM驱动模块、换向逻辑模块、逆变模块、速度反馈模块等硬件模块的电路设计;
4.给出系统的软件设计,并绘制主要模块的流程图;
5.基于Proteus对系统进行仿真。
资料链接
原理图工程文件
原理图截图
仿真模型工程文件
仿真截图
低重复率文档(22642字)
英文文献及翻译
综上分析本设计目标如下:
能够驱动直流无刷电机的运转并有电路保护以免器件烧坏。
能够实时准确的检测到直流无刷电机转子的位置。
能够实现对电机启动和停止的控制。
能够通过滑动变阻器来实现直流无刷电机的无极调速。
电路具有电流、电压保护,以免对电路产生不良影响。
现在已经确定直流无刷无感电机的控制系统需要实现的主要功能和技术有:
能够准确实时的检测到无刷直流电机转子的位置;
用三段式技术使电机能够很好的启动;
PID调节技术;
速度环的控制;
电压保护、电流保护。
设计说明书
摘要
本文的主要工作是基于STM32设计无刷直流电机控制系统。随着科学的进步,电子技术的成熟,现在已经有了很大一部分电子产品开始实现智能化,并且已经开始广泛的应用于当前的生活中来,通过嵌入式设备来使系统达到更好的技术的控制。本文选择使用STM32主控芯片控制无刷直流电机,可以通过按键实现对无刷直流电机的速度控制,并可以将转速显示到液晶显示器。
本文首先阐述了无刷直流电机的研究背景和意义,然后对无刷直流电机实现方案进行了论证分析,并给出无刷直流电机的总体设计方案。接着详细介绍了无刷直流电机的硬件设计,对主控模块,电源模块,显示模块的电路原理图进行了绘制,重点是无刷直流电机的驱动模块和调速模块的程序设计。最后基于Proteus对系统进行仿真、调试。通过这种方式,不仅能精确验证设计后的系统是否满足技术要求,还在提高系统效率、质量的设计基础上降低了开发成本。
设计框架架构
电机调速框架思路:
设计说明书及设计文件
低重复率文档(22642字)
源码展示
/* USER CODE BEGIN Header */
/** ******************************************************************************
* @file : main.c
* @brief : Main program body
******************************************************************************
* @attention
*
* <h2><center>© Copyright (c) 2020 STMicroelectronics.
* All rights reserved.</center></h2>
*
* This software component is licensed by ST under BSD 3-Clause license,
* the "License"; You may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
* opensource.org/licenses/BSD-3-Clause
* ******************************************************************************
*/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#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