查看: 4040|回复: 13
收起左侧

第七十二章:CH32V103应用教程——PWM输出-8路

  [复制链接]

  离线 

  • TA的每日心情
    慵懒
    2021-7-23 17:16
  • 签到天数: 17 天

    [LV.4]

    发表于 2021-5-1 00:01:07 | 显示全部楼层 |阅读模式

    有人预言,RISC-V或将是继Intel和Arm之后的第三大主流处理器体系。欢迎访问全球首家只专注于RISC-V单片机行业应用的中文网站

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    本帖最后由 草帽王子 于 2021-9-10 18:03 编辑

    在智能小车应用当中,我们通常需要使用PWM实现对电机的控制。本章教程主要使用TIM1和TIM2的共8个通道产生8路PWM输出。


    1、TIM简介及相关函数介绍

    关于TIM以及PWM的简介前面章节已经介绍,在此不再赘述。


    2、硬件设计

    本章教程使用TIM1和TIM2的共8个通道产生8路PWM输出,需要用到8个GPIO引脚,具体对应引脚见程序注释。


    3、软件设计

    本章教程主要进行简单的8路PWM输出,具体程序如下:
    pwm.h文件
    1. #ifndef __PWM_H
    2. #define __PWM_H

    3. #include "ch32v10x_conf.h"

    4. void PWM_GPIO_Configuration(void);
    5. void PWM_TIM_Configuration(void);

    6. #endif
    复制代码
    pwm.h文件主要进行函数的声明;
    pwm.c文件

    1. #include "pwm.h"

    2. //PWM输出通道对应GPIO引脚初始化配置
    3. //此处使用TIM1和TIM2,对应通道分别为下:
    4. //TIM2:CH1(PA0) CH2(PA1) CH3(PA2)  CH4(PA3)
    5. //TIM1:CH1(PA8) CH2(PA9) CH3(PA10) CH4(PA11)
    6. void PWM_GPIO_Configuration(void)
    7. {
    8.     GPIO_InitTypeDef GPIO_InitStructure;

    9.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
    10.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);    //打开管脚复用AFIO时钟
    11.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
    12.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

    13.     //此处PA9引脚既作为USART_TX,又作为TIM1_CH2,需要进行复用操作
    14.     GPIO_PinRemapConfig(GPIO_FullRemap_TIM1,ENABLE);     //更改指定管脚的映射。

    15.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_8 | GPIO_Pin_9|GPIO_Pin_10 | GPIO_Pin_11;
    16.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;      //复用推挽输出
    17.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    18.     GPIO_Init(GPIOA, &GPIO_InitStructure);

    19. }

    20. //定时器PWM输出配置
    21. void PWM_TIM_Configuration(void)
    22. {
    23.      TIM_TimeBaseInitTypeDef TIM_BaseInitStructure;
    24.      TIM_OCInitTypeDef TIM_OCInitStructure;

    25.      TIM_BaseInitStructure.TIM_Period = 1000-1;
    26.      TIM_BaseInitStructure.TIM_Prescaler = 72-1;
    27.      TIM_BaseInitStructure.TIM_ClockDivision = 0;
    28.      TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
    29.      TIM_BaseInitStructure.TIM_RepetitionCounter = 0;
    30.      TIM_TimeBaseInit(TIM1, &TIM_BaseInitStructure);

    31.      TIM_ARRPreloadConfig(TIM1, ENABLE);

    32.      TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
    33.      TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    34.      TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

    35.      TIM_OCInitStructure.TIM_Pulse = 200;
    36.      TIM_OC1Init(TIM1, &TIM_OCInitStructure);
    37.      TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);

    38.      TIM_OCInitStructure.TIM_Pulse = 400;
    39.      TIM_OC2Init(TIM1, &TIM_OCInitStructure);
    40.      TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);

    41.      TIM_OCInitStructure.TIM_Pulse = 600;
    42.      TIM_OC3Init(TIM1, &TIM_OCInitStructure);
    43.      TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);

    44.      TIM_OCInitStructure.TIM_Pulse = 800;
    45.      TIM_OC4Init(TIM1, &TIM_OCInitStructure);
    46.      TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);

    47.      TIM_BaseInitStructure.TIM_Period = 1000-1;
    48.      TIM_BaseInitStructure.TIM_Prescaler = 72-1;
    49.      TIM_BaseInitStructure.TIM_ClockDivision = 0;
    50.      TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
    51.      TIM_BaseInitStructure.TIM_RepetitionCounter = 0;
    52.      TIM_TimeBaseInit(TIM2, &TIM_BaseInitStructure);

    53.      TIM_ARRPreloadConfig(TIM2, ENABLE);

    54.      TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
    55.      TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    56.      TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

    57.      TIM_OCInitStructure.TIM_Pulse =100;
    58.      TIM_OC1Init(TIM2, &TIM_OCInitStructure);
    59.      TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);

    60.      TIM_OCInitStructure.TIM_Pulse =300;
    61.      TIM_OC2Init(TIM2, &TIM_OCInitStructure);
    62.      TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);

    63.      TIM_OCInitStructure.TIM_Pulse =500;
    64.      TIM_OC3Init(TIM2, &TIM_OCInitStructure);
    65.      TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);

    66.      TIM_OCInitStructure.TIM_Pulse =700;
    67.      TIM_OC4Init(TIM2, &TIM_OCInitStructure);
    68.      TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);

    69.      TIM_Cmd(TIM1, ENABLE);
    70.      TIM_Cmd(TIM2, ENABLE);

    71.      TIM_CtrlPWMOutputs(TIM1, ENABLE);
    72.      TIM_CtrlPWMOutputs(TIM2, ENABLE);


    73. }
    复制代码
    pwm.c文件主要进行定时器的PWM输出配置,与应用教程第八章PWM输出类似,主要进行8个通道的配置,具体过程及讲解可参考第八章。此外,此处还需要注意GPIO引脚的复用。
    main.c文件
    1. int main(void)
    2. {

    3.     Delay_Init();
    4.     //USART_Printf_Init(115200);
    5.     //printf("SystemClk:%d\r\n",SystemCoreClock);

    6.     PWM_GPIO_Configuration();
    7.     PWM_TIM_Configuration();
    8.     while(1)
    9.     {
    10.         //TIM_SetCompare1(TIM1,500);  //可对占空比进行修改
    11.     }

    12. }
    复制代码
    main.c文件主要进行函数初始化。此外,若要对PWM输出占空比进行修改,可使用TIM_SetComparex函数(x为1、2、3、4)修改占空比。


    4、下载验证

    将编译好的程序下载到开发版并复位,PWM输出波形如下:
    CH32V CH573单片机芯片-第七十二章:CH32V103应用教程——PWM输出-8路risc-v单片机中文社区(1)
    CH32V CH573单片机芯片-第七十二章:CH32V103应用教程——PWM输出-8路risc-v单片机中文社区(2)

    71、PWM输出-8路.rar
    CH32V CH573单片机芯片-第七十二章:CH32V103应用教程——PWM输出-8路risc-v单片机中文社区(3) 71、PWM输出-8路.rar (443.75 KB, 下载次数: 14)
    链接:https://pan.baidu.com/s/1K4iiv84G15E2k7itRnzndg
    提取码:tr5y
    复制这段内容后打开百度网盘手机App,操作更方便哦







    上一篇:第七十一章:CH32V103应用教程——温湿度及RTC显示
    下一篇:第七十三章:CH32V103应用教程——TIM-编码器模式
    RISCV作者优文
    全球首家只专注于RISC-V单片机行业应用的中文网站
    回复

    使用道具 举报

    RISC-V隐身侠  发表于 2021-6-29 15:18:40
    这个RISC-V 单片机 共有7个定时器,
    1个16位高级TIM1,
    3个16位通用TIM,
    2个看门狗
    1个系统时间
    全球首家只专注于RISC-V单片机行业应用的中文网站
    回复 支持 3 反对 0

    使用道具

    RISC-V隐身侠  发表于 2021-6-29 15:20:37
    RV32IMAC开源指令集,CORE MAX:80MHz,建议72MHz
    全球首家只专注于RISC-V单片机行业应用的中文网站
    回复 支持 反对

    使用道具

    RISC-V隐身侠  发表于 2021-6-29 15:29:34
    APB2-------TIM1 4个通道,CH1,CH2,CH3,CH4
    APB1-------TIM2 4个通道,CH1,CH2,CH3,CH4
    APB1-------TIM3 4个通道,CH1,CH2,CH3,CH4
    APB1-------TIM4 4个通道,CH1,CH2,CH3,CH4

    点评

    说明这个芯片能输出16路,变F变DPWM脉冲  详情 回复 发表于 2021-6-29 16:07
    全球首家只专注于RISC-V单片机行业应用的中文网站
    回复 支持 反对

    使用道具

      离线 

  • TA的每日心情
    奋斗
    2022-2-18 00:56
  • 签到天数: 16 天

    [LV.4]

    发表于 2021-6-29 15:59:00 | 显示全部楼层
    目前RISC-V-CH32V103能输出PWM脉冲的引脚有
    PA0-TIM2CH1
    PA1-TIM2CH2
    PA2-TIM2CH3
    PA3-TIM2CH4
    PA6-TIM3CH1.TIM1BKIN
    PA7-TIM3CH2,TIM1CH1N
    PA8-TIM1CH1
    PA9-TIM1CH2
    PA10-TIM1CH3
    PA11-TIM1CH4
    PA12-TIM1ETR
    PA15--TIM2CH1,TIM2ETR





    PB0-TIM3CH3,TIM1CH2N
    PB1-TIM3CH4,TIM1CH3N
    PB3--TIM2CH2
    PB4--TIM3CH1
    PB5--TIM3CH2
    PB6-TIM4CH1
    PB7-TIM4CH2
    PB8-TIM4CH3
    PB9-TIM4CH4   
    PB10-TIM2CH3
    PB11-TIM2CH4
    PB12-TIM1BKIN
    PB13-TIM1CH1N
    PB14-TIM1CH2N
    PB15-TIM1CH3N

    PC6-TIM3CH1
    PC7-TIM3CH2
    PC8-TIM3CH3
    PC9-TIM3CH4

    PD2-TIM3ETR







    全球首家只专注于RISC-V单片机行业应用的中文网站

      离线 

  • TA的每日心情
    奋斗
    2022-2-18 00:56
  • 签到天数: 16 天

    [LV.4]

    发表于 2021-6-29 16:07:26 | 显示全部楼层
    游客 223.104.160.x 发表于 2021-6-29 15:29
    APB2-------TIM1 4个通道,CH1,CH2,CH3,CH4
    APB1-------TIM2 4个通道,CH1,CH2,CH3,CH4
    APB1-------TIM3 4 ...

    说明这个芯片能输出16路,变F变DPWM脉冲

    点评

    对标STM32F103C8T6,应该输出可以输出 7(TIM1)+4(TIM2)+4(TIM3)+4(TIM4)=19路  详情 回复 发表于 2021-6-29 17:44
    全球首家只专注于RISC-V单片机行业应用的中文网站

      离线 

  • TA的每日心情
    飞起
    2022-10-5 00:04
  • 签到天数: 2 天

    [LV.1]

    发表于 2021-6-29 17:44:48 | 显示全部楼层
    孔明 发表于 2021-6-29 16:07
    说明这个芯片能输出16路,变F变DPWM脉冲

    对标STM32F103C8T6,应该输出可以输出 7(TIM1)+4(TIM2)+4(TIM3)+4(TIM4)=19路

    点评

    理论上生成4种变频,19路PWM波形[attachimg]6227[/attachimg]  详情 回复 发表于 2021-7-6 12:22
    CH32V103 RISC-V核单片机? 能输出19路高速脉冲PWM? 楼主做电机控制应用?  详情 回复 发表于 2021-6-29 17:51
    全球首家只专注于RISC-V单片机行业应用的中文网站

      离线 

  • TA的每日心情

    2022-6-26 13:17
  • 签到天数: 4 天

    [LV.2]

    发表于 2021-6-29 17:51:14 | 显示全部楼层
    JLINKv10 发表于 2021-6-29 17:44
    对标STM32F103C8T6,应该输出可以输出 7(TIM1)+4(TIM2)+4(TIM3)+4(TIM4)=19路

    CH32V103 RISC-V核单片机?
    能输出19路高速脉冲PWM?
    楼主做电机控制应用?
    全球首家只专注于RISC-V单片机行业应用的中文网站
    RISC-V隐身侠  发表于 2021-6-29 17:55:30
    JLINKv10 发表于 2021-6-29 17:44
    对标STM32F103C8T6,应该输出可以输出 7(TIM1)+4(TIM2)+4(TIM3)+4(TIM4)=19路

    这么多电机,可以做个机器人了

    点评

    做个蜘蛛机器人,或者舵机机器狗  详情 回复 发表于 2021-6-30 17:13
    全球首家只专注于RISC-V单片机行业应用的中文网站
    回复 支持 反对

    使用道具

      离线 

  • TA的每日心情

    2022-6-26 13:17
  • 签到天数: 4 天

    [LV.2]

    发表于 2021-6-30 17:13:06 全球首家专注于RISC-V单片机行业应用的中文网站 | 显示全部楼层
    游客 223.104.160.x 发表于 2021-6-29 17:55
    这么多电机,可以做个机器人了

    做个蜘蛛机器人,或者舵机机器狗

    点评

    厉害  详情 回复 发表于 2021-7-1 19:21
    全球首家只专注于RISC-V单片机行业应用的中文网站

      离线 

  • TA的每日心情
    慵懒
    2021-7-23 17:16
  • 签到天数: 17 天

    [LV.4]

     楼主| 发表于 2021-7-1 19:21:34 | 显示全部楼层
    51MCU 发表于 2021-6-30 17:13
    做个蜘蛛机器人,或者舵机机器狗

    厉害
    全球首家只专注于RISC-V单片机行业应用的中文网站

      离线 

  • TA的每日心情
    飞起
    2022-10-5 00:04
  • 签到天数: 2 天

    [LV.1]

    发表于 2021-7-6 12:22:58 | 显示全部楼层
    JLINKv10 发表于 2021-6-29 17:44
    对标STM32F103C8T6,应该输出可以输出 7(TIM1)+4(TIM2)+4(TIM3)+4(TIM4)=19路

    理论上生成4种变频,19路PWM波形
    CH32V CH573单片机芯片-第七十二章:CH32V103应用教程——PWM输出-8路risc-v单片机中文社区(4)

    点评

    有兴趣试试用这个RISC-V CH32V103 输出19路PWM  详情 回复 发表于 2021-7-6 12:24
    全球首家只专注于RISC-V单片机行业应用的中文网站

      离线 

  • TA的每日心情
    飞起
    2022-10-5 00:04
  • 签到天数: 2 天

    [LV.1]

    发表于 2021-7-6 12:24:50 | 显示全部楼层
    JLINKv10 发表于 2021-7-6 12:22
    理论上生成4种变频,19路PWM波形

    有兴趣试试用这个RISC-V CH32V103 输出19路PWM

    点评

    19路PWM+4路ADC+1路串口+1灯+1按键+1I2C[attachimg]6228[/attachimg]  详情 回复 发表于 2021-7-7 09:44
    全球首家只专注于RISC-V单片机行业应用的中文网站

      离线 

  • TA的每日心情
    飞起
    2022-10-5 00:04
  • 签到天数: 2 天

    [LV.1]

    发表于 2021-7-7 09:44:48 | 显示全部楼层
    JLINKv10 发表于 2021-7-6 12:24
    有兴趣试试用这个RISC-V CH32V103 输出19路PWM

    19路PWM+4路ADC+1路串口+1灯+1按键+1I2C
    CH32V CH573单片机芯片-第七十二章:CH32V103应用教程——PWM输出-8路risc-v单片机中文社区(5)

    全球首家只专注于RISC-V单片机行业应用的中文网站
    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    关闭

    RISC-V单片机中文网上一条 /2 下一条



    版权及免责声明|RISC-V单片机中文网 |网站地图

    GMT+8, 2024-11-26 09:32 , Processed in 0.390287 second(s), 80 queries .

    快速回复 返回顶部 返回列表