欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于GD32驅(qū)動(dòng)BLDC電機(jī)(1)定時(shí)器和PWM

冬至子 ? 來源:極術(shù)社區(qū) ? 作者:電子爛人 ? 2023-12-13 15:20 ? 次閱讀

心血來潮買了幾個(gè)BLDC電機(jī),準(zhǔn)備這次就使用蘋果派這塊板子試一下BLDC電機(jī)的控制。

蘋果派這塊板子的書籍和例程很多,要驅(qū)動(dòng)電機(jī)首先要配置定時(shí)器,產(chǎn)生可控的PWM脈沖。

趁快遞還沒到,先學(xué)習(xí)一下PWM的生成方式:

按照例程和書籍配置寄存器TIMER2:

static  void ConfigTimer2(unsigned short arr, unsigned short psc)
{
  timer_parameter_struct timer_initpara;               //timer_initpara用于存放定時(shí)器的參數(shù)

  //使能RCU相關(guān)時(shí)鐘 
  rcu_periph_clock_enable(RCU_TIMER2);                 //使能TIMER2的時(shí)鐘

  timer_deinit(TIMER2);                                //設(shè)置TIMER2參數(shù)恢復(fù)默認(rèn)值
  timer_struct_para_init(&timer_initpara);             //初始化timer_initpara

  //配置TIMER2
  timer_initpara.prescaler         = psc;              //設(shè)置預(yù)分頻器值
  timer_initpara.counterdirection  = TIMER_COUNTER_UP; //設(shè)置向上計(jì)數(shù)模式
  timer_initpara.period            = arr;              //設(shè)置自動(dòng)重裝載值
  timer_initpara.clockdivision     = TIMER_CKDIV_DIV1; //設(shè)置時(shí)鐘分割
  timer_init(TIMER2, &timer_initpara);                 //根據(jù)參數(shù)初始化定時(shí)器

  timer_interrupt_enable(TIMER2, TIMER_INT_UP);        //使能定時(shí)器的更新中斷
  nvic_irq_enable(TIMER2_IRQn, 1, 0);                  //配置NVIC設(shè)置優(yōu)先級(jí)
  timer_enable(TIMER2);                                //使能定時(shí)器
}

配置PWM輸出模式:

static void ConfigTIMER1ForPWMPB10(unsigned short arr, unsigned short psc)
{
  //定義初始化結(jié)構(gòu)體變量
  timer_oc_parameter_struct timer_ocinitpara;
  timer_parameter_struct timer_initpara;
  
  rcu_periph_clock_enable(RCU_GPIOB);    //使能GPIOB時(shí)鐘
  rcu_periph_clock_enable(RCU_TIMER1);   //使能TIMER1時(shí)鐘
  rcu_periph_clock_enable(RCU_AF);       //使能TIMER1時(shí)鐘
  
  gpio_pin_remap_config(GPIO_TIMER1_PARTIAL_REMAP1, ENABLE);  //TIMER1部分重映射TIMER1_CH2- >PB10
  gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_10);  //設(shè)置GPIO輸出模式及速度

  timer_deinit(TIMER1);                                  //將TIMER1配置為默認(rèn)值
  timer_struct_para_init(&timer_initpara);               //timer_initpara配置為默認(rèn)值
    
  timer_initpara.prescaler         = psc;                //設(shè)置預(yù)分頻值
  timer_initpara.alignedmode       = TIMER_COUNTER_EDGE; //設(shè)置對(duì)齊模式
  timer_initpara.counterdirection  = TIMER_COUNTER_UP;   //設(shè)置向上計(jì)數(shù)
  timer_initpara.period            = arr;                //設(shè)置重裝載值
  timer_initpara.clockdivision     = TIMER_CKDIV_DIV1;   //設(shè)置時(shí)鐘分頻因子
  timer_initpara.repetitioncounter = 0;                  //設(shè)置重復(fù)計(jì)數(shù)值
  timer_init(TIMER1, &timer_initpara);                   //初始化定時(shí)器
    
  //將結(jié)構(gòu)體參數(shù)初始化為默認(rèn)值
  timer_channel_output_struct_para_init(&timer_ocinitpara);  
    
  timer_ocinitpara.outputstate  = TIMER_CCX_ENABLE;                    //設(shè)置通道輸出狀態(tài)
  timer_ocinitpara.outputnstate = TIMER_CCXN_DISABLE;                  //設(shè)置互補(bǔ)通道輸出狀態(tài)
  timer_ocinitpara.ocpolarity   = TIMER_OC_POLARITY_HIGH;              //設(shè)置通道輸出極性
  timer_ocinitpara.ocnpolarity  = TIMER_OCN_POLARITY_HIGH;             //設(shè)置互補(bǔ)通道輸出極性
  timer_ocinitpara.ocidlestate  = TIMER_OC_IDLE_STATE_LOW;             //設(shè)置空閑狀態(tài)下通道輸出極性
  timer_ocinitpara.ocnidlestate = TIMER_OCN_IDLE_STATE_LOW;            //設(shè)置空閑狀態(tài)下互補(bǔ)通道輸出極性
  timer_channel_output_config(TIMER1, TIMER_CH_2, &timer_ocinitpara);  //初始化結(jié)構(gòu)體
     
  timer_channel_output_pulse_value_config(TIMER1, TIMER_CH_2, 0);                   //設(shè)置占空比
  timer_channel_output_mode_config(TIMER1, TIMER_CH_2, TIMER_OC_MODE_PWM0);         //設(shè)置通道比較模式
  timer_channel_output_shadow_config(TIMER1, TIMER_CH_2, TIMER_OC_SHADOW_DISABLE);  //失能比較影子寄存器
  timer_auto_reload_shadow_enable(TIMER1);                                          //自動(dòng)重載影子使能 

  timer_enable(TIMER1);  //使能定時(shí)器
}

