当前位置: 首页 > news >正文

一个工科生的电机控制实验笔记

基于STM32的直流电机加减速正反转控制串口输出控制系统(P 1100009-基于STM32的直流电机加减速正反转控制串口输出控制系统(PCB 原理图 报告 源代码 proteus lcd1602) 功能描述:基于STM32平台 1、实现了电机控制正转、反转的功能 2、实现了电机控制加速、减速的功能 3、实现了串口输出控制信息的功能 4、串口可以模拟WIFI 蓝牙 RS232 等带有串口的功能。 资料包含: 1、源代码工程文件 2、仿真工程文件 3、论文报告1W字以上 4、原理图工程文件 5、PCB工程文件

最近在实验室折腾STM32控制直流电机,从满地杜邦线到能精准控制转速转向,踩坑无数。今天给大伙看看我的"战损版"电机控制系统,支持正反转、加减速、串口调试,连1602液晶都安排上了。

### 硬件搭积木

主控用了STM32F103C8T6最小系统板,这货72MHz主频够用还便宜。电机驱动选了L298N模块,能扛得住24V/2A的暴力输出。LCD1602接成4线模式省IO口,串口转USB模块用来和电脑唠嗑。

关键硬件配置:

`c

// GPIO初始化片段

void MotorGPIOInit(void) {

GPIOInitTypeDef GPIOInitStructure;

RCCAPB2PeriphClockCmd(RCCAPB2Periph_GPIOA, ENABLE);

// 方向控制引脚

GPIOInitStructure.GPIOPin = GPIOPin4 | GPIOPin5;

GPIOInitStructure.GPIOMode = GPIOModeOut_PP;

GPIOInitStructure.GPIOSpeed = GPIOSpeed50MHz;

GPIOInit(GPIOA, &GPIOInitStructure);

// PWM引脚配置

GPIOInitStructure.GPIOPin = GPIOPin0; // PA0-TIM2_CH1

GPIOInitStructure.GPIOMode = GPIOModeAF_PP;

GPIOInit(GPIOA, &GPIOInitStructure);

}

`

这段代码配置了方向控制引脚和PWM输出引脚。方向控制用普通推挽输出,PWM引脚要复用推挽模式。注意TIM2_CH1通道对应PA0脚,别接到其他定时器通道上。

### 软件里的速度魔法

核心是PWM调速,在TIM2上搞了个20kHz的PWM信号:

`c

void PWM_Init(u16 arr, u16 psc) {

TIMTimeBaseInitTypeDef TIMInitStructure;

TIMOCInitTypeDef TIMOCInitStructure;

RCCAPB1PeriphClockCmd(RCCAPB1Periph_TIM2, ENABLE);

TIMInitStructure.TIMPeriod = arr; // 自动重装载值

TIMInitStructure.TIMPrescaler = psc; // 预分频系数

TIMInitStructure.TIMClockDivision = 0;

TIMInitStructure.TIMCounterMode = TIMCounterModeUp;

TIMTimeBaseInit(TIM2, &TIMInitStructure);

TIMOCInitStructure.TIMOCMode = TIMOCModePWM1;

TIMOCInitStructure.TIMOutputState = TIMOutputStateEnable;

TIMOCInitStructure.TIMPulse = 0; // 初始占空比

TIMOCInitStructure.TIMOCPolarity = TIMOCPolarityHigh;

TIMOC1Init(TIM2, &TIMOCInitStructure);

TIM_Cmd(TIM2, ENABLE);

TIM_CtrlPWMOutputs(TIM2, ENABLE);

}

`

这里TIM2的ARR寄存器决定PWM频率,计算时注意APB1总线时钟是36MHz。比如预分频设为35,ARR=900时,PWM频率就是36MHz/(35+1)/(900+1) ≈ 1088Hz,实际调试发现20kHz左右电机运行更平稳。

基于STM32的直流电机加减速正反转控制串口输出控制系统(P 1100009-基于STM32的直流电机加减速正反转控制串口输出控制系统(PCB 原理图 报告 源代码 proteus lcd1602) 功能描述:基于STM32平台 1、实现了电机控制正转、反转的功能 2、实现了电机控制加速、减速的功能 3、实现了串口输出控制信息的功能 4、串口可以模拟WIFI 蓝牙 RS232 等带有串口的功能。 资料包含: 1、源代码工程文件 2、仿真工程文件 3、论文报告1W字以上 4、原理图工程文件 5、PCB工程文件

速度控制函数像这样:

`c

void Set_Speed(u8 speed) {

if(speed > 100) speed = 100;

TIMSetCompare1(TIM2, (TIMGetAutoReload(TIM2)+1)*speed/100);

LCD_ShowNum(2, 9, speed, 3); // 在LCD第二行显示速度

}

`

输入0-100的百分比,自动换算成PWM占空比。TIM_GetAutoReload这个函数很实用,能动态获取ARR值,方便后续修改PWM频率时不用到处改代码。

### 串口玩出花

用中断接收模式处理串口指令:

`c

void USART1_IRQHandler(void) {

if(USARTGetITStatus(USART1, USARTIT_RXNE)) {

static u8 cnt = 0;

char ch = USART_ReceiveData(USART1);

if(ch == '#') { // 指令开始符

cmd_index = 0;

memset(cmdbuffer, 0, sizeof(cmdbuffer));

}

else if(ch == '!') { // 指令结束符

ProcessCommand(cmdbuffer);

}

else {

if(cmdindex < CMDMAX_LEN) {

cmdbuffer[cmdindex++] = ch;

}

}

}

}

`

自定义了简单的协议格式:#指令内容!。比如发送"#F+20!"表示正转加速到20%占空比,"#R-15!"代表反转减速15%。这种格式比单纯用AT指令更灵活,还能兼容各种串口转WIFI/蓝牙模块。

在Proteus仿真里,给电机模型加了个转速检测功能,能看到加速时的电流变化曲线。实际调试时发现电机启动瞬间容易过流,后来在代码里加了软启动:

`c

void SoftStart(u8 targetspeed) {

for(u8 i=0; i

Set_Speed(i);

Delay_ms(20); // 每20ms增加1%占空比

}

}

`

虽然让加速过程变慢了0.5秒左右,但有效保护了电机和驱动芯片,实测L298N模块发热明显降低。

这个项目从焊电路板到调PID参数(虽然最后没用上闭环控制),把本科学的单片机知识全过了一遍。资料包里那个1万多字的报告,其实是边做边写的吐槽笔记改的...完整工程文件已打包,需要源码的工友可以自己下回来魔改。

http://www.jsqmd.com/news/584471/

相关文章:

  • C++ 类和对象(下)核心总结
  • 如何用共享线程处理跨页面的数据同步冲突与锁定机制
  • OpenClaw备份与恢复:千问3.5-9B配置迁移完整流程
  • 月之暗面 Kimi 进阶:从长文本到 AI 搜索——最懂中国用户的AI助手
  • PregelProtocol——定义了“LangChain执行体“最小功能集
  • 【Web3】智能合约质量保障工程:从单元测试到 Gas 效能优化
  • Manus:中国AI Agent的破圈之作
  • LN2266 超小型 低电压启动 PWM 控制 升压 DC/DC 电压调整器
  • 【Java Stream 流:高效、优雅的集合操作 ✨】
  • 内网渗透零基础入门教程!小白也能轻松搞懂内网渗透基础知识点
  • MongoDB GridFS的fs.files集合越来越大怎么优化
  • Product Hunt 每日热榜 | 2026-04-03
  • 2026年比较好的砂浆生产线稳定供货厂家推荐 - 品牌宣传支持者
  • ESP32-S3驱动JW01二氧化碳传感器,供电踩坑实录(附完整Arduino代码)
  • OpenClaw资源监控方案:百川2-13B-4bits模型运行时的性能优化
  • 从 AI 助手到 ADT 自动化桥梁:全面解析 Vibing Steampunk 的定位、能力边界与典型使用场合
  • 分钱的艺术:为什么钱分下去了,团队反而有了怨气?
  • 【分布式技术】RustFS 非 Docker 部署完整指南:从单机到生产集群
  • 智力能效:Token之上的竞争
  • C# Avalonia 20 - WindowsMenu- 魔改Hyperlink - 使用例子
  • LLM 是怎么学习的?训练过程大揭秘
  • 避坑指南:清华镜像源安装GitLab时你可能遇到的5个EL版本问题
  • XSS漏洞解析
  • 第6章 数据类型转换-6.3 转换为布尔值
  • 【网络安全干货】黑客内网渗透零基础入门,超详细基础知识手把手教学
  • 【MATLAB源码-第407期】基于OFDM的低轨卫星通信系统中同步技术与链路鲁棒性增强研究,包含:定时同步、频偏估计、载波恢复等。
  • Iterator 与 fail-fast 机制:你不知道的细节
  • Linux生产环境性能优化:内存优先策略,彻底规避Swap性能损耗
  • Maven 4要来了:15年后,Java构建工具迎来“彻底重构”
  • OpenClaw邮件处理助手:Qwen3-14b_int4_awq分类与自动回复