基于stm32f103zet6控制180°舵机的详细使用及测试(keil5软件)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、代码
- 总结
前言
该文章适合于32单片机小白入手外设的一个代码篇章,主要通过按键来控制pwm占空比来控制舵机转动不同角度,使用了Timer4-CH4(oc4)-PB9 详细介绍及操作过程在文件main函数页面中!。
一、主要代码示例
代码如下(示例):
//main.c/* //-----设备准备及接线:该例子测试于stm32f103zet6 正点原子开发板 + 180°舵机 + 公母杜邦线Timer4部分重映射 TIM4_CH3->PB9 橙色杜邦线VCC -> 5V 红色杜邦线GND -> GND 棕色杜邦线
*//* //-----测试操作:按下开发板按键 key_up --> 180°舵机 舵机角度为 0° 的位置 (逆时针转动)key1 --> 180°舵机 舵机角度为 90° 的位置key0 --> 180°舵机 舵机角度为 180° 的位置*/#include "led.h"
#include "key.h"
#include "timer.h"
#include "sys.h"
#include "usart.h"
#include "delay.h"int main(void)
{vu8 key=0; LED_Init(); //led灯初始化KEY_Init(); //按键与硬件连接初始化delay_init();LED0=0; //红灯表示正常工作TIM4_PWM_Init(199,7199); //利用pwm控制180°舵机 小周期0.1ms 大周期20ms,改变高电平在大周期20ms中的占比控制舵机转动角度//这里用的是pwm2模式,向上计数法,比较极性电平为低while(1) {key=KEY_Scan(0); //得到键值if(key){ switch(key){ case WKUP_PRES: //按键key_up 20ms*5/200=0.5ms 0° 约每0.5ms转动45° TIM_SetCompare4(TIM4,5);break; case KEY1_PRES: //按键KEY1 20ms*10/200=1ms 90°delay_ms(100);TIM_SetCompare4(TIM4,15);break;case KEY0_PRES: //按键KEY0 20ms*25/200=2.5ms 180°TIM_SetCompare4(TIM4,25);break;}}else delay_ms(10); } }
//time.c
#include "timer.h"
#include "usart.h"
#include "sys.h"//TIM3 PWM部分初始化
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM4_PWM_Init(u16 arr,u16 psc)
{GPIO_InitTypeDef GPIO_InitStrue;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //使能定时器4时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE); //使能GPIO外设和AFIO复用功能模块时钟//GPIO_PinRemapConfig(GPIO_Remap_TIM4, ENABLE);//=Timer4部分重映射 TIM4_CH3->PB9 //设置该引脚为复用输出功能,输出TIM4 CH3的PWM脉冲波形 GPIOB.9GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP; //复用推挽输出GPIO_InitStrue.GPIO_Pin=GPIO_Pin_9; //TIM_CH3GPIO_InitStrue.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStrue); //初始化该该端口 //初始化TIM4TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位//初始化TIM4 Channel2 PWM模式TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low; //High --> Low //输出极性:TIM输出比较极性低TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; //比较输出使能TIM_OC4Init(TIM4,&TIM_OCInitStructure); //根据T指定的参数初始化外设TIM4 OC4TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIM在CH3上CCR4上的预装载寄存器TIM_Cmd(TIM4,ENABLE); //使能TIM4
}
总结
一个基于stm32f103zet6简单的180°舵机控制代码,第一次写博客啦,应该写的不太好,望简单看看就好。
基于stm32f103zet6控制180°舵机的详细使用及测试(keil5软件)相关推荐
- SG90 180°舵机的使用
SG90 180°舵机的使用 SG90的介绍 舵机是一种位置(角度)伺服的驱动器,适用于需要角度不断变化并可以保持的控制系统,可以根据控制信号来输出指定的角度(常见的有0-90°.0-180°.0-3 ...
- 第六篇、基于Arduino uno,控制180度舵机(SG90)转动——结果导向
0.结果 说明:让舵机转动,需要用PWM来控制,下面的程序是舵机从0度一直转到180度,然后又从180度转到0度的这样一个过程. 1.外观 说明:虽然舵机的型号有很多种,但是只要是180度的舵机,控制 ...
- STM32机器人控制开发教程No.3 使用遥控控制电机/舵机(基于HAL库)
01 前言 本教程使用的机器人控制板拥有4个带编码器的电机接口,4个舵机接口,串口通信接口.SWD下载调试接口.航模遥控接口.USB5V输出接口以及方便与树莓派直接连接的40PIN接口等,板载资源丰富 ...
- 生成基于STM32f103zet6的宠物自动投食机的代码,实现定时、定量、自动的投食,并可以通过Tlink物联网平台控制投食机投喂食物和查看投食机的投喂状态...
非常抱歉,由于我是一个语言模型,我没有办法为您生成完整的代码.但是,我可以为您提供一些有用的信息. 首先,生成基于STM32f103zet6的宠物自动投食机的代码需要一些基本的技能和知识,比如嵌入式系 ...
- 无线控制模块c语言编程,基于STM32F103ZET6无线语音控制小车设计与实现.doc
基于STM32F103ZET6无线语音控制小车设计与实现 基于STM32F103ZET6无线语音控制小车设计与实现 摘要:本文以STM32F103ZET6单片机作为控制核心,通过LD3320语音识别模 ...
- 180°舵机如何控制?
180°舵机最常见的是SG90舵机,用的也最多,非常便宜,某多多5.6块就可以买到一个,大概长这样: 前言 大二刚学单片机,觉得单片机很厉害,然后就想做一个宿舍智能开门装置.然后我就想其中最主要的问题 ...
- 最简单DIY基于51单片机的舵机控制器
51单片机物联网智能小车系列文章目录 第一篇:最简单DIY的51蓝牙遥控小车设计方案 第二篇:最简单DIY串口蓝牙硬件实现方案 第三篇:最简单DIY蓝牙PS2遥控器控制蓝牙智能小车 第四篇:最简单DI ...
- 基于51单片机密码锁-舵机开锁-CXM
这个项目的起因还是因为每次进出寝室十分的麻烦才有了这个项目 所以我和我的铁子就决定搞个密码锁 我负责软件我的铁子负责硬件 目录 原理图 主要功能函数讲解 硬件 先简单介绍一下整个架构 原理图 主要功能 ...
- 基于STM32F103ZET6的RX8025SA时钟电路设计
1. 现在网上大多例程都是关于RX8025T的.带温度补偿的时钟芯片手册, RX8025SA与RX8025T的区别: RX8025T内置高稳定性32.768kHz的DTCXO(数字温度补偿晶体振荡器) ...
最新文章
- Android开发之详解五大布局
- springMVC 过滤器与拦截器的执行顺序问题。springboot一样参考
- GSON反序列化时,字符串被转换成科学记数法的问题处理
- win7 右键增加打开 powershell选项
- 用hundred造句子_关于冬至的问候短句,冬至文案唯美句子
- 开源日志审计系统_一文掌握mysql数据库审计特点、实现方案及审计插件部署教程...
- Delphi运算符及优先级
- 批梯度下降 随机梯度下降_梯度下降及其变体快速指南
- 大小文件服务器区别,在提供静态包时,观察到Nginx和Express服务器之间文件大小的差异...
- 如何在mysql navicat 设置datetime类型的默认事件值
- 解决办法——Qtdemo软件无法加载example的问题
- Origin8 使用教程
- 桌面上的街舞之基础篇(09-04-29)
- 记录一次紫狐Rootkit应急响应过程
- 计算机基础(笔记)——计算机网络(链路层)
- 细节:基本数据类型中float与double的区别
- HCL(华三模拟器) 安装遇到的问题(1)
- Linux下安装Perl模块(含CPAN方法)
- Android——UIL实现图片缓存基本配置及使用
- STM32定时器3配置时钟的坑
热门文章
- Sonnet Suite Pro v11.52-ISO 1CD(三维高频电子设计)
- must end with the ';' delimiter.错误的解决
- Android Gradle Plugin 开发问题记录:Class xxx is final
- 微信的野心到底有多可怕?多可怕!
- excel拆分实例:如何快速制作考勤统计分析表
- Django debug page XSS漏洞(CVE-2017-12794)分析
- 深度学习之openvino预训练模型测试
- 如何提高自己的学习兴趣?
- python语音转文字代码
- 批量生成文件夹并命名,操作步骤