基于STM32无刷直流电机调速蓝牙APP无线监测控制系统

文章目录


前言

💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗
👇🏻 精彩专栏 推荐订阅👇🏻
单片机设计精品实战案例
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人

资料获取

文章底部名片,详细资料联系我。

设计介绍

由于整个程序比较复杂,且计算量较大,用到了较多的浮点数计算,所以程序的编写采用了C语言。

对于大多数单片机,使用C语言这样的高级语言与使用汇编语言相比具有如下优点:

(1)不需要了解处理器的指令集,也不必了解存储器结构。

(2)寄存器分配和寻址方式由编译器进行管理,编程时不需要考虑存储器的(3)地址和数据类型等细节。

(4)指定操作的变量选择组合提高了程序的可读性。

(5)可使用与人的思维更相近的关键字和操作函数。

(6)与使用汇编语言相比,程序的开发和调试时间大大缩短。

(7)C语言的库文件提供了许多标准的例程。

(8)通过C语言可实现模块化编程技术,从而可将已编制好的程序加到 新程序中。

(9)C语言可移植性好且非常普及,C语言编译器几乎适用于所有的目标系统,己完成的项目可以很容易的转换到其它的处理器或环境中与汇编语言相比,C语言在功能上、结构性、可读性、可移植性、可维护性上有明显的优势,易学易用。

功能介绍

STM32单片机无刷直流电机调速蓝牙APP控制118

本系统由STM32F103C8T6单片机核心板、按键电路、蓝牙模块、

电调模块及电机部分组成。

通过按键可以驱动无刷直流电机停止、加速、减速;中间按键为加速按键,

上电后按下加速按键即可运行。运行中按下停止键直接停止。

通过蓝牙可以就控制直流无刷电机的运行情况,在APP界面首先"使能控制",

可以对电机加速、减速控制,也可以拖动滚条直接控制;也可以停止电机运行。

3、电机转速是缓慢变化的,是为了防止转速变化过快导致电机剧烈抖动可能带来的危险和电机自身的损伤。

注意:在APP界面只有"使能控制"后才可以控制电机运行状况,防止误操作。

设计程序

#include "math.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include <stdio.h>
#include "timer.h"
#include "key.h"
#include "pwm.h"
#include "serial_msg.h"

#define speed_perset		80

char dis_temp[18]; //显示暂存数组
u16 PPM_now=720;
u16 PPM_set=720;
//减速
void Speed_Dec(u8 ppm){
	PPM_set -= ppm;
	if(PPM_set<830){//电机内部有阻力,转速小于一定值是转不起来的
		PPM_set = 720;//小于830则直接等于720(停止)
	}
	else if(PPM_set>1440){//1440为全速运行
		PPM_set=1440;
	}
}
//加速
void Speed_Inc(u8 ppm){
	PPM_set += ppm;
	if(PPM_set<830){//电机内部有阻力,转速小于一定值是转不起来的
		PPM_set=830;//小于830则直接等于830(启动)
	}
	else if(PPM_set>1440){//1440为全速运行
		PPM_set=1440;
	}
}

/**********************************
串口通信的数据格式使用自定义的协议
具体协议内容请参考serial_msg.h
**********************************/

unsigned char i;
int main(void)
 { 
	u8 index_msg_process=0;
	NVIC_Configuration();	 
	delay_init();	    	 //延时函数初始化	  
	USARTx_Init(USART1,9600);	 	//串口初始化为9600
	//	USARTx_Init(USART2,9600);	 	//串口初始化为9600
	TIM3_Int_Init(99,7199);//10ms 
	TIM2_PWM_Init(14399,100);//100分频。PWM频率=72000000/(14399+1)/100=50Hz		 
	TIM_SetCompare1(TIM2,PPM_now);
	KEY_Init();
	
	 while(1)
	{
		process_msg_uart();//处理串口接收到的数据
		if(serialMsg[index_msg_process].enable == TRUE){   //如果接收到了一个完整的数据
			serialMsg_send.length = 0;		
			switch(serialMsg[index_msg_process].cmd){//根据不同的数据指令进行不同的处理
				case CMD_APP_SET_SPEED: 	//设置转速
					PPM_set = serialMsg[index_msg_process].payload[0]*256+serialMsg[index_msg_process].payload[1];
					if(PPM_set>1440){
						PPM_set = PPM_now;
					}
					else if(PPM_set<830){//电机内部有阻力,转速小于一定值是转不起来的
						PPM_set = 720;//小于830则直接等于720(停止)
					}
					break;
				case CMD_APP_SPEED_DEC: //减速	
					Speed_Dec(10);
					break;
				case CMD_APP_SPEED_INC: //加速
					Speed_Inc(10);
					break;
				case CMD_APP_SET_STOP: //停止
					PPM_set = 720;
					break;
					default:break;
			}
				
			//回复信息					
			serialMsg_send.cmd = CMD_RESPONSE | serialMsg[index_msg_process].cmd;	
			serialMsg_send.checkSum = CalculateCheckSum(serialMsg_send);
			SendMsgObj(USART1,serialMsg_send);	
			//指向下一条信息
			serialMsg[index_msg_process].enable = FALSE;
			index_msg_process++;//**All notes can be deleted and modified**//
		}
		KeyScan();
		if(KeyIsPress(key_dec)){//减速
			Speed_Dec(10);
		}		
		if(KeyIsPress(key_inc)){//加速
			Speed_Inc(10);
		}		
		if(KeyIsPress(key_stop)){//停止
			PPM_set = 720;
		}			 	 
	}											    
}	

具体实现截图


设计获取

文章下方名片联系我即可~

精彩专栏推荐订阅:在下方专栏👇🏻

毕业设计精品实战案例

收藏关注不迷路!!

🌟文末获取设计🌟

相关推荐
安科瑞刘鸿鹏21 分钟前
分布式光伏发电系统如何确保电能质量达到并网要求?
服务器·网络·分布式·嵌入式硬件·能源
HeiLongMada2 小时前
从边缘设备到云端平台,合宙DTU&RTU打造无缝物联网解决方案
嵌入式硬件·物联网·硬件工程·pcb工艺
OH五星上将4 小时前
OpenHarmony(鸿蒙南向开发)——标准系统方案之瑞芯微RK3568移植案例(下)
linux·驱动开发·嵌入式硬件·harmonyos·openharmony·鸿蒙开发·系统移植
好家伙VCC7 小时前
STM32与51单片机的区别:是否应该直接学习STM32?
stm32·学习·51单片机
szpc16217 小时前
28V_1MHZ电子烟,无线鼠标,医疗器械等专用恒频升压转换器超小体积封装
单片机·嵌入式硬件·计算机外设
luckyluckypolar9 小时前
STM32——SPI
stm32·单片机·嵌入式硬件·物联网
极客小张10 小时前
基于STM32MP157与OpenCV的嵌入式Linux人脸识别系统开发设计流程
linux·stm32·单片机·opencv·物联网
OH五星上将11 小时前
OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【扩展组件】上
linux·嵌入式硬件·harmonyos·openharmony·鸿蒙开发·liteos-a·鸿蒙内核
浅陌pa11 小时前
24:RTC实时时钟
c语言·stm32·单片机·嵌入式硬件