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

PWM驱动舵机

PWM驱动舵机

接线图
在这里插入图片描述

程序结构图:
在这里插入图片描述
pwm.c部分代码
在这里插入图片描述

#include "stm32f10x.h"                  // Device headervoid PWM_Init(void){// 开启时钟,这里TIM2是通用寄存器RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);// GPIO初始化代码/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);		//开启GPIOA的时钟/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;// 使用复用开漏推挽输出模式GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);						//将PA1和PA2引脚初始化为推挽输出// 选择时基单元的时钟,选择内部时钟的模式,定时器默认使用的是内部单元的时钟TIM_InternalClockConfig(TIM2);// 配置时基单元,初始化结构体TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;// 将结构体成员都引用出来放置在这个位置TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;    // 配置参数是否分屏TIM_TimeBaseInitStructure.TIM_CounterMode =TIM_CounterMode_Up; // 选择计数的模式选择向上计数TIM_TimeBaseInitStructure.TIM_Period = 20000 -1;               // 表示ARR自动重装器的值,这两个参数的取值都要在0-65535之间TIM_TimeBaseInitStructure.TIM_Prescaler = 72-1;              // PSC预分频器的值TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;           // 重复计数器的值// 初始化结构体并将结构体的地址放置在init函数中TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);// 初始化输出比较单元TIM_OCInitTypeDef TIM_OCInitStructure;// 给结构体赋初始值TIM_OCStructInit(&TIM_OCInitStructure);// 设置输出比较的模式TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;// 设置输出比较的极性,选择高极性TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;// 设置输出使能,输出状态TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable ;//设置CCR,设置ccr寄存器的值TIM_OCInitStructure.TIM_Pulse = 0;    // CCRTIM_OC2Init(TIM2, &TIM_OCInitStructure);// 启动定时器TIM_Cmd(TIM2, ENABLE);
}
void PWM_SetCompare2(uint16_t Compare){TIM_SetCompare2(TIM2,Compare);
}

PWM.H文件

#ifndef __PWM_H_
#define __PWM_H_
void PWM_Init(void);
void PWM_SetCompare2(uint16_t Compare);
#endif

电机驱动文件Servo.c文件

在这里插入图片描述

