【GD32F310开发板试用】PWM 单通道输出

首发极术社区。如对兆易创新GD32F310 MCU感兴趣,欢迎添加微信 aijishu2020 加入GD32技术讨论群。

定时器和PWM产生简介及特点

高级定时器:(TIMER0)

高级定时器(TIMER0)是四通道定时器,支持输入捕获和输出比较。可以产生 PWM 信号控制电机和电源管理。高级定时器含有一个 16 位无符号计数器。高级定时器是可编程的,可以被用来计数,其外部事件可以驱动其他定时器高级定时器包含了一个死区时间插入模块,非常适合电机控制。定时器和定时器之间是相互独立,但是他们可以被同步在一起形成一个更大的定时器,这些定时器的计数器一致地增加。

  • 总通道数: 4;
  • 计数器宽度: 16位;
  • 时钟源可选:内部时钟,内部触发,外部输入,外部触发;
  • 多种计数模式:向上计数,向下计数和中央计数;
  • 正交编码器接口:被用来追踪运动和分辨旋转方向和位置;
  • 霍尔传感器接口:用来做三相电机控制;
  • 可编程的预分频器: 16位,运行时可以被改变;
  • 每个通道可配置:输入捕获模式,输出比较模式,可编程的PWM模式,单脉冲模式;
  • 可编程的死区时间;
  • 自动重装载功能;
  • 可编程的计数器重复功能;
  • 中止输入功能;
  • 中断输出和DMA请求:更新事件,触发事件,比较/捕获事件和中止事件;
  • 多个定时器的菊链使得一个定时器可以同时启动多个定时器;
  • 定时器的同步允许被选择的定时器在同一个时钟周期开始计数;
  • 定时器主/从模式控制器;

通用定时器L0:(TIMER1、TIMER2)

通用定时器 L0 是 4 通道定时器,支持输入捕获,输出比较,产生 PWM 信号控制电机和电源
管理。通用定时器 L0 计数器是 16 位无符号计数器。
通用定时器 L0 是可编程的,可以被用来计数,其外部事件可以驱动其他定时器。
定时器和定时器之间是相互独立,但是他们可以被同步在一起形成一个更大的定时器,这些定
时器的计数器一致地增加。

  • 总通道数: 4;
  • 计数器宽度: 16位(TIMER2) , 32位(TIMER1) ;
  • 时钟源可选:内部时钟,内部触发,外部输入,外部触发;
  • 多种计数模式:向上计数,向下计数和中央计数;
  • 正交编码器接口:被用来追踪运动和分辨旋转方向和位置;
  • 霍尔传感器接口:用来做三相电机控制;
  • 可编程的预分频器: 16位,运行时可以被改变;
  • 每个通道可配置:输入捕获模式,输出比较模式,可编程的PWM模式,单脉冲模式;
  • 自动重装载功能;
  • 中断输出和DMA请求:更新事件,触发事件,比较/捕获事件;
  • 多个定时器的菊链使得一个定时器可以同时启动多个定时器;
  • 定时器的同步允许被选择的定时器在同一个时钟周期开始计数;
  • 定时器主/从模式控制器。

通用定时器L2:(TIMER13)

通用定时器 L2 (TIMERx, x=13) 是单通道定时器,支持输入捕获和输出比较,产生 PWM 信号控制电机和电源管理。通用定时器 L2 含有一个 16 位无符号计数器。通用定时器 L2 是可编程的,可以被用来计数,其外部事件可以驱动其他定时器

  • 总通道数: 1;
  • 计数器宽度: 16位;
  • 时钟源可选:内部时钟;
  • 计数模式:向上计数;
  • 可编程的预分频器: 16位,运行时可以被改变;
  • 每个通道可配置:输入捕获模式,输出比较模式,可编程的PWM模式;
  • 自动重装载功能;
  • 中断输出:更新事件,比较/捕获事件;

通用定时器L3:(TIMER14)

