下面使用到的舵机控制针脚为 PA4 PA5 PA6 PA7

time.h

#ifndef _TIME_H_
#define _TIME_H_
#include "ht32f5xxxx_bftm.h"#define HTGPIO_PIN (GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7)void GPTM_PWM_init(void);
#endif

time.c

#include "time.h"
#include "delay.h"//PWM
//arr: 200-1
//psc: 4800-1
//GPIO PA4 PA5 PA6 PA7
void GPTM_PWM_init()
{TM_TimeBaseInitTypeDef TimeBaseIniture;   //结构体TM_OutputInitTypeDef   OutIniture;CKCU_PeripClockConfig_TypeDef CKCUClock = {{0}};CKCUClock.Bit.PA         = 1;       //GPIOA时钟打开CKCUClock.Bit.AFIO       = 1;       //复用时钟CKCUClock.Bit.GPTM0      = 1;CKCU_PeripClockConfig(CKCUClock, ENABLE);      //时钟使能AFIO_GPxConfig(GPIO_PA, GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, AFIO_MODE_4);              //开启复用功能GPIO_DirectionConfig(HT_GPIOA,HTGPIO_PIN,GPIO_DIR_OUT);TM_ClearFlag(HT_GPTM0, TM_FLAG_UEV);  TM_OutputStructInit(&OutIniture);    //定时器初始化TimeBaseIniture.CounterMode = TM_CNT_MODE_UP;            //边沿对齐向上模式TimeBaseIniture.CounterReload = 200-1;                       //计数重装载计数器TimeBaseIniture.Prescaler = 4800-1;                           //预分屏系数TimeBaseIniture.PSCReloadTime=TM_PSC_RLD_IMMEDIATE;    //立即重装载TM_TimeBaseInit(HT_GPTM0,&TimeBaseIniture);//  PA4OutIniture.Channel= TM_CH_0;OutIniture.Control= TM_CHCTL_ENABLE;         //GPIO使能通道OutIniture.OutputMode=TM_OM_PWM1 ;          //GPIO 通道 PWM1 输出模式 PWM2 翻转模式OutIniture.Polarity= TM_CHP_INVERTED;    //GPTO 通道极性是低电平或者下降沿   // OutIniture.Compare=200;                      // 配置占空比TM_OutputModeConfig(HT_GPTM0,TM_CH_0,TM_OM_PWM1);TM_OutputInit(HT_GPTM0,&OutIniture);// PA5OutIniture.Channel=TM_CH_1;OutIniture.Control=TM_CHCTL_ENABLE;        OutIniture.OutputMode=TM_OM_PWM1;          OutIniture.Polarity=TM_CHP_INVERTED;         //OutIniture.Compare=200;                     TM_OutputModeConfig(HT_GPTM0,TM_CH_1,TM_OM_PWM1);TM_OutputInit(HT_GPTM0,&OutIniture);// PA6OutIniture.Channel=TM_CH_2;OutIniture.Control=TM_CHCTL_ENABLE;         OutIniture.OutputMode=TM_OM_PWM1;          OutIniture.Polarity=TM_CHP_INVERTED;             //OutIniture.Compare=200;                     TM_OutputModeConfig(HT_GPTM0,TM_CH_2,TM_OM_PWM1);TM_OutputInit(HT_GPTM0,&OutIniture);//  PA7OutIniture.Channel=TM_CH_3;OutIniture.Control=TM_CHCTL_ENABLE;         OutIniture.OutputMode=TM_OM_PWM1;         OutIniture.Polarity=TM_CHP_INVERTED;       // OutIniture.Compare=200;                      TM_OutputModeConfig(HT_GPTM0,TM_CH_3,TM_OM_PWM1);TM_OutputInit(HT_GPTM0,&OutIniture);TM_IntConfig(HT_GPTM0, TM_INT_CH0CC|TM_INT_CH1CC|TM_INT_CH2CC|TM_INT_CH3CC, ENABLE);          //中断    TM_Cmd(HT_GPTM0,ENABLE);  //使能计数
}

这段代码是用来初始化HT32F52352开发板的GPTM PWM输出,包括选择使用的GPIO端口、配置GPTM定时器和GPTM输出模式。

