设计分享 | 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

  • 0
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值