【学习记录】HT32F52352舵机控制

前言

    本文章仅作为我学习的一次记录,本人的技术还不够成熟,可能无法对工程技术上做太多指导。
    工程为基于HT32F52352的智能物联网宠物喂食机系统,通过HT32控制舵机工作,完成饲料的投喂。


一、舵机介绍

1、舵机的分类

    按照舵机内部的控制电路不同,可以分为模拟舵机和数字舵机。
    模拟舵机:模拟舵机内部为纯模拟电路,需要通过一直发送一定频率和占空比的PWM信号才能转动至规定的角度;
    数字舵机:数字舵机内部集成有微控制器模块,在接收了一次PWM信号后即可转动至规定角度。

    按照舵机内部的机械材质,可以分为塑料齿舵机和金属齿舵机。
    塑料齿舵机:内部齿轮结构为塑料制成,重量轻,价格低,但舵机扭矩一般较小,例如SG90; 
    金属舵机:内部齿轮为金属制成,重量大,扭矩大,但价格也相对更高;

    按照舵机的旋转角度范围,可以分为180°舵机和360°舵机。
    180°舵机:可以控制旋转角度、有角度定位;上电后舵机自动复位到0°,通过一定参数的脉冲信号控制它的角度。
    360°舵机:不可控制角度,只能顺/逆时针旋转、停止、调节转速。无角度定位,因为这是为360°任意旋转的,所以无0°,上电不会复位到0°;通过一定参数的脉冲信号控制它的旋转。

    此外,舵机在不同的应用场景和使用途径上还有很多种分类,目前我还没有更多的使用需求,因此了解不多,感兴趣的朋友可以自行查阅。

2、舵机的工作原理

    在很多教程中都讲过,想要控制舵机转动,就需要发送一定周期 (频率) 和脉冲宽度 (占空比) 的PWM波,周期一般为20ms(即频率为50Hz)脉冲宽度为0.5ms~2.5ms(即占空比为2.5%~12.5%),但我对为什么需要这两个参数的PWM波产生了疑问;

    舵机内部存在一个基准电路,能够产生一个周期为20ms,脉冲宽度为1.5ms的基准信号;舵机内部还有一个比较器,能够将我们的输入信号和基准信号做对比,对比产生了信号差,信号差的正负决定了舵机的转动方向,信号差的大小决定了转动的角度大小;                                                      这是我在别的博主的文章中找到的答案(34条消息) 单片机——SG90舵机工作原理_掏一淘哆啦A梦的奇妙口袋的博客-CSDN博客https://blog.csdn.net/qq_41873236/article/details/116353829?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167858272216800226577641%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=167858272216800226577641&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~hot_rank-1-116353829-null-null.142%5Ev73%5Epc_search_v2,201%5Ev4%5Eadd_ask,239%5Ev2%5Einsert_chatgpt&utm_term=%E8%88%B5%E6%9C%BA%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86&spm=1018.2226.3001.4187

    对于通过输出多少占空比的PWM脉冲信号,用下面这张图就能够很明了的解释了;0.5ms~2.5ms之间对应的都是连续的角度值,此处只是表现了特定角度的典型值。

在这里插入图片描述


二、代码编写 

    了解完舵机的工作原理之后,就可以选择好需要的舵机,进行代码的编写了。

1、舵机选择

    本项目中,我对舵机的需求是重量轻,体积小,力矩不需要太大,因此我使用的是常用的Sg90。

 2、硬件连接

    舵机连接

    红线---------VCC
    棕线---------GND
    橙线---------信号线
    在本程序中,我使用的是通用定时器GPTM1,通道CH0,对应复用引脚为PC10,因此信号线与PC10相连。

3、代码编写

    HT32与STM32的程序思路相类似,可以在一定程度上参考STM32的程序。

    1、定时器初始化

    pwm.h

#ifndef _STEERING_H
#define _STEERING_H#include "ht32f5xxxx_usart.h"
#include "ht32_board_config.h"
#include "delay.h"void PWM_Init(void);#endif

    pwm.c

