一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

使用STM32生成多路的PWM信號(hào)

CHANBAEK ? 來(lái)源:編程外星人 ? 作者:怪蛙 ? 2023-07-26 14:42 ? 次閱讀

我們可以使用STM32來(lái)生成多路的PWM信號(hào)。首先我們來(lái)了解一下什么是PWM信號(hào),PWM的全稱為Pulse width modulation,即脈沖寬度調(diào)制,我們通常也稱PWM信號(hào)為占空比信號(hào)。PWM信號(hào)包含3個(gè)主要屬性:占空比、頻率、振幅。

圖片

信號(hào)頻率與周期:PWM信號(hào)頻率F與周期T的關(guān)系為 F = 1 / F,也就是說(shuō)頻率和周期互為倒數(shù)。例如,我們有一個(gè)頻率為400Hz的PWM信號(hào),那么每一個(gè)PWM周期的時(shí)間為2500us。

占空比:就是PWM方波信號(hào)高電平占整個(gè)信號(hào)周期的比例。例如:PWM周期為2500us,而每一個(gè)高電平的時(shí)長(zhǎng)為1000us,那么占空比為1000 / 2500 = 40%;

振幅:振幅就是高低電平差,也就是我們所說(shuō)的高電平的電壓,通常我們使用STM32單片機(jī)所產(chǎn)生的PWM信號(hào)為3.3V的PWM波,而有一些芯片和系統(tǒng)可能會(huì)產(chǎn)生5.0V或其它電壓的PWM波。

例如,我們給出兩個(gè)PWM信號(hào)的例子:

圖片

頻率400Hz;周期2500us;占空比44%;

圖片

頻率400Hz;周期2500us;占空比8%

注意,上圖中給出的ms表示毫秒,us表示微秒(1毫秒等于1000微秒,1ms等于1000us)。

接下來(lái),我們使用STM32F407來(lái)生產(chǎn)4路PWM信號(hào),首先開(kāi)啟TIM4和GPIOD的時(shí)鐘總線:

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);

然后,我們查看控制模塊的原理圖,找到需要生成PWM信號(hào)的4個(gè)引腳:

圖片

配置PD12、PD13、PD14、PD15這4個(gè)引腳,將它們配置為推挽輸出模式:

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_Init(GPIOD, &GPIO_InitStructure);

由于我們使用的STM32F4xx系列,所以還需要打開(kāi)這4個(gè)GPIO腳的AF的PinSource功能:

GPIO_PinAFConfig(GPIOD, GPIO_PinSource12, GPIO_AF_TIM4);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource13, GPIO_AF_TIM4);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_TIM4);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_TIM4);

第三步,打開(kāi)配置TIM4的時(shí)鐘周期和PWM周期:

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Prescaler = 84 - 1;  //配置預(yù)分頻數(shù)
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //向上計(jì)數(shù)
TIM_TimeBaseStructure.TIM_Period = 2500 - 1;  //配置時(shí)鐘周期
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);

第四步,配置TIM4的各個(gè)PWM通道:

TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 0;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;


TIM_OC1Init(TIM4, &TIM_OCInitStructure);    //通道1
TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);
TIM_OC2Init(TIM4, &TIM_OCInitStructure);    //通道2
TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);
TIM_OC3Init(TIM4, &TIM_OCInitStructure);    //通道3
TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);
TIM_OC4Init(TIM4, &TIM_OCInitStructure);    //通道4
TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable);

最后,分別配置4路PWM的占空比值,然后開(kāi)啟TIM4:

TIM_SetCompare1(TIM4, 400);
TIM_SetCompare2(TIM4, 800);
TIM_SetCompare3(TIM4, 1800);
TIM_SetCompare4(TIM4, 2200);


TIM_ARRPreloadConfig(TIM4, ENABLE);
TIM_Cmd(TIM4, ENABLE);
TIM_CtrlPWMOutputs(TIM4, ENABLE);

我們使用了TIM_SetCompare1/2/3/4()函數(shù),將PD12、PD13、PD14和PD15分別設(shè)置高電平時(shí)長(zhǎng)為400us、800us、1800us和2200us。我們將程序編譯并燒錄到我們的控制模塊當(dāng)中,然后使用示波器或邏輯分析儀來(lái)查看PWM的信號(hào):

