900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 基于STM32单片机的直流电机控制系统加减速正反转设计方案原理图程序

基于STM32单片机的直流电机控制系统加减速正反转设计方案原理图程序

时间:2024-07-30 22:10:25

相关推荐

基于STM32单片机的直流电机控制系统加减速正反转设计方案原理图程序

硬件电路的设计

3.1系统的功能分析及体系结构设计

3.1.1系统功能分析

本设计由STM32F103C8T6单片机核心板电路+L298N电机驱动电路+按键电路+电源电路组成。

1、通过按键可以控制电机,正转、反转、加速、减速、停止。档位分8档。

2、按键顺序正转、反转、加速、减速、停止。

3.1.2系统总体结构

本系统具体框图如下图所示:

原理图:

STM32单片机核心电路设计

STM32系列处理器是意法半导体ST公司生产的一种基于ARM 7架构的32位、支持实时仿真和跟踪的微控制器。选择此款控制芯片是因为本系统设计并非追求成本的最低或更小的功耗,而是在实现本设计功能的前提下能够提供更丰富的接口和功能以便于设计实验系统各实验项目所需的外围扩展电路。此款控制芯片在完成单片机课程的学习后上手较为容易,在医疗器械中应用广泛,具有很好的学习、实验研究价值。

一、STM32的主要优点:

(1)使用ARM最新的、先进架构的Cortex-M3内核

(2) 优异的实时性能

(3) 杰出的功耗控制

(4) 出众及创新的外设

(5) 最大程度的集成整合

(6) 易于开发,可使产品快速将进入市场

二、STM32——最佳的平台选项

对于使用同一平台进行多个项目开发而言,STM32是最

佳的选择:

(1) 从仅需少量的存储空间和管脚应用到需要更多的存储空间和管脚的应用

(2) 从苛求性能的应用到电池供电的应用

(3) 从简单而成本敏感的应用到高端应用

(4) 全系列脚对脚、外设及软件的高度兼容性,给您带来全方位的灵活性。您可以在不必修改您原始框架及软件的条件下,将您的应用升级到需要更多存储空间或精简到使用更少存储空间/ 或改用不同的封装的规格。

L298N电机驱动模块电路设计

本L298N驱动模块,采用ST公司的L298N芯片,L298N 是一种双H桥电机驱动芯片,其中每个H桥可以提供2A的电流,功率部分的供电电压范围是2.5-48v,逻辑部分5v供电,接受5vTTL电平。该模块可以直接驱动两路3-30V直流电机,并提供了5V输出接口,可以给5V单片机电路系统供电,可以方便的控制直流电机速度和方向。

一、产品参数:

(1)驱动芯片:L298N双H桥驱动芯片

(2)具有二极管续流保护

(3)直流电机转速可以通过PWM方式来实现控制

(4)驱动部分端子供电范围VMS:+5V~+35V

(5)驱动部分峰值电流Io:2A/桥

(6)逻辑部分端子供电范围Vss:4.5-5.5V

(7)逻辑部分工作电流范围:0~36mA

(8)控制信号输入电压范围:高电平4.5-5.5V 低电平0V

(9)最大功耗:20W

(10)存储温度:-25℃~+130℃

二、电机驱动模块使用注意事项

(1)第一次上电时观察绿色电源指示灯L5是否点亮,如果不亮,请立即断电检查电源是否接反。

(2)驱动器为功率设备,请保持工作环境的散热通风;在连上电机后使其连续工作一段时间后观察电机和驱动芯片的温升正常后方可进行后续使用。

三、电机驱动模块接口说明:

(1)电机驱动电源输入接口:VMS接正极,GND接负极

(2)驱动器和控制端口的接口:控制直流电机时IN1、IN2和ENA为一组,它们控制电机A,接在A+和A-,如果电机A不控制,则ENA悬空即可;如果电机A控制,则ENA接一路PWM输出。IN3、IN4和ENB为一组,他们控制电机B,接在B+和B-,如果电机B不控制,则ENB悬空即可;如果电机B控制,则ENB接一路PWM输出。

四、直流电机控制信号真值表

以电机A为例,高电平H:低电平:L

输入信号功能:

IN1=H;IN2=L:电机A正转

IN1=L;IN2=H:电机A反转

ENA=H;IN1=IN2:电机A紧急停车

ENA=L;IN1=X;IN2=X:任意电平电机A自由停车

按键电路(含上拉电阻)设计

轻触按键是按键产品下属的一款分类产品,它其实相当于是一种电子开关,只要轻轻的按下按键就可以是开关接通,松开时是开关就断开连接,实现原理主要是通过轻触按键内部的金属弹片受力弹动来实现接通和断开的。

在本系统中,按键作为系统的输入,起到了人机交互的枢纽作用。按键的单片机控制引脚默认为高电平,当按键按下后,单片机的相关引脚则变成低电平。进而实现对系统的手动输入。其电路原理图如下图所示。电路中电阻作用为上拉电阻,保证按键信号的稳定输出。

系统软件设计

#include "led.h"#include "delay.h"#include "sys.h"#include "usart.h"#include <stdio.h>#include "timer.h"#include "key.h"unsigned char pwmRigh=10;//pwm调整unsigned char pwmLeft=10;unsigned char djs = 200;char dis0[16]; //暂存char dis1[16]; //暂存unsigned char rekey =0;//按键防止抖动unsigned char contNum =0;//循环计数int main(void){ delay_init();//延时函数初始化 uart_init(9600); //串口初始化为115200//uart2_init(9600);TIM3_Int_Init(9,7199);//2ms LED_Init(); //初始化与LED连接的硬件接口KEY_Init();IN1=1;//方向控制IN2=0;pwmRigh=4;//pwm调整delay_ms(100);while(1){if((key1==0)||(key2==0)||(key3==0)||(key4==0)||(key5==0)) //检测到按键按下{delay_ms(10); //小抖动if(rekey==0){if(key1==0) //检测是否按下{rekey=1;IN1=1;//方向控制IN2=0;}else if(key2==0)//设置值键{rekey=1;IN1=0;//方向控制IN2=1;}else if(key3==0)//设置值键{rekey=1;if(pwmRigh<=16)pwmRigh = pwmRigh+2;//pwm 调速}else if(key4==0)//设置值键{rekey=1;if(pwmRigh>=2)pwmRigh = pwmRigh-2;//pwm 调速}else if(key5==0)//设置值键{rekey=1;IN1=0;//方向控制IN2=0;}}}else{rekey=0; //防止重复检测到按键}delay_ms(100);}}void pwmCtrl(void){static unsigned char countRigh;countRigh++;if(countRigh<pwmRigh) //占空比调节{ENA=1; //打开}else if(countRigh<=20)//关闭时间段{ENA=0;//关闭if(countRigh == 20)countRigh= 0;}}

.

链接:/s/1XJ2Yxn9XjLWPACMHF3FRgw

提取码:ctlg

.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。