通用定时器 L3(TIMER14)是两通道定时器,支持输入捕获和输出比较。可以产生 PWM 信号控制电机和电源管理。通用定时器 L3 含有一个 16 位无符号计数器。
通用定时器 L3 是可编程的,可以被用来计数,其外部事件可以驱动其他定时器
通用定时器 L3 包含了一个死区时间插入模块,非常适合电机控制。
定时器和定时器之间是相互独立,但是他们可以被同步在一起形成一个更大的定时器,这些定时器的计数器一致地增加。

  • 总通道数: 2;
  • 计数器宽度: 16位;
  • 时钟源可选:内部时钟,内部触发,外部输入;
  • 计数模式:向上计数;
  • 可编程的预分频器: 16位,运行时可以被改变;
  • 每个通道可配置:输入捕获模式,输出比较模式,可编程的PWM模式,单脉冲模式;
  • 可编程的死区时间;
  • 自动重装载功能;
  • 可编程的计数器重复功能;
  • 中止输入功能;
  • 中断输出和DMA请求:更新事件,比较/捕获事件和中止事件;
  • 多个定时器的菊链使得一个定时器可以同时启动多个定时器;
  • 定时器的同步允许被选择的定时器在同一个时钟周期开始计数;
  • 定时器主/从模式控制器。

通用定时器 L4(TIMER15,TIMER16)

通用定时器 L4(TIMER15/16)是单通道定时器,支持输入捕获和输出比较。可以产生 PWM
信号控制电机和电源管理。通用定时器 L4 含有一个 16 位无符号计数器。
通用定时器 L4 是可编程的,可以被用来计数,其外部事件可以驱动其他定时器
通用定时器 L4 包含了一个死区时间插入模块,非常适合电机控制。

  • 总通道数: 1;
  • 计数器宽度: 16位;
  • 时钟源可选:内部时钟;
  • 计数模式:向上计数;
  • 可编程的预分频器: 16位,运行时可以被改变;
  • 每个通道可配置:输入捕获模式,输出比较模式,可编程的PWM模式,单脉冲模式;
  • 可编程的死区时间;
  • 自动重装载功能;
  • 可编程的计数器重复功能;
  • 中止输入功能;
  • 中断输出和DMA请求:更新事件,比较/捕获事件和中止事件;

基本定时器(TIMER5)

基本定时器(TIMER5) 包含一个无符号 16 位计数器。可以被用作通用定时器和为 DAC (数字到模拟转换器) 提供时钟。基本定时器可以配置产生 DMA 请求, TRGO 触发连接到 DAC。

  • 计数器宽度: 16位;
  • 时钟源只有内部时钟;
  • 计数模式:向上计数;
  • 可编程的预分频器: 16位,运行时可以被改变;
  • 自动重装载功能;
  • 中断输出和DMA请求:更新事件;

开发环境&参考文档

  • Keil-MDK 5.34
  • Windows10
  • 固件库-GD32F3x0_Firmware_Library_V2.2.0
  • GD32F310xx-数据手册-Rev1.1
  • GD32F3x0-用户手册-Rev2.5
  • GD32F3x0-固件库使用指南-Rev1.2

代码部分

根据定时器的简介及特点大致了解到

  • TIMER0、TIMER14、TIMER15、TIMER16 这四个定时器适合做电机控制(带死区插入功能)
  • TIMER0、TIMER1 TIMER2 这三个定时器具有编码器的接口,其中 TIMER2、TIMER3 还具有霍尔的接口

这里我们使用 TIMER13 配置输出单通道 PWM (端口为 PA7)

pwm.h 文件

#ifndef _PWM_H_
#define _PWM_H_

#include "gd32f3x0.h"

void HW_PWMInit(void);

#endif

pwm.c 文件

#include "pwm.h"


