文章目錄
- 前言
- 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 INITGPIO_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等。應用時將參數傳進去即可。