文章目录
- 前言
- 1.设计背景
- 2.简介
- 3.如何设计控制调光的接口呢
- 4.硬件设计
- 5.软件设计
- 5.1.软件流程图
- 5.2.软件代码
- 6.小结
前言
版权归作者所有、未经允许、请勿转载。
读者对象:
本文档主要适用以下工程师:
嵌入式系统工程师
单片机软件工程师
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等。应用时将参数传进去即可。