stm32f103c8t6与TB6612FNG解耦测试
stm32f103c8t6与TB6612FNG解耦测试
本文操作方式:
忽略底层,只做上层, 所以前面全部照搬步骤,重在调试
文章目录
- stm32f103c8t6与TB6612FNG解耦测试
- 本文操作方式:
- 创建基本工程
- (1)跳转此链接,创建
- (2)创建电机驱动文件夹
- (3)PWM原理
- (4)电机转动控制
- oled调试和key调试
- (5)OLED转速显示
- (6)引入oled库文件
- (7)OLED显示转速
- (8)key按键调试
- <1>引入文件
- <2>初始化初始按键
- <3>配置按键和风扇的交互
文件工程代码:
点击跳转
https://ww0.lanzoul.com/iZauM26zyrni
电机驱动接线原理图步骤:
点击跳转
https://blog.csdn.net/qq_57484399/article/details/141071139
stlink连线:
最小例程插线方法
oled接线原理图(iic总线):

创建基本工程
(1)跳转此链接,创建
点击跳转
https://blog.csdn.net/qq_57484399/article/details/141003048
(2)创建电机驱动文件夹
① 点击品字, 然后新建Motor

② 点击Motor, 然后点击Add files

③ 点击进入Motor文件夹, 然后点击文件类型为 all, 右键txet文件, 然后新建名字分别为
Motor.c
Motor.h
PWM.c
PWM.h
fun.c
fun.h
④ 然后选中这六个文件, 我们点击add
⑤ 接着我们去包含Motor的路径
但是我们要告诉工程, 我们的环境变量包含在哪里了, 所以我们点击锤子 -> c/c++ -> include Paths -> 新建变量 -> 选中所需文件夹(我们都放在Source_code里面)
具体方法, 还看创建工程
https://blog.csdn.net/qq_57484399/article/details/141003048

具体代码,跳转电机代码
https://blog.csdn.net/qq_57484399/article/details/141003251
把这六个文件的代码, 全黏贴进去, 后面我们简单说下原理
# 原理解析
(3)PWM原理
一个小灯, 正负极通电, 那么他就能亮, 但是此时是最高亮度, 那么我想让他亮度变低, 怎么做呢? 最直接的方法,就是直接断电, 但是这个时候就真的不亮了. 还有没有更好的办法, 我们通电,再断电, 这样小灯就闪了一下, 我们把这个时间段压缩到 10毫秒, 1毫秒内,通电 1ms, 断电 9ms, 和 通电9ms, 断电 1ms, 亮度是截然不同的。 这样在极短的时间内, 通过控制通电和断电的时间比例,既能保证通电的时候, 灯亮, 也能保证在这个时间段内, 通过控制通电的时候, 达到调节灯亮度的功能, 同时不影响 在这个周期时间段内, 如果全部断电,则会让灯熄灭。
具体的讲解,请看江协科技:
【STM32入门教程-2023版 细致讲解 中文字幕】https://www.bilibili.com/video/BV1th411z7sn?p=16&vd_source=1de4617d8462b141bb53b6be82555d31
我们通过了解PWM原理和观看视频, 知道了如何驱动电机,
① 我们在PWM.c的 PWM_Init里面初始化了 PB0端口,配置定时器, 这样电机驱动就可以设置占空比, 就可以控制特定的转速了.

(2)设置占空比, 有转换关系

(3)电机驱动, 需要控制 相应io端口的高低电平, 从而控制正反转,还有设置转速

(4)电机转动控制
我们看到这里就是控制 电机转动的函数了, 之前的都是底层, 这里主要讲解的就是,这里的上层配置.
电机转动:
我们通过设置(括号里面的是转速, 我们设置成 负数就是反转,正数就是正转, 绝对值是100)
Motor_SetSpeed(20);
电机不转:
设置占空比为 0
Motor_SetSpeed(0);
(5)我们通过模仿led, 把电机的状态和io口绑定, 并且为了避免重复开关io口, 我们如果判断出fun和我们设置的状态是一致的, 那么我们就不操作io口
具体示例可以看我们之前led控制:
https://blog.csdn.net/qq_57484399/article/details/140879950