/**************************************************************************
* @brief 定时器初始化函数
* @param void
* @retval None
*************************************************************************/
void PWM_Init(void)
{{ /* Enable peripheral clock                                                                        */CKCU_PeripClockConfig_TypeDef CKCUClock = {{ 0 }};CKCUClock.Bit.PC               = 1;    //PC端口时钟开启CKCUClock.Bit.GPTM1            = 1;    //通用定时器GPTM1时钟开启CKCUClock.Bit.AFIO             = 1;    //复用功能时钟开启CKCU_PeripClockConfig(CKCUClock, ENABLE);}{ /* Configure AFIO mode as TM function                                                            */AFIO_GPxConfig(GPIO_PC, AFIO_PIN_10, AFIO_MODE_4);    //将GPTM1_CH0映射到PC10}{ /* Time base configuration                                                                            */TM_TimeBaseInitTypeDef TimeBaseInit;TimeBaseInit.Prescaler = 4800 - 1;    //Timer Clock = CK_AHB/HTCFG_PWM_TM_PRESCALERTimeBaseInit.CounterReload = 200 - 1;TimeBaseInit.RepetitionCounter = 0;TimeBaseInit.CounterMode = TM_CNT_MODE_UP;    //设置为向上计数TimeBaseInit.PSCReloadTime = TM_PSC_RLD_IMMEDIATE;    //立即重装载TM_TimeBaseInit(HT_GPTM1, &TimeBaseInit);TM_CRRPreloadCmd(HT_GPTM1, ENABLE);    //使能CRR寄存器预装载值/* Clear Update Event Interrupt flag since the "TM_TimeBaseInit()" writes the UEV1G bit */TM_ClearFlag(HT_GPTM1, TM_FLAG_UEV);}{ /* Channel n output configuration                                                        */TM_OutputInitTypeDef OutInit;OutInit.Channel = TM_CH_0;OutInit.OutputMode = TM_OM_PWM1;        //模式设置为PWM1,不同的模式可以查看数据手册OutInit.Control = TM_CHCTL_ENABLE;      //GPTM通道使能OutInit.ControlN = TM_CHCTL_DISABLE;                  //与上一行功能相同,可以不写OutInit.Polarity = TM_CHP_INVERTED;     //GPTM通道极性为高电平有效OutInit.PolarityN = TM_CHP_NONINVERTED;               //与上一行功能相同,可以不写       OutInit.Compare = 195;                  //初始角度为0°/* Compare值的设置PWM基本原理可以简单理解为,计数器CNT的值与重装载CRR的值相比较,在向上计数模式下,CNT的值=CRR的值时,通道电平为有效电平,即为高电平,其余时间为低电平;若想要舵机转动,就要控制占空比,此处我的CRR值为200,0°对应占空比为2.5%,故compare的值为200-200*2.5% = 195;若想转动90°,则compare的值为200-200*7.5% = 185 */TM_OutputModeConfig(HT_GPTM1, TM_CH_0, TM_OM_PWM1);TM_OutputInit(HT_GPTM1,&OutInit);}//PWM ENABLETM_Cmd(HT_GPTM1, ENABLE);    //最后一定要记得使能GPTM
}

2、主函数调用

main.c

#include "ht32.h"
#include "ht32_board.h"
#include "delay.h"
#include "time.h"
#include "steering.h"int main()
{
//	MY_USART_Init();    		 //USART1 Initial
//	USART0_Init();   		   	 //USART0 Initial
//	ESP8266_Start_Trans();       //ESP8266 InitialPWM_Init();              //PWM Initial    while(1){TM_SetCaptureCompare(HT_GPTM1,TM_CH_0,195);//对应0度delay_ms(1000);TM_SetCaptureCompare(HT_GPTM1,TM_CH_0,185); //对应90度delay_ms(1000);}
}

    在主函数中通过函数不断改变PWM的占空比即可实现舵机的转动。

效果演示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/53371.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

视频剪辑软件,AI智能合并随机生成新视频,并设置视频数量以及时长

最近有很多人在问,怎么随机生成多个视频最快,其实你离成为剪辑达人就只差一个剪辑方法,今天小编就给大家分享一个新的技巧,下面就以快速智能合并,随机生成多个新视频为例,一起来学习一下。 所需工具 多段视…

手机如何一键智能自动剪辑短视频

手机如何一键智能自动剪辑短视频,首先我们在手机上安装并打开“王者剪辑app”,进入智能创作模块中的“创作机器人”, 接着导入视频源素材,输入视频文案内容,配置相关参数和配音类型,然后点击界面右上角的…

深度揭秘,Android应用是如何安装到手机上的

/ 今日科技快讯 / ChatGPT 的横空出世,在业界掀起了惊涛骇浪。专家表示,ChatGPT 和相关人工智能技术可能会威胁到一些工作岗位,尤其是白领工作。 自去年11月发布以来,新型聊天机器人模型 ChatGPT 已经被用于各种各样的工作&am…

chatgpt赋能python:Python模拟点击安卓屏幕完整教程

Python模拟点击安卓屏幕完整教程 随着移动设备的日益普及,安卓系统成为了全球最受欢迎的操作系统之一。而在开发安卓应用时,我们经常需要模拟点击安卓屏幕进行测试和调试。本文将详细介绍如何使用Python模拟点击安卓屏幕。 1. 安装ADB工具 ADB&#x…

必看!TIKTOK TSP跨境服务商入驻详细流程

TIKTOK TSP跨境服务商如何赚钱?需要哪些资质和能力? 跨境电商领域近期最热门的话题,离不开在海外大火的TIKTOK。相较于国内抖音已经相当成熟的电商板块,海外TIKTOK电商直播才刚刚起步,所以,申请找专业团队&…

马来西亚美妆快速增长,卖家如何借力TikTok打造跨境电商爆品?

随着颜值经济的崛起,美妆个护产品正逐渐向“必需品”升级,其中值得注意的是,马来西亚的美妆个护市场正在不断增长。 根据EchoTik的统计,美妆个护是马来西亚站点所有 TikTok Shop 品类中最受欢迎的,平均价格为10.7 美元…

音视频出海,如何乘风破浪?

点击上方“LiveVideoStack”关注我们 策划:Alex、包研 编辑:Alex 出海 年终访谈 #003# 编者按:最近几年,以TikTok为首的泛娱乐出海企业的成功让大家看到了中国之外的巨大市场和机会。但面对紧张的国际形势,严格的监管措…

应用出海活跃,开发教程

移动应用行业在国内显现出用户增量放缓的趋势,多种类型的应用渗透率也渐趋饱和。随着政策支持力度的加大,越来越多移动应用走向了海外市场,拓宽用户群。 根据艾瑞咨询在《2022年移动应用出海趋势洞察白皮书》中指出,游戏类占出海…

简历还能这样写——程序员

求职简历不是一份记流水账的东西,是让面试官短时间内了解你的亮点的。 大部分求职简历都 有以下几个特征: 喜欢说自己的特长、优点,面试官真的不关注你的性格,特长什么的,总不能让你当面唱一个歌吧。 还有喜欢列举一…

简历应该这么写!

很多同学刚开始找工作时,投出去很多简历,但是都石沉大海了,没有后文。之所以简历不通过,往往都是简历不够“好看”。 很多大公司HR经常一天要看几百份,甚至上千份简历,基本都是10秒内看一份简历&#xff0…

chatgpt赋能python:用Python分析微信聊天记录,挖掘更多的信息

用Python分析微信聊天记录,挖掘更多的信息 微信是一款广受欢迎的社交软件,许多人在日常生活中都会使用它来和朋友、同事进行沟通。而微信聊天记录中潜藏着许多有趣的信息,比如谁是你最常联系的好友、聊天时间的分布、聊天内容的情感倾向等等…

中国安卓智能手机公司小米收集用户数据

根据F-Secure的研究,来自于中国的智能手机供应商小米收集并发送用户信息到后台服务器。 该安全公司发现了小米手机数据收集,在调查中这款手机引起了普遍的担忧。 小米手机已经在过去的几个月里为他们的便宜,物有所值的手机和公司动态相关新闻…

Android基础之intent传值方法和传递大量数据方案

https://blog.csdn.net/chenliguan/article/details/47188243 1 Android之intent传值的三种方法 (1) startActivity(); (2) startActivityForResult(); (3)3 调用在下个activity自定义的方法"actionS…

获取手机APP对网络访问数据的一个思路

工作中要用到一款android下的APP软件,其中有一个功能是查看课件的pdf资料,每个资料后面还有一个下载的按钮,但是都是不可用,注释写到不提供下载,估计是考虑到版权问题吧。但真的非常需要其中的资料,怎么办呢…

intent传递较大数据的解决和intent不能传递较大数据的原因

一、首先提供需要在activity之间用intent传递较大数据的方法。intent不能传递较大数据,需要传递数据的时候,写一个操作类: public class DataHelper {private static final DataHelper helper new DataHelper();public static DataHelper ge…

小米手机,程序在后台运行一段时间之后,访问不了网络

小米手机,程序后台运行一段时间后,程序访问不了网络,访问超时,锁屏不锁屏都是一样,(不知道QQ为啥可以收到) 暂时找到的解决方案: 小米手机--设置--其他高级设置--电源和性能--神隐…

OpenAI API最新速查表;轻松制作数字分身;8个ChatGPT「作弊」策略;微软提示工程官方教程 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 The OpenAI API in Python 最新速查表 ShowMeAI知识星球资源编码:R102 大语言模型的发展,正在推动 OpenAI API…

国外电子测量技术投稿经验

国外电子测量技术和电子测量技术是同一系列,2020年入选北大中文核心期刊,相对来说比较好中,审稿专家非常亲和,提出的问题都挺好回复和解答。审稿周期不到两个月,编辑退修以后就特别快了。 以下是投稿过程&#xff1a…

小红书用户消费心理及种草价值:后疫情时代消费心理研究

省时查报告-专业、及时、全面的行研报告库 省时查方案-专业、及时、全面的营销策划方案库 【免费下载】2023年2月份热门报告盘点 ChatGPT种子用户招募(无限制次数直接使用) 小红书整体框架及玩法大全 小红书爆文笔记进阶指南 罗振宇2023年跨年演讲PPT原稿…

Linux的ip经常变动的解决方法

第一步:查看ip 通过ip addr命令查询本机IP地址,可以看出是ens33网卡   如果我们不设置固定的ip地址,那么IP地址就会自动变更,所以我们通过编辑配置文件将IP地址写死 第二步: 编辑 ens33 网卡的网络配置文件 在Linu…