富芮坤FR800X系列之PWM输出程序应用设计

发布于:2025-02-11 ⋅ 阅读:(50) ⋅ 点赞:(0)


前言

版权归作者所有、未经允许、请勿转载。

读者对象:
本文档主要适用以下工程师:
嵌入式系统工程师
单片机软件工程师
IOT固件工程师
BLE固件工程师

相关文章
富芮坤FR800X系列之按键检测模块设计

1.设计背景

例子:用嵌入式FR800X蓝牙MCU中,设计一个PWM控制直流电机转速的应用程序。

2.简介

在实现项目开发中,许多应用场合会用户PWM控制输出。如PWM控制LED指示灯,呼吸灯,直流电机驱动等。

3.如何设计控制调光的接口呢

基于FR800X系列SDK中,如何设计控制调光的接口呢?抽象设计思考:一般设计两个函数,一个是PWM初始化LED_pwm_init(),另外一个是调节PWM等级的函数接口LED_pwm_level(),设计程序时,先将两个函数接口代码写好;接着还需要考虑,参数定义GPIO管脚作为PWM输出口、PWM时钟使能、PWM频率等。设计PWM为1KHz、输出端扣为PD1。

4.硬件设计

芯片工作在3.3V稳压电源,直流电机工作电源为5V,用低电压驱动高电压,电路关键器件:一个MOS管,D2为保护电路、R7限流电阻,R6下拉稳定三级管默认为关闭状态,P3为接电机端口,PWM控制电机电路图如下所示:
在这里插入图片描述

图4-1

5.软件设计

5.1.软件流程图

PWM初始化流程图如下:
在这里插入图片描述
图5-1

5.2.软件代码

用户程序设计需要结合SDK相关函数,文件为Driver_pwm.c和Driver_pwm.h。添加到该工程里面,相关代码如下:

///Duty: /* 0% ~ 100% */
void LED_pwm_level(uint8_t Duty)
{
    struct_PWM_DAC_Config_t DAC_Config={0};

	co_printf("SET_level:%d\r\n",Duty);
    if(Duty<=100)
    {
        DAC_Config.PulseDIV = 11;
        DAC_Config.Duty     = Duty;
        pwm_dac_config(PWM_CHANNEL_1, DAC_Config);

        pwm_output_enable(PWM_CHANNEL_1);
    }
}

void LED_pwm_init(void)
{
    // PWM gpio INIT
    GPIO_InitTypeDef GPIO_Handle={0};

    GPIO_Handle.Pin       = GPIO_PIN_1;
    GPIO_Handle.Mode      = GPIO_MODE_AF_PP;
    GPIO_Handle.Pull      = GPIO_PULLUP;
    GPIO_Handle.Alternate = GPIO_FUNCTION_6;
    gpio_init(GPIO_D, &GPIO_Handle);

    // en pwm clk enable
    __SYSTEM_PWM_CLK_ENABLE();

    struct_PWM_DAC_Config_t DAC_Config={0};

    DAC_Config.PulseDIV = 11;
    DAC_Config.Duty     = 0;
    pwm_dac_config(PWM_CHANNEL_1, DAC_Config);

    pwm_output_enable(PWM_CHANNEL_1);

    LED_pwm_level(0);
}

6.小结

PWM控制电机电路设计非常简单、实用、低成本。程序设计接口是根据用户需要实用型接口,在PWM控制调节设计一个范围如0-100、或0-1000等。应用时将参数传进去即可。


网站公告

今日签到

点亮在社区的每一天
去签到