注意上图所示我们这里控制io口,直接为高或者低电平, 相当于我们设置占空比为 100% 或者 0%, 我们上面是无法控制转速的,只能控制开关.
但是我们使用TB6612FNG, 就是想通过设置 PWM的占空比, 从而控制电机的转速的, 所以我们只有修改一下控制io口的方式就可以了. 设置成控制转速, 就可以实现速度可控的电机了
Motor_SetSpeed(20);
我们留出了Speed, 这里就是为了控制转速.
代码如下:
/*
************************************************************
* 函数名称: Fun_Set
*
* 函数功能: 电机控制
*
* 入口参数: status:开关蜂鸣器
*
* 返回参数: 无
*
* 说明: 开-FUN_ON 关-FUN_OFF
************************************************************
*/
extern int8_t Speed; //定义速度变量
void Fun_Set(_Bool status)
{//是1,就先让风扇转20,否则0的话,停止if(status == FUN_ON && fun_info.fun_Status != FUN_ON){Motor_SetSpeed(Speed);fun_info.fun_Status = status;}else if(status == FUN_OFF && fun_info.fun_Status != FUN_OFF){Motor_SetSpeed(0);fun_info.fun_Status = status;}}
oled调试和key调试
(5)OLED转速显示
我们通过加入OLED工程
OLED.c
OLED.h
OLED_Data.c
OLED_Data.h
具体加入方式如下(从第九步开始):
https://blog.csdn.net/qq_57484399/article/details/141003048

(6)引入oled库文件
引入后, 我们在main.c里面, 引入OLED.h
#include "OLED.h"
在main函数里面 初始化oled
OLED_Init();
(7)OLED显示转速

main.c函数代码
#include "stm32f10x.h" // Device header
#include "delay.h"
#include "OLED.h"
#include "fun.h"
#include "Key.h"int8_t Speed; //定义速度变量 int main(void)
{Delay_Init();OLED_Init(); Key_Init();Fun_Init();/*显示静态字符串*/OLED_ShowString(0, 0, "Speed:", OLED_8X16);while(1){OLED_ShowSignedNum(56, 0, Speed, 3, OLED_8X16); OLED_Update();}}
(8)key按键调试
<1>引入文件
在User文件夹里面, 加入两个文件 Key.c 和 Key.h

具体加入方式如下(从第九步开始):
https://blog.csdn.net/qq_57484399/article/details/141003048
main.c里面引入
#include "Key.h"
<2>初始化初始按键
Key_Init();
跳转初始化函数就可以看出我们设置的是 PB1按键

<3>配置按键和风扇的交互
我们在Key.c里面, 配置按键中断函数, 当按下按键的时候, 就会触发中断EXTI1_IRQHandler(触发原因如下)
触发原因(ctrl 加鼠标左键, 快速跳转)
我们首先判断风扇的状态, 然后对风扇状态取反
extern int8_t Speed; //定义速度变量
void EXTI1_IRQHandler(void)
{DelayXms(10);while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0);//判断风扇是开启状态, 就关闭风扇if(fun_info.fun_Status == FUN_ON){Speed = 0;Fun_Set(FUN_OFF);}else //相反,则开启风扇{Speed = 20;Fun_Set(FUN_ON);}EXTI_ClearITPendingBit(EXTI_Line1);
}
触发原因
这里触发的中断, PB1, 我们在key.c初始化函数 void Key_Init(void); 配置的是中断1(配置细节,无需考虑,我们只注重调试)

<4>我们进入fun.c底层, 会看到 , 开启风扇后,设置了转速,这个转速后续我们调整. 现在设置成定值, 我们转速在 0 和 20 切换(其实也能从oled看到现象了)

