BLE芯片PHY6222---两路PWM互补输出
生活随笔
收集整理的這篇文章主要介紹了
BLE芯片PHY6222---两路PWM互补输出
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 前言
- 處理
前言
兩路PWM驅動電機,一定情況下PHY6222存在復位且電機控制力度不足
兩路PWM波形輸出理應為異步,原因在于采用了定時不斷開啟,關閉,長時間運行會導致定時精度不準確,導致同一時間兩路都輸出高或者低時,或者高,低同步的時間長,整體電流就會變高且對應的電機轉動力度降低
處理
在配置PWM時不用定時器去延時輸出,兩路采用相反的配置互補輸出即可(附上測試demo),關鍵部分已框紅
#define PWM0_PIN P32 #define PWM1_PIN P33 #define PWM_TOP_VALUE 1000 static void pwm_test_init(void) {hal_pwm_init(PWM_CH1, PWM_CLK_DIV_16, PWM_CNT_UP, PWM_POLARITY_FALLING);hal_pwm_set_count_val(PWM_CH1, 400, PWM_TOP_VALUE);hal_pwm_open_channel(PWM_CH1, PWM1_PIN);hal_pwm_init(PWM_CH0, PWM_CLK_DIV_16, PWM_CNT_UP, PWM_POLARITY_RISING);hal_pwm_set_count_val(PWM_CH0, 400, PWM_TOP_VALUE);hal_pwm_open_channel(PWM_CH0, PWM0_PIN);hal_pwm_start();LOG("PWM init start\n"); } void chufa_P14(gpio_pin_e pin, gpio_polarity_e type) {static int cnt = 0;cnt++;LOG("P14_chufa_type==%d,cnt==%d\n", type, cnt);if(cnt % 2 == 0){pwm_test_init();}else{LOG("PWM stop\n");HAL_ENTER_CRITICAL_SECTION();*(volatile int*)0x4000E004 = 0x00;*(volatile int*)0x4000E008 = 0x00;*(volatile int*)0x4000E010 = 0x00;*(volatile int*)0x4000E014 = 0x00;HAL_EXIT_CRITICAL_SECTION();hal_pwm_destroy(PWM_CH0);hal_pwm_destroy(PWM_CH1);hal_pwm_stop();}} void anjian_pwm(void) {hal_gpio_pin_init(GPIO_P14, IE);//ê?è?hal_gpio_pull_set(GPIO_P14, STRONG_PULL_UP);hal_gpioin_register(P14, NULL, chufa_P14); } void Key_Demo_Init(uint8 task_id) {uint8_t i = 0;key_TaskID = task_id;hal_pwm_module_init();anjian_pwm(); // osal_start_reload_timer(key_TaskID,PWM_INIT,3000);} PWM_POLARITY_FALLING 1
PWM_POLARITY_RISING 0
即可輸出相反的PWM波形,注冊按鍵下降沿中斷,取余開關,兩路輸出1KHz的PWM,PWM輸出的頻率看datasheet的計算公式,波形效果如下
總結
以上是生活随笔為你收集整理的BLE芯片PHY6222---两路PWM互补输出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: XSS挑战之旅---游戏通关攻略
- 下一篇: python兔子生兔子_Python兔子