设计分享 | STM32F103RCT6利用PWM驱动SG90舵机并用按键控制

wx:嵌入式工程师成长日记

https://mp.weixin.qq.com/s?__biz=Mzg4Mzc3NDUxOQ==&mid=2247484157&idx=1&sn=3f856d17fc0aa04fcbcb9a45a46bdbfe&chksm=cf4307a5f8348eb3455f67a9a39def9e8aa24d3cefa534fbb41926b6a34f6dc255cc5f18f088&token=1690205545&lang=zh_CN#rdicon-default.png?t=M85Bhttps://mp.weixin.qq.com/s?__biz=Mzg4Mzc3NDUxOQ==&mid=2247484157&idx=1&sn=3f856d17fc0aa04fcbcb9a45a46bdbfe&chksm=cf4307a5f8348eb3455f67a9a39def9e8aa24d3cefa534fbb41926b6a34f6dc255cc5f18f088&token=1690205545&lang=zh_CN#rd

具体功能实现

当第一次按下按键KEY0时,OLED上的角度显示30,舵机转动30°;每按下一次按键OLED和舵机都改变30°,最后一次按下时,舵机直接转动180°回到最初的位置

STM32F103RCT6原理图

01

器件

STM32F103RCT6,OLED屏,七根杜邦线 ,SG90舵机

02

前后展示图

前展示图(开始位置0°)

此时,OLED屏上显示0°,舵机处在0°的位置

后展示图(转动至60°)

此时,OLED上显示60°,舵机处在60°的位置

知识介绍

TIM_Cmd

使能和失能外围设备(开启定时器时钟)

TIM_CtrlPWMOutputs()

使用PWM时,仅高级定时器必须开启这个,使能主输出,否则PWM将不能正常输出。其中高级定时器有TIM1和TIM8

SG90舵机控制原理

引脚定义及复用

以下三个图时STMF103系列的引脚定义图

举个例子:本文我们驱动GPIOA的Pin_1口,对应的时钟是TIM2,通道是CH1

PWM各参数值计算公式

PSC:预分频值

CCR:输出比较寄存器

TIM_RepetitionCounter()

只有在高级定时器才能用到

基本定时器:TIM6,TIM7

通用定时器:TIM2~TIM5

高级定时器:TIM1,TIM8

其中TIM1和TIM8的时钟是由APB2输出产生,其他则是由APB1输出产生

主函数代码(C语言)KEIL5实现

#include "stm32f10x.h"        // Device header

#include "Delay.h"

#include "OLED.h"

#include "Servo.h"

#include "Key.h"

uint8_t KeyNum;

float Angle;

int main(void)

{

OLED_Init();

Servo_Init();

Key_Init();

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);

}

}

工程文件请在前面vx处领取~

问题解答

Q

PWM调制定理需要用到哪些函数?

A

GPIO_InitTypeDef

TIM_TimeBaseInitTypeDef

TIM_OCInitTypeDef

TIM_SetCompare2

https://mp.weixin.qq.com/s?__biz=Mzg4Mzc3NDUxOQ==&mid=2247484157&idx=1&sn=3f856d17fc0aa04fcbcb9a45a46bdbfe&chksm=cf4307a5f8348eb3455f67a9a39def9e8aa24d3cefa534fbb41926b6a34f6dc255cc5f18f088&token=1690205545&lang=zh_CN#rdicon-default.png?t=M85Bhttps://mp.weixin.qq.com/s?__biz=Mzg4Mzc3NDUxOQ==&mid=2247484157&idx=1&sn=3f856d17fc0aa04fcbcb9a45a46bdbfe&chksm=cf4307a5f8348eb3455f67a9a39def9e8aa24d3cefa534fbb41926b6a34f6dc255cc5f18f088&token=1690205545&lang=zh_CN#rd

### SG90伺服电机的工作原理 SG90伺服电机是一种小型、低成本的舵机,广泛应用于各种自动化设备和机器人项目中。该舵机通过接收PWM(脉宽调制)信号来精确控制其旋转角度。 #### PWM信号特性 舵机接受来自控制器(如Arduino或树莓派)发出的PWM信号,这些信号具有固定的周期(通常为20毫秒),而占空比决定了舵机的具体动作位置。对于SG90来说,标准的PWM参数如下: - 周期:20 ms (50 Hz) - 中间位置对应的高电平持续时间为1.5 ms - 向左极限对应约0.5 ms 的高电平时间 - 向右极限则约为2.5 ms 高电平时长[^4] #### 内部结构与功能组件 舵机内部主要包括以下几个部分: - **微型电动机**:负责产生驱动力。 - **减速齿轮组**:用于降低速度并增加扭矩。 - **可变电阻器/电位计**:用来感知当前轴的位置并向内部控制电路发送反馈数据。 - **集成电路(IC)**:处理输入命令并与实际物理状态对比调整输出力矩直至达到设定的目标角位置[^3]。 #### 工作流程描述 当接收到一个特定宽度的正向脉冲时,IC会分析此脉冲长度,并据此计算出所需移动的方向以及幅度;接着驱动马达运转并通过齿轮传动使摆臂发生相应偏移。与此同时,内置的位置传感器将持续监测当前位置并将信息返回给IC以便实时校准偏差直到完全匹配指令所指定的角度为止。 ```plaintext +-------------------+ | | | Control Board |<----+ +------> External Power Supply | (IC, etc.) | | | +----------+--------+ | | | | | +---v--+ | | | Motor|---> Gear Train--+ +------+ | | Potentiometer (Feedback) ``` 上述简化版框图展示了SG90伺服电机的主要组成部分及其相互关系。请注意,在实际应用中还需要考虑外部电源供应以及其他必要的电气连接细节。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值