现象调试:
按下按键后, oled显示转速20, 电机转动
再次按下后, oled显示转速 0 , 电机停转
【电机解耦测试-哔哩哔哩】
电机解耦测试
相关文章:
stm32f103c8t6与TB6612FNG解耦测试
stm32f103c8t6与TB6612FNG解耦测试 本文操作方式: 忽略底层,只做上层, 所以前面全部照搬步骤,重在调试 文章目录 stm32f103c8t6与TB6612FNG解耦测试本文操作方式:创建基本工程(1)跳转此链接,创建(2)创建电机驱动文件夹(3)PWM原理(4)电机转动控制 oled调试和key调试(5)OLED转速…...
2253336 - 资源库 - OAC0 中的脱机状态
症状 资源库的状态显示为离线。 环境 SAP 内容服务器 6.50 或更高版本与 MaxDB 存储媒介结合使用对于状态为离线的资源库,测试报表 RSCMST 运行正常资源库可在应用程序中使用,没有任何问题 重现问题 启动事务 OAC0双击资源库按 "CSADMIN"…...
uni-app总结
1. <u-form-item label"报废人" ><u--input v-model"model.remark" border"bottom" placeholder"请输入"></u--input> </u-form-item> border"bottom" 报废日期 为了...
【JavaEE初阶】线程安全的集合类
📕 引言 我们之前讲过的集合类,,大部分都不是线程安全的. Vector, Stack, HashTable, 是线程安全的(都是自带了synchronized,不建议用), 其他的集合类不是线程安全的。 注意:加锁不能保证线程一定安全,不加锁也不能确定线程一定…...
关于Vue项目npm快捷键,点击run启动报错,及npm i也报错的解决办法
1.配置idea的npm 2.点击运行按钮 3.结果 分析原因及问题: npm i npm run dev 由于是刚刚从gitlab新拉的前端代码,可能没有用命令install过类似于没有编译过,所以执行一下上面的命令 结果报错如下: F:\tbyf\qjyy\hip-manager-ui&…...
React中,className属性自定义组件不生效的问题
在React中,className属性不仅适用于原生的HTML元素,也可以用于自定义组件。实际上,className属性是React中通用的属性,可以应用于任何React元素,无论是原生的HTML元素还是自定义的组件。 为什么使用className而不是cl…...
Ubuntu22.04搭建fabric开发环境、开发环境下运行链码
在智能合约开发过程中,开发人员需要一种快速、迭代地测试链码包的方法,而无需为每次修改运行链码生命周期命令。 使用 Fabric 二进制文件并启动peer处于开发模式(“DevMode”),然后将链码连接到peer。它允许您启动链代…...
[BSidesCF 2019]Kookie1
打开题目,看到 根据提示,账号:cookie。密码:monster。试一下登录,登陆成功 抓包看看信息 根据提示, 看一下返回包 账号要加username要改成admin,改一下试试 构造cookie 直接得到flag flag{c…...
LCM红外小目标检测
根据站内的matlab代码修改成python版本。 import numpy as np import matplotlib.pyplot as plt import cv2 from pylab import mpl# 设置中文显示字体 mpl.rcParams["font.sans-serif"] ["SimHei"]def LCM_computation(patch_LCM_in):row, col patch_L…...
振德医疗选择泛微千里聆RPA,助力电商、人事业务流程自动化
振德医疗用品股份有限公司成立于1994年,中国A股上市公司,是医用敷料和感控防护产品主要的供应商之一。 (图片素材来自振德医疗官网) 振德医疗的业务在线上线下齐发力。目前拥有5个国内生产基地,3个海外工厂࿰…...
VBA高级应用30例应用3在Excel中的ListObject对象:创建表
《VBA高级应用30例》(版权10178985),是我推出的第十套教程,教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开,这套教程案例与理论结合,紧贴“实战”,并做“战术总结”,以…...
IP 地址在 SQL 注入攻击中的作用及防范策略
数据库在各个领域的逐步应用,其安全性也备受关注。SQL 注入攻击作为一种常见的数据库攻击手段,给网络安全带来了巨大威胁。今天我们来聊一聊SQL 注入攻击的基本知识。 SQL 注入攻击的基本原理 SQL 注入是通过将恶意的 SQL 代码插入到输入参数中…...
Unity VR黑屏
picosdk里面的,有修改 using System.Collections; using System.Collections.Generic; using UnityEngine;public class ScreenFade : MonoBehaviour {[Tooltip("颜色")]public Color fadeColor new Color(0.0f, 0.0f, 0.0f, 1.0f);private int renderQ…...
Vue.js 中使用 Watcher 的强大场景和案例
目录 表单验证 示例代码: HTML: 获取 API 数据 示例代码: HTML: 深度监听对象变化 示例代码: HTML: 观察多个数据源 示例代码: HTML: Vue.js 是一个流行的前端框架,以其直观的数据绑定和组件驱动的开发模式而闻名。其中,watch 功能是其响应式编程模型…...
《实现 DevOps 平台(2) · GitLab CI/CD 交互》
📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…...
【机器学习sklearn实战】岭回归、Lasso回归和弹性网络
一 sklean中模型详解 1.1 Ride regression 1.2 Lasso regression 1.3 ElasticNet 二 算法实战 2.1 导入包 import numpy as np import pandas as pd from sklearn import datasets from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.linear…...
Python 爬虫项目实战六:抓取猫眼电影排行榜的数据
在这篇博客中,我们将通过一个实际的Python爬虫项目,详细讲解如何抓取网页数据。本次选择的实战项目是抓取猫眼电影排行榜的数据,通过这个项目,你将学会如何使用Python编写爬虫,从网页中提取有用的电影信息。 一、项目…...
YOLO系列:从yolov1至yolov8的进阶之路 持续更新中
一、基本概念 1.YOLO简介 YOLO(You Only Look Once):是一种基于深度神经网络的对象识别和定位算法,其最大的特点是运行速度很快,可以用于实时系统。 2.目标检测算法 RCNN:该系列算法实现主要为两个步骤&…...
欧拉系统离线安装界面ukui
1、官网下载安装镜像iso后,默认没有gui openEuler | 开源社区 | openEuler社区官网openEuler是一个开源、免费的 Linux 发行版平台,将通过开放的社区形式与全球的开发者共同构建一个开放、多元和架构包容的软件生态体系。同时,openEuler 也是…...
Milvus向量数据库的简介以及用途
Milvus 是一个开源的向量数据库,专门用于处理和存储高维向量数据。它可以高效地支持各种数据科学和机器学习应用,特别是在涉及到大规模相似度搜索和推荐系统等领域。 以下是 Milvus 的简介以及它的主要用途。 1. Milvus 简介 Milvus 是由 Zilliz 开发的开源分布式向量数据库…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
Xela矩阵三轴触觉传感器的工作原理解析与应用场景
Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…...
消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...
客户案例 | 短视频点播企业海外视频加速与成本优化:MediaPackage+Cloudfront 技术重构实践
01技术背景与业务挑战 某短视频点播企业深耕国内用户市场,但其后台应用系统部署于东南亚印尼 IDC 机房。 随着业务规模扩大,传统架构已较难满足当前企业发展的需求,企业面临着三重挑战: ① 业务:国内用户访问海外服…...