详细注释如下:

  • TM_TimeBaseInitTypeDef和TM_OutputInitTypeDef是HT32F系列芯片定时器TM_TimeBaseInit和输出TM_OutputInit结构体的别名,定义在"ht32fxxxx_tm.h"文件中。
  • CKCU_PeripClockConfig_TypeDef是HT32F系列芯片时钟控制单元CKCU_PeripClockConfig结构体的别名,定义在"ht32fxxxx_ckcu.h"文件中。
  • CKCUClock是一个CKCU_PeripClockConfig_TypeDef类型的结构体变量,用来配置要开启的外设时钟,其中PA端口所对应的时钟和GPTM0定时器所对应的时钟都被开启。
  • CKCU_PeripClockConfig()函数用来开启或关闭外设的时钟,第一个参数为CKCU_PeripClockConfig_TypeDef类型的结构体变量,第二个参数为ENABLE或DISABLE,分别表示开启和关闭。
  • AFIO_GPxConfig()函数用来配置GPIO的复用模式,第一个参数为要配置的GPIO端口,第二个参数为要配置的GPIO引脚,第三个参数为要配置的GPIO外设模式。
  • TM_ClearFlag()函数用来清除GPTM定时器标志,第一个参数为要清除标志的GPTM定时器,第二个参数为要清除的标志位。
  • GPIO_DirectionConfig()函数用来配置GPIO端口的输入或输出模式,第一个参数为要配置的GPIO端口,第二个参数为要配置的GPIO引脚,第三个参数为GPIO_DIR_IN或GPIO_DIR_OUT,分别表示输入和输出。
  • TM_OutputStructInit()函数用来初始化TM_OutputInitTypeDef结构体变量,将其成员变量设置为默认值。
  • TimeBaseIniture结构体变量用来初始化GPTM的时间基础设置,包括计数器模式、计数器重载值和预分频器分频值。

main.c

#include "ht32.h"
#include "ht32_board.h"
#include "delay.h"
#include "time.h"void cs()
{uint8_t i = 175;for(i = 175; i<=200; i = i + 5){TM_SetCaptureCompare(HT_GPTM0,TM_CH_0,i);TM_SetCaptureCompare(HT_GPTM0,TM_CH_1,i);TM_SetCaptureCompare(HT_GPTM0,TM_CH_2,i);TM_SetCaptureCompare(HT_GPTM0,TM_CH_3,i);delay_ms(500);}i = 200;for(i = 200; i>=175; i = i - 5){TM_SetCaptureCompare(HT_GPTM0,TM_CH_0,i);TM_SetCaptureCompare(HT_GPTM0,TM_CH_1,i);TM_SetCaptureCompare(HT_GPTM0,TM_CH_2,i);TM_SetCaptureCompare(HT_GPTM0,TM_CH_3,i);delay_ms(500);}
}
int main()
{GPTM_PWM_init();while(1){cs();}
}

这段代码用来控制四个舵机,其中cs()函数通过改变PWM波的占空比来控制舵机的转动方向和角度。

详细注释如下:

  • TM_SetCaptureCompare()函数用来设置GPTM定时器的捕获比较值,第一个参数为要配置的GPTM定时器,第二个参数为要配置的GPTM输出通道,第三个参数为PWM波的占空比,取值范围是0-200,表示占空比的百分比。
  • delay_ms()函数用来延时一定的时间,第一个参数为要延时的时间,单位是毫秒。
  • cs()函数通过循环的方式来改变PWM波的占空比,让四个舵机按照一定的顺序旋转,既实现了对单个舵机的控制,也可以实现对多个舵机的同时控制。函数中先将占空比从175慢慢增加到200,然后再从200慢慢减小到175,每次改变占空比的大小为5,持续时间为500ms,可以根据实际需要来调整控制时间和
  • 舵机的五个角度分别为    175  = 180度
    • 180  = 135度
    • 185  = 90度
    • 190  = 45度
    • 195  = 0度

文中提到的延时函数附下:

HT32F52352 点灯+延时函数

