基于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;
		}			 	 
	}											    
}	

具体实现截图


设计获取

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

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

毕业设计精品实战案例

收藏关注不迷路!!

🌟文末获取设计🌟

相关推荐
hairenjing11233 小时前
使用 Mac 数据恢复从 iPhoto 图库中恢复照片
windows·stm32·嵌入式硬件·macos·word
模拟IC攻城狮5 小时前
华为海思招聘-芯片与器件设计工程师-模拟芯片方向- 机试题-真题套题题目——共8套(每套四十题)
嵌入式硬件·华为·硬件架构·芯片
IT B业生5 小时前
51单片机教程(六)- LED流水灯
单片机·嵌入式硬件·51单片机
一枝小雨5 小时前
51单片机学习心得2(基于STC89C52):串口通信(UART)
单片机·嵌入式硬件·51单片机
IT B业生6 小时前
51单片机教程(一)- 开发环境搭建
单片机·嵌入式硬件·51单片机
u0101526587 小时前
STM32F103C8T6学习笔记2--LED流水灯与蜂鸣器
笔记·stm32·学习
好想有猫猫8 小时前
【51单片机】串口通信原理 + 使用
c语言·单片机·嵌入式硬件·51单片机·1024程序员节
云卓科技9 小时前
无人车之路径规划篇
人工智能·嵌入式硬件·算法·自动驾驶
齐 飞10 小时前
MongoDB笔记02-MongoDB基本常用命令
前端·数据库·笔记·后端·mongodb
stm 学习ing10 小时前
C语言 循环高级
c语言·开发语言·单片机·嵌入式硬件·算法·嵌入式实时数据库