void  InitPWM(void)
{
  ConfigTIMER1ForPWMPB10(599, 999);  //配置TIMER1,120000000/(999+1)/(599+1)=200Hz
}

void SetPWM(signed short val)
{
  s_iDutyCycle = val;                   //獲取占空比的值
  
  timer_channel_output_pulse_value_config(TIMER1, TIMER_CH_2, s_iDutyCycle);  //設(shè)置占空比
}

設(shè)置主函數(shù):

#include "Main.h"
#include "gd32f30x_conf.h"
#include "SysTick.h"
#include "RCU.h"
#include "NVIC.h"
#include "Timer.h"
#include "PWM.h"

int main(void)
{
  SystemInit();      
  InitRCU();          
  InitNVIC();           
  InitTimer();         
  InitSysTick();       
  InitPWM();          
  
  SetPWM(100);
  
  while(1)
  {  
     
  }
}

KEIL中編寫好代碼后,連接板子上的GD-LINK接口
由于使用GDlink燒錄,故在"Target"標(biāo)簽頁選擇"DEBUG"為“CMSIS-DAP Debugger”
經(jīng)實(shí)測(cè)GDLINK的燒錄速度較慢,這里可以把時(shí)鐘頻率調(diào)整為10MHZ以增快燒錄速度

image.png
1702377055707.png

燒錄完成后用示波器的探頭連接PB10引腳,如圖,可以看到清晰的PWM波型

微信圖片_20231212183455.jpg