圖片

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

    關(guān)注

    1316

    文章

    6389

    瀏覽量

    238096
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6058

    文章

    44822

    瀏覽量

    644722
  • PWM
    PWM
    +關(guān)注

    關(guān)注

    116

    文章

    5315

    瀏覽量

    217356
  • STM32
    +關(guān)注

    關(guān)注

    2283

    文章

    10986

    瀏覽量

    361303
  • 信號(hào)
    +關(guān)注

    關(guān)注

    11

    文章

    2834

    瀏覽量

    77728
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何使用XMC4200生成PWM

    我正在使用 XMC4200F64F256BA 微控制器。 我是 DAVE? IDE 軟件和 XMC 固件的新手。 誰(shuí)能通過(guò)任何示例項(xiàng)目來(lái)幫助我生成 PWM 信號(hào)。 我的目標(biāo)是生成 4
    發(fā)表于 01-18 08:25

    stm32CubeMAX使用freertos V2生成的lwip與FATFS不能正常運(yùn)行如何解決?

    freertosV1生成的工程,運(yùn)行是沒(méi)有問(wèn)題的。不知道官方是否有這樣的升級(jí)后的注意事項(xiàng),或者是模塊有沒(méi)有根據(jù)版本的不同,適配不同的代碼塊?;蛘呤墙鉀Q方法。
    發(fā)表于 03-08 06:56

    如何用stm32生成pwm同時(shí)在其pwm低電平中心觸發(fā)adc?

    如何用stm32生成pwm同時(shí)在其pwm低電平中心觸發(fā)adc
    發(fā)表于 03-20 07:25

    SDK5.0生成的工程,PWM都不輸出,ADC也不進(jìn)中斷是怎么回事?

    關(guān)于電機(jī)庫(kù)5.0生成的工程,問(wèn)個(gè)問(wèn)題呀: 關(guān)于TIM1和ADC的配置,配置好后,都不調(diào)用start函數(shù),比如PWM_Start,ADC_Start_IT。根本PWM都不輸出,ADC也不進(jìn)中斷。只有調(diào)用相關(guān)的start函數(shù),才
    發(fā)表于 04-29 08:09

    mdk5生成的bin不能用

    芯片是stm32f103,用mdk4生成bin可以使用;用mdk5生成bin,可以生成。但是下進(jìn)去沒(méi)有反應(yīng)。有大神知道怎么解決嗎?
    發(fā)表于 04-17 21:35

    用9263生成信號(hào),9201采集,為什么采集不到?

    `根據(jù)NI十講視頻第三講的內(nèi)容用9263生成信號(hào),9201采集,為什么我的9201采集不了啊,是因?yàn)槲业?263和9201都用的是仿真設(shè)備嗎?謝謝,求解答`
    發(fā)表于 11-21 17:09

    PWM信號(hào)控制的這個(gè)電路是否可以實(shí)現(xiàn)

    我是用STM32生成PWM信號(hào)來(lái)控制該電路,想在輸出端輸出0-5V的電壓,請(qǐng)問(wèn)這個(gè)電路可以實(shí)現(xiàn)嗎?
    發(fā)表于 12-26 10:23

    STM32生成基本工程的方法(圖文)

    STM32生成基本工程。包括定時(shí)器、SPI、CAN、GPIO、NVIC基本配置,完成后可以閃燈運(yùn)行
    發(fā)表于 03-11 18:46

    STM32高級(jí)定時(shí)器TIM1生成互補(bǔ)PWM硬件

    STM32高級(jí)定時(shí)器TIM1生成互補(bǔ)PWM硬件:stm32f103zet6開(kāi)發(fā)工具:Keil uVision V5.26.2.0下載調(diào)試工具:J-Link最近在研究三相無(wú)刷電機(jī)FOC控
    發(fā)表于 08-10 06:56

    用TIM1生成PWM驅(qū)動(dòng)舵機(jī)

    一、問(wèn)題最近做了下門(mén)禁系統(tǒng)用到舵機(jī),但是用TIM1生成PWM驅(qū)動(dòng)舵機(jī)時(shí),發(fā)現(xiàn)給出命令后,要等一會(huì)兒舵機(jī)才能響應(yīng)轉(zhuǎn)動(dòng)。于是四處找問(wèn)題,終于在網(wǎng)上找到一些大神的結(jié)論,在這里做下記錄,也希望幫到遇到同樣問(wèn)題的人。...
    發(fā)表于 08-16 08:44

    STM32多路PWM信號(hào)頻率如何檢測(cè)?

    頻率檢測(cè)的原理是什么?STM32多路PWM信號(hào)頻率如何檢測(cè)?
    發(fā)表于 02-14 07:32

    STM32F746ZGT6生成的hex文件是否兼容STM32F756ZGT6?

    STM32F746ZGT6生成的hex文件是否兼容STM32F756ZGT6?求解
    發(fā)表于 12-12 06:29

    怎么用STM32F1生成一個(gè)11位60K的PWM?

    怎么用STM32F1生成一個(gè)11位60K的PWM
    發(fā)表于 10-15 13:26

    STM32生成互補(bǔ)PWM波(輸出前均為低電平)

    STM32生成互補(bǔ)PWM
    發(fā)表于 12-31 19:13 ?30次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>生成</b>互補(bǔ)<b class='flag-5'>PWM</b>波(輸出前均為低電平)

    PWM信號(hào)生成方法 PWM調(diào)制原理講解

    PWM(脈沖寬度調(diào)制,Pulse Width Modulation)是一種重要的模擬信號(hào)電平數(shù)字編碼方法,在電子技術(shù)和控制領(lǐng)域具有廣泛應(yīng)用。以下是對(duì)PWM信號(hào)
    的頭像 發(fā)表于 11-28 16:34 ?3728次閱讀