#include "stm32f10x.h"                  // Device header
#include "PWM.h"void Servo_Init(void){// 初始化PWM底层PWM_Init();}// 设置舵机的角度0   500,180 2500,输入角度/180 = x /2500 ---> 输入角度 / 180 * 2500 = x
// 求取一个线性函数,y =kx+b 已知(0,500)和(180,2500)求取k和b的值
void Servo_SetAngle(float Angle){// 调用PWM_SetCompare2,计算参数PWM_SetCompare2(Angle / 180 * 2000 + 500);}

servo.h文件

#ifndef __SERVO_H_
#define __SERVO_H_
void Servo_Init(void);
void Servo_SetAngle(float Angle);
#endif

main函数文件

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Servo.h"
#include "KEY.H"
uint8_t i;
// 按键键码
uint8_t KeyNum;
float Angle;int main(void)
{// 初始化oledOLED_Init();Servo_Init();// 初始化按键Key_Init();// OLED显示角度的值OLED_ShowString(1,1,"Angle:");while (1){KeyNum = Key_GetNum();if(KeyNum == 1){Angle += 30;if(Angle > 180){Angle = 0;}}Servo_SetAngle(Angle);OLED_ShowNum(1, 7, Angle, 3);}
}

相关文章:

PWM驱动舵机

PWM驱动舵机 接线图 程序结构图: pwm.c部分代码 #include "stm32f10x.h" // Device headervoid PWM_Init(void){// 开启时钟,这里TIM2是通用寄存器RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);// GPIO初始化代…...

处理Centos 7 中buff/cache高的问题

在CentOS 7中,如果发现 buff/cache 栏目的值过高占用了大量内存,可以尝试以下方法来释放部分缓存: 清理页面缓存 Linux内核会缓存最近使用过的内存页面,以提高访问速度。你可以使用以下命令清理页面缓存: sudo sync && sudo echo 1 > /proc/sys/vm/drop_caches …...

【送书福利第五期】:ARM汇编与逆向工程

文章目录 📑前言一、ARM汇编与逆向工程1.1 书封面1.2 内容概括1.3 目录 二、作者简介三、译者介绍🌤️、粉丝福利 📑前言 与传统的CISC(Complex Instruction Set Computer,复杂指令集计算机)架构相比&#…...

STM32的USART能否支持9位数据格式话题

1、问题描述 STM32L051 这款单片机。平常的 USART 串口传输是 8 位数据,但是他的项目需要用串口传输 9 位数据。当设置为 8 位数据时,串口响应中断正常。但是,当设置为 9 位数据时,串口就不产生中断了。USART2 的 ISR 寄存器 RXN…...

OLAP与数据仓库和数据湖

OLAP与数据仓库和数据湖 本文阐述了OLAP、数据仓库和数据湖方面的基础知识以及相关论文。同时记录了我如何通过ChatGPT以及类似产品(通义千问、文心一言)来学习知识的。通过这个过程让我对于用AI科技提升学习和工作效率有了实践经验和切身感受。 预热 …...

zookeeper快速入门三:zookeeper的基本操作

在zookeeper的bin目录下,输入./zkServer.sh start和./zkCli.sh启动服务端和客户端,然后我们就可以进行zookeeper的基本操作了。如果是windows,请参考前面章节zookeeper快速入门一:zookeeper安装与启动 目录 一、节点的增删改查 …...

oracle 19c打补丁到19.14

oracle 19c打补丁到19.14 oracle 19.3打补丁到19.14 查看oracle的版本: SQL> column product format A30 SQL> column version format A15 SQL> column version_full format A20 SQL> column status format A15 SQL> select * from product_compo…...

Spring Boot(六十九):利用Alibaba Druid对数据库密码进行加密

1 Alibaba Druid简介 之前介绍过Alibaba Druid的,章节如下,这里就不介绍了: Spring Boot(六十六):集成Alibaba Druid 连接池 这章使用Alibaba Druid进行数据库密码加密,在上面的代码上进行修改,这章只介绍密码加密的步骤。 目前越来越严的安全等级要求,我们在做产品…...

51单片机—DS18B20温度传感器

目录 一.元件介绍及原理 二,应用:DS18B20读取温度 一.元件介绍及原理 1.元件 2.内部介绍 本次元件使用的是单总线 以下为单总线的介绍 时序结构 操作流程 本次需要使用的是SKIP ROM 跳过, CONVERT T温度变化,READ SCRATCHPAD…...

Monorepo 解决方案 — 基于 Bazel 的 Xcode 性能优化实践

背景介绍 书接上回《Monorepo 解决方案 — Bazel 在头条 iOS 的实践》,在头条工程切换至 Bazel 构建系统后,为了支持用户使用 Xcode 开发的习惯,我们使用了开源项目 Tulsi 作为生成工具,用于将 Bazel 工程转换为 Xcode 工程。但是…...

Unity触发器的使用

1.首先建立两个静态精灵(并给其中一个物体添加"jj"标签) 2.添加触发器 3.给其中一个物体添加刚体组件(如果这里是静态的碰撞的时候将不会触发效果,如果另一个物体有刚体可以将它移除,或者将它的刚体属性设置…...

docker compose部署rabbitmq集群

docker compose 配置 假设有两台电脑 A电脑的ip为192.168.1.100 B电脑的ip为192.168.1.103 A电脑的docker compose 配置 version: 3services:rabbitmq:restart: alwaysimage: rabbitmq:3.9.18-managementcontainer_name: rabbitmq-node-1hostname: rabbit1extra_hosts:- &quo…...

数据结构/C++:红黑树

数据结构/C:红黑树 概念实现基本结构插入uncle为红色节点uncle为黑色节点 总代码展示 概念 红黑树是一种二叉搜索树,一般的二叉搜索会发生不平衡现象,导致搜索效率下降,于是学者们开始探索如何让二叉搜索树保持平衡,这…...

【LabVIEW FPGA入门】浮点数类型支持

如今,使用浮点运算来设计嵌入式系统的需求变得越来越普遍。随着 FPGA 因其固有的大规模并行性而在浮点性能方面继续超越微处理器,这种情况正在加剧。线性代数和数字信号处理 (DSP) 等高级算法可以受益于浮点数据类型的高动态范围精度。LabVIEW FPGA 通过…...

ffmpeg 滤镜实现不同采样率多音频混音

音频混音在音视频开发中是十分重要的一个环节,所谓音频混音就是将所有需要混音的数据相加得到混音数据,然后通过某个算法进行非法数据的处理;例如相加数值超过最大值,最小值等! 在实际的音频开发中,要实现混音的流程如下: 因此我们的编码实现就分为五部分:寻找…...

UserTCP 传输数据时如何保证数据的可靠性?并以LabVIEW为例进行说明

TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它通过多种机制保证数据的可靠性,确保数据在网络中从一端传输到另一端时,顺序正确且无误差。以下是TCP实现数据可靠性的一些关键机制: 1. 三…...

基于粒子群算法的分布式电源配电网重构优化matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1基本PSO算法原理 4.2配电网重构的目标函数 5.完整工程文件 1.课题概述 基于粒子群算法的分布式电源配电网重构优化。通过Matlab仿真,对比优化前后 1.节点的电压值 2.线路的损耗,这里计…...

mysql提权总结(自学)

目录 MySQL数据库提权简介 UDF提权 原理 利用条件 利用准备 利用过程 MOF提权 原理 利用条件 利用过程 自启动提权 反弹shell提权 总结 MySQL数据库提权简介 一般数据库提权思路: 检测数据库的存在(探测端口)获取到数据库的权限…...

[数据集][目标检测]铝片表面工业缺陷检测数据集VOC+YOLO格式400张4类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):400 标注数量(xml文件个数):400 标注数量(txt文件个数):400 标注类别…...

晶体管-二极管三极管MOS管选型参数总结

🏡《总目录》 目录 1,概述2,二极管选型参数2.1,类型(Type)2.2,最大整流电流(IF)2.3,反向击穿电压(VRRM)2.4,正向压降(VF)2.5,反向电流(IR)2.6,结温(Tj)2.7,热阻(Rth)2.8,频率特性2.9,包装类型...

为什么你的ChatGPT公众号打开率不足8%?腾讯内部流出的3类高唤醒标题公式(限时公开)

更多请点击: https://intelliparadigm.com 第一章:ChatGPT公众号打开率低迷的底层归因诊断 公众号打开率持续低于行业均值(5.2% vs 行业中位数12.7%),表面是内容吸引力不足,实则暴露了用户触达链路中多个结…...

保姆级教程:用Python将EEG脑电信号转成图像,喂给VGG+LSTM做疲劳检测

从EEG信号到疲劳检测图像:Python实战全流程解析当脑电波遇见计算机视觉,会擦出怎样的火花?传统EEG分析往往局限于时频域特征提取,而本文将带你探索一种革命性的思路——将多通道脑电信号转化为彩色拓扑图像,让卷积神经…...

告别默认图表:手把手教你定制VASPKIT的PLOT.In文件,画出符合期刊要求的能带图

科研绘图进阶:深度定制VASPKIT能带图的专业技巧在学术论文写作中,一张精心设计的能带图往往能成为研究成果的视觉名片。VASPKIT作为材料计算领域的利器,其自动绘图功能虽然便捷,但默认输出往往难以满足高端期刊的审美要求。本文将…...

Capsule技术:游戏引擎与数据中心资源隔离的创新方案

1. Capsule技术核心解析:当游戏引擎遇见数据中心资源隔离在云游戏爆发式增长的今天,数据中心的GPU资源利用率成为决定商业成败的关键指标。传统游戏引擎设计存在一个根本性矛盾:现代GPU的计算能力呈指数级增长(如NVIDIA RTX 4090拥…...

Nsight System和Compute命令行

Nsight System分析 nsys profile --tracecuda,nvtx --gpu-metrics-devicesall -o <out_file_name> python <python_file_name> <python args>示例 nsys profile --tracecuda,nvtx --gpu-metrics-devicesall -o profile_attention_bm128_bn64_w4_s2 python my…...

井下巷道无感精准定位 作业人员在岗离岗智能甄别

井下巷道无感精准定位 作业人员在岗离岗智能甄别技术白皮书编制单位&#xff1a;镜像视界浙江科技有限公司技术资质&#xff1a;国家十四五重点课题研究、镜像视界浙江普陀时空大数据应用技术联合研究、河南省电检院权威认证版本&#xff1a;V1.0一、项目概述井下巷道空间迂回交…...

为什么你的Gemini总生成错误JOIN?深度拆解语义理解断层、外键缺失与上下文截断三大黑洞

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;为什么你的Gemini总生成错误JOIN&#xff1f;深度拆解语义理解断层、外键缺失与上下文截断三大黑洞 当Gemini面对多表SQL生成任务时&#xff0c;频繁输出逻辑错误的JOIN语句——例如对无关联字段的表强…...

【图像压缩】基于ADMM的卷积稀疏编码高效算法Matlab实现

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。&#x1f34e;完整代码获取 定制创新 论文复现点击&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1f3…...

GetQzonehistory:如何永久保存你的QQ空间记忆

GetQzonehistory&#xff1a;如何永久保存你的QQ空间记忆 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾在深夜翻看QQ空间&#xff0c;突然发现那些记录着青春点滴的说说正在逐…...

[特殊字符] Lucky从零到一的系统搭建里程碑 | 写给后人的初心与使命

&#x1f331; 从零到一的足迹 写给未来的你们&#xff1a; 这不是炫耀&#xff0c;不是宣传。 这是一个普通人&#xff0c;一个退伍军人&#xff0c;一个什么都不懂的人&#xff0c;和AI一起创造的故事。 如果这个系统让你们受益&#xff0c;请记住&#xff1a;初心、根、使命…...