有了PWM之后,控制電機(jī)就顯得極其簡(jiǎn)單了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • PWM
    PWM
    +關(guān)注

    關(guān)注

    114

    文章

    5201

    瀏覽量

    214987
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3256

    瀏覽量

    115461
  • FreeRTOS
    +關(guān)注

    關(guān)注

    12

    文章

    484

    瀏覽量

    62422
  • BLDC電機(jī)
    +關(guān)注

    關(guān)注

    7

    文章

    215

    瀏覽量

    21619
  • gd32f303
    +關(guān)注

    關(guān)注

    4

    文章

    38

    瀏覽量

    3728
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于GD32 MCU的電機(jī)驅(qū)動(dòng)方案詳解

    兆易創(chuàng)新 GD32 MCU 在電機(jī)驅(qū)動(dòng)應(yīng)用上,經(jīng)過多年技術(shù)沉淀,在無刷電機(jī)和步進(jìn)電機(jī)的應(yīng)用中,形成自身完整可靠的解決方案,愿能為用戶提供更多
    發(fā)表于 07-03 16:43 ?7657次閱讀

    電機(jī)控制基礎(chǔ)知識(shí)1定時(shí)器基礎(chǔ)知識(shí)與PWM輸出原理

    單片機(jī)開發(fā)中,電機(jī)的控制與定時(shí)器有著密不可分的關(guān)系,無論是直流電機(jī),步進(jìn)電機(jī)還是舵機(jī),都會(huì)用到定時(shí)器,比如最常用的有刷直流
    的頭像 發(fā)表于 06-17 00:11 ?1.2w次閱讀
    <b class='flag-5'>電機(jī)</b>控制基礎(chǔ)知識(shí)<b class='flag-5'>1</b>—<b class='flag-5'>定時(shí)器</b>基礎(chǔ)知識(shí)與<b class='flag-5'>PWM</b>輸出原理

    GD32對(duì)Timer定時(shí)器原理的詳細(xì)講解

    GD32 Timr定時(shí)器看起來比較復(fù)雜啊。一看GD32E10x 的SPEC:一個(gè)高級(jí)定時(shí)器,三個(gè)通用定時(shí)器,還有一個(gè)基本
    的頭像 發(fā)表于 04-22 17:02 ?1.7w次閱讀
    <b class='flag-5'>GD32</b>對(duì)Timer<b class='flag-5'>定時(shí)器</b>原理的詳細(xì)講解

    STM32F103定時(shí)器PWM驅(qū)動(dòng)步進(jìn)電機(jī)加減速

    之前學(xué)習(xí)了定時(shí)器的一些基本知識(shí),實(shí)現(xiàn)了1ms的定時(shí),本次學(xué)習(xí)定時(shí)器PWM功能,用定時(shí)器產(chǎn)生的
    的頭像 發(fā)表于 02-28 14:25 ?7w次閱讀
    STM32F103<b class='flag-5'>定時(shí)器</b><b class='flag-5'>PWM</b><b class='flag-5'>驅(qū)動(dòng)</b>步進(jìn)<b class='flag-5'>電機(jī)</b>加減速

    GD32開發(fā)實(shí)戰(zhàn)指南(基礎(chǔ)篇) 第7章 定時(shí)器

    系統(tǒng)滴答定時(shí)器一般用來提供“心跳”作用,而GD32定時(shí)器最基本功能也是定時(shí),可以設(shè)置不同時(shí)間長(zhǎng)度的定時(shí)。
    的頭像 發(fā)表于 05-11 09:00 ?1.2w次閱讀
    <b class='flag-5'>GD32</b>開發(fā)實(shí)戰(zhàn)指南(基礎(chǔ)篇) 第7章 <b class='flag-5'>定時(shí)器</b>

    GD32開發(fā)實(shí)戰(zhàn)指南(基礎(chǔ)篇) 第8章 定時(shí)器

    Modulation” 的縮寫,簡(jiǎn)稱脈寬調(diào)制,是利用微處理的數(shù)字輸出來對(duì)模擬電路進(jìn)行控制的一種非常有效的技術(shù)。簡(jiǎn)單一點(diǎn),就是對(duì)脈沖寬度的控制。 GD32定時(shí)器除了 TIMER5 和 6(基本
    的頭像 發(fā)表于 05-12 22:14 ?8129次閱讀
    <b class='flag-5'>GD32</b>開發(fā)實(shí)戰(zhàn)指南(基礎(chǔ)篇) 第8章 <b class='flag-5'>定時(shí)器</b>

    GD32E230C8T6高級(jí)定時(shí)器timer0無法正常輸出PWM波形的原因?

    原本想用高級(jí)定時(shí)器的中央對(duì)齊計(jì)數(shù)模式來輸出SPWM波,但是TIMER0的CH0,CH1等口,都無法正常輸出PWM波形,換成普通定時(shí)器就可以了,STM32里對(duì)于高級(jí)
    發(fā)表于 07-26 06:34

    GD電機(jī)驅(qū)動(dòng)底層配置—永磁同步電機(jī)控制

    ,可使GD32F310系列廣泛應(yīng)用于永磁同步電機(jī)控制領(lǐng)域。本文將介紹應(yīng)用于電機(jī)控制時(shí),高級(jí)定時(shí)器和ADC的配置過程?! 〉讓?b class='flag-5'>驅(qū)動(dòng)配置  
    發(fā)表于 10-13 14:29

    GD32-Colibri-F207實(shí)驗(yàn)板定時(shí)器1停止

    GD32-Colibri-F207實(shí)驗(yàn)板定時(shí)器1停止,很好的GD32資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-21 14:24 ?11次下載

    電機(jī)控制基礎(chǔ)——定時(shí)器基礎(chǔ)知識(shí)與PWM輸出原理

    單片機(jī)開發(fā)中,電機(jī)的控制與定時(shí)器有著密不可分的關(guān)系,無論是直流電機(jī),步進(jìn)電機(jī)還是舵機(jī),都會(huì)用到定時(shí)器,比如最常用的有刷直流
    發(fā)表于 11-30 14:21 ?38次下載
    <b class='flag-5'>電機(jī)</b>控制基礎(chǔ)——<b class='flag-5'>定時(shí)器</b>基礎(chǔ)知識(shí)與<b class='flag-5'>PWM</b>輸出原理

    普通定時(shí)器輸出互補(bǔ)PWM帶死區(qū)

    無刷電機(jī)。這下就需要用到互補(bǔ)PWM了。然后選型的單片機(jī)只有一路高級(jí)定時(shí)器tim1,另外一個(gè)電機(jī)PWM
    發(fā)表于 12-16 16:59 ?24次下載
    普通<b class='flag-5'>定時(shí)器</b>輸出互補(bǔ)<b class='flag-5'>PWM</b>帶死區(qū)

    GD32F303固件庫開發(fā)(13)----定時(shí)器TIM捕獲PWM測(cè)量頻率與占空比

    本章配置GD32F303輸出PWM,同時(shí)使用TIM測(cè)量PWM頻率和正占空比。 查閱手冊(cè)可以得知,PB11為定時(shí)器1的通道3,讓其輸出
    的頭像 發(fā)表于 12-07 10:19 ?6286次閱讀
    <b class='flag-5'>GD</b>32F303固件庫開發(fā)(13)----<b class='flag-5'>定時(shí)器</b>TIM捕獲<b class='flag-5'>PWM</b>測(cè)量頻率與占空比

    GD32103系列電機(jī)驅(qū)動(dòng)項(xiàng)目總結(jié)

    這次使用的GD系列的芯片來做電機(jī)驅(qū)動(dòng)。然后對(duì)使用GD芯片做個(gè)總結(jié)。這次做的是一個(gè)光伏機(jī)器人項(xiàng)目。主要用在光伏板上的機(jī)器人,通過驅(qū)動(dòng)
    發(fā)表于 03-17 16:21 ?0次下載
    <b class='flag-5'>GD</b>32103系列<b class='flag-5'>電機(jī)</b><b class='flag-5'>驅(qū)動(dòng)</b>項(xiàng)目總結(jié)

    利用通用定時(shí)器輸出PWM(附示例驅(qū)動(dòng)直流電機(jī))

    上一節(jié)講述了時(shí)鐘樹和基本定時(shí)器的配置方法,本節(jié)先介紹通用定時(shí)器和基本定時(shí)器的差異,然后粗略講述PWM波原理,然后講述如何配置通用定時(shí)器,最后
    發(fā)表于 04-03 14:56 ?0次下載
    利用通用<b class='flag-5'>定時(shí)器</b>輸出<b class='flag-5'>PWM</b>(附示例<b class='flag-5'>驅(qū)動(dòng)</b>直流<b class='flag-5'>電機(jī)</b>)

    GD32 Timer定時(shí)器周期時(shí)間計(jì)算公式

    有小伙伴反饋GD32 Timer定時(shí)器的周期時(shí)間不知如何計(jì)算,今天就來安排。
    的頭像 發(fā)表于 01-22 09:53 ?2923次閱讀
    <b class='flag-5'>GD32</b> Timer<b class='flag-5'>定時(shí)器</b>周期時(shí)間計(jì)算公式