void HW_PWMInit(void)
{
	//其中PA7 和 PB1 具有 TIMER13 的通道0 功能
	timer_parameter_struct Timer_ParamType;
	timer_oc_parameter_struct Timer_OC_ParamType;
	
	rcu_periph_clock_enable(RCU_GPIOA);//启用外设时钟功能
	rcu_periph_clock_enable(RCU_TIMER13);
	
	
	gpio_af_set(GPIOA,GPIO_AF_4,GPIO_PIN_7);//端口复用为TIMER13_CH0模式
	
	gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_7);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7);
    gpio_bit_set(GPIOA, GPIO_PIN_7);
	
	
	timer_internal_clock_config(TIMER13);
	timer_deinit(TIMER13);
	
	timer_channel_output_mode_config(TIMER13,TIMER_CH_0,TIMER_OC_MODE_PWM0);
	timer_auto_reload_shadow_enable(TIMER13);
	
	Timer_OC_ParamType.ocidlestate = TIMER_OC_IDLE_STATE_HIGH;//空闲时通道输出极性
	Timer_OC_ParamType.ocnidlestate = TIMER_OCN_IDLE_STATE_LOW;//空闲时互补通道输出极性
	Timer_OC_ParamType.ocnpolarity = TIMER_OCN_POLARITY_HIGH;//互补通道输出极性
	Timer_OC_ParamType.ocpolarity = TIMER_OC_POLARITY_HIGH;//通道输出极性
	Timer_OC_ParamType.outputnstate = TIMER_CCXN_DISABLE;//禁用互补通道输出
	Timer_OC_ParamType.outputstate = TIMER_CCX_ENABLE;//使能通道输出
	timer_channel_output_config(TIMER13,TIMER_CH_0,&Timer_OC_ParamType);
	
	Timer_ParamType.alignedmode = TIMER_COUNTER_EDGE;//配置为边沿对其模式
	Timer_ParamType.clockdivision = TIMER_CKDIV_DIV2;//配置死区时间和采样时钟(DTS)之间的分频系数
	Timer_ParamType.counterdirection = TIMER_COUNTER_UP;//配置计数方向为向上计数
	Timer_ParamType.period = 1000-1;//周期
	Timer_ParamType.prescaler = 72-1;//预分频
	Timer_ParamType.repetitioncounter = 1;
	timer_init(TIMER13,&Timer_ParamType);
	
	timer_channel_output_pulse_value_config(TIMER13, TIMER_CH_0, 500-1);//比较寄存器的数值
	
	timer_enable(TIMER13);
}

PWM 波形

PWM 计数频率:72MHz/Timer_ParamType.prescaler = 1MHz
PWM 周期:1MHz/Timer_ParamType.period = 1KHz
PWM 占空比:比较寄存器的值/Timer_ParamType.period = 50%

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UBXXUamd-1649928609932)(/img/bVbusz)]

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt QGC 4.2 是一个图形用户界面开发框架,用于创建功能丰富且可自定义的应用程序。要修改Qt QGC 4.2界面,你可以按照以下步骤进行: 1. 打开Qt QGC 4.2源代码。可以通过Git克隆Qt QGC 4.2的存储库,或者从官方网站上下载源代码。 2. 找到需要修改的界面文件。Qt QGC 4.2使用Qt Quick作为默认的用户界面技术,所以界面文件通常以.qml文件的形式存在。根据你想要修改的部分,找到对应的.qml文件。 3. 使用Qt Creator打开.qml文件。Qt Creator是Qt官方提供的一个集成开发环境,用于图形界面和应用程序的开发。 4. 在.qml文件中进行修改。根据你的需求,可以通过修改.qml文件来改变界面的布局、颜色、字体等。你可以修改元素的属性值、添加新的元素、删除不需要的元素等。 5. 保存修改并重新编译应用程序。在完成界面修改后,保存.qml文件并重新编译应用程序。使用Qt Creator的构建功能可以方便地进行编译和构建应用程序。 6. 运行应用程序并测试修改。启动应用程序并测试修改后的界面。确保修改的界面符合预期,并且没有引入任何问题或错误。 总结,要修改Qt QGC 4.2界面,你需要找到.qml文件并使用Qt Creator进行修改。通过修改.qml文件中的属性和元素,可以改变界面的外观和行为。完成修改后,重新编译和运行应用程序,以确保修改的界面能够正常工作。希望这个回答对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值