HT32F52352 PWM控制舵机相关推荐

  1. python舵机控制程序_树莓派PWM控制舵机的两种方式

    PWM控制舵机简介 通常情况下,伺服电机(舵机)是由一个标准的直流系统和一个内部反馈控制装置(一个减速齿轮和电位计)来组成的.伺服电机(舵机)的主要作用是将齿轮轴旋转到一个预定义的方向上.伺服电机(舵 ...

  2. STM32通用定时器输出PWM控制舵机 —— 重装载值、比较值、当前值

    参考:stm32 定时器输出PWM原理及工作原理+控制舵机 作者:点灯小哥 发布时间: 2021-03-09 23:17:52 网址:https://blog.csdn.net/weixin_4601 ...

  3. STM32 PWM控制舵机——原理、接线、源程序

    STM32--PWM 控制舵机 通用定时输出PWM PWM的工作原理 PWM的模式 TIM_OCMode_PWM1 (边沿对齐模式) TIM_OCMode_PWM2(中央对齐模式) 占空比 舵机 实物 ...

  4. pwm控制舵机转动角度程序_01 舵机旋转控制基础

    从今天开始,我们将学习Python代码控制舵机专题.第一节课我们将学习舵机的旋转控制基础,探究180度舵机的图形化编程控制. 一.舵机 1.舵机简介 舵机也叫伺服电机,最早用于船舶上实现其转向功能,由 ...

  5. STM32超声波模块测距串口输出/通用定时器中断并输出PWM控制舵机/系统定时器延时

    参考:stm32 超声波模块 原理 实现测距 +舵机使用 作者:点灯小哥 发布时间: 2021-03-10 19:37:16 网址:https://blog.csdn.net/weixin_46016 ...

  6. micropython控制舵机,Micropython之pwm控制舵机

    Micropython的定时器Timer 舵机原理可以参考这篇文章(侵删)51单片机PWM双舵机控制详解 简单例子 from pyb import Pin, Timer p = Pin('X1') # ...

  7. 用stm32f103zet6产生6路pwm控制舵机

    舵机 舵机,网上已经有很多关于舵机介绍的文章了,这里就不再赘述.舵机主要有三根线,GND.VCC和信号线. PWM 一般的,舵机接收到的信号为50Hz,也就是周期为20ms.当高电平的脉宽在0.5ms ...

  8. pwm控制舵机转动角度程序_舵机的内部结构及工作原理

    一.舵机实物图 舵机是机器人旋转关节中的常用部件,尤其是小型机器人.其实物就像下面这张图,相信大家都不会陌生.大家一定见过春晚上哪个跳舞的小机器人,其全身各关节都是有舵机组成.我们常见到的舵机就是这个 ...

  9. STM32 PWM控制舵机

    目录 舵机简介 舵机工作原理 什么是PWM 硬件连线 代码 实现结果 总结 舵机简介 舵机是指在自动驾驶仪中操纵飞机舵面(操纵面)转动的一种执行部件.分有:①电动舵机,由电动机.传动部件和离合器组成. ...

最新文章

  1. mysql 开启远程访问
  2. Mysql数据库文件路径重置
  3. 游戏外挂设计技术探讨
  4. AB1601中使用定时器来进行延时的弊端
  5. Allegro PCB 怎么对齐元器件
  6. mysql主从和dump_MySQL主从同步--原理及实现(一)
  7. C++空间分配器简述学习笔记
  8. SQL在SQL Server中相交使用
  9. java常用的date类
  10. java配环境变量_用于 Java 开发的配置工具 Simple Configuration Facade
  11. Java画十字_用Java绘制对角线
  12. 管家婆显示服务器端没有软件狗,管家婆找不到加密狗怎么办.doc
  13. PDF迅捷转换器html网址,迅捷pdf转换成HTML转换器
  14. 计算机工作理想湿度,计算机理想的工作温度七月的盛夏,碧空中没有一丝云彩,只剩下纯(9)...
  15. Layer.js实现表格溢出内容省略号显示,悬停显示全部
  16. 小程序开发API之监听加速计wx.startAccelerometer
  17. linux查看tomcat 控制台,linux 下查看Tomcat的状态,以及开启停止服务命令
  18. 2020年笔记本电脑计算机专业,适合女生用的笔记本电脑排名2020
  19. 全球与中国回音壁市场深度研究分析报告
  20. (试除法+unordered_map+因式分解)acwing 870. 约数个数

热门文章

  1. Django支付宝自动转账功能(二)
  2. java设计模式转发_Java设计模式之《单例模式》及应用场景(转发:http://www.cnblogs.com/V1haoge/p/6510196.html)...
  3. 底层开发常用知识点积累
  4. ppt怎么让人耳目一新_哦,您认为Java很烂吗? 多么令人耳目一新
  5. 【PLM】【PDM】60页PPT终于说清了PDM和PLM的区别;智造时代,PLM系统10大应用趋势!
  6. android rgb保存图片,安卓用户当心:使用RGB色域图片可能会造成手机“变砖”
  7. csh和bash的区别
  8. ERP 和 MES 之间的联系是什么?
  9. Camunda Modeler汉化添加简体中文和繁体中文支持
  10. YOLOv7 训练报错:subprocess.CalledProcessError: Command ‘git tag‘ returned non-zero exit status 127