色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用STM32生成多路的PWM信號

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

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

圖片

信號頻率與周期:PWM信號頻率F與周期T的關系為 F = 1 / F,也就是說頻率和周期互為倒數。例如,我們有一個頻率為400Hz的PWM信號,那么每一個PWM周期的時間為2500us。

占空比:就是PWM方波信號高電平占整個信號周期的比例。例如:PWM周期為2500us,而每一個高電平的時長為1000us,那么占空比為1000 / 2500 = 40%;

振幅:振幅就是高低電平差,也就是我們所說的高電平的電壓,通常我們使用STM32單片機所產生的PWM信號為3.3V的PWM波,而有一些芯片和系統可能會產生5.0V或其它電壓的PWM波。

例如,我們給出兩個PWM信號的例子:

圖片

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

圖片

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

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

接下來,我們使用STM32F407來生產4路PWM信號,首先開啟TIM4和GPIOD的時鐘總線:

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

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

圖片

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

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系列,所以還需要打開這4個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);

第三步,打開配置TIM4的時鐘周期和PWM周期:

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

第四步,配置TIM4的各個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的占空比值,然后開啟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()函數,將PD12、PD13、PD14和PD15分別設置高電平時長為400us、800us、1800us和2200us。我們將程序編譯并燒錄到我們的控制模塊當中,然后使用示波器或邏輯分析儀來查看PWM的信號:

圖片

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 原理圖
    +關注

    關注

    1299

    文章

    6347

    瀏覽量

    234496
  • 單片機
    +關注

    關注

    6039

    文章

    44583

    瀏覽量

    636483
  • PWM
    PWM
    +關注

    關注

    114

    文章

    5193

    瀏覽量

    214233
  • STM32
    +關注

    關注

    2270

    文章

    10910

    瀏覽量

    356601
  • 信號
    +關注

    關注

    11

    文章

    2794

    瀏覽量

    76894
收藏 人收藏

    評論

    相關推薦

    如何使用XMC4200生成PWM

    我正在使用 XMC4200F64F256BA 微控制器。 我是 DAVE? IDE 軟件和 XMC 固件的新手。 誰能通過任何示例項目來幫助我生成 PWM 信號。 我的目標是生成 4
    發表于 01-18 08:25

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

    freertosV1生成的工程,運行是沒有問題的。不知道官方是否有這樣的升級后的注意事項,或者是模塊有沒有根據版本的不同,適配不同的代碼塊。或者是解決方法。
    發表于 03-08 06:56

    如何用stm32生成pwm同時在其pwm低電平中心觸發adc?

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

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

    關于電機庫5.0生成的工程,問個問題呀: 關于TIM1和ADC的配置,配置好后,都不調用start函數,比如PWM_Start,ADC_Start_IT。根本PWM都不輸出,ADC也不進中斷。只有調用相關的start函數,才
    發表于 04-29 08:09

    mdk5生成的bin不能用

    芯片是stm32f103,用mdk4生成bin可以使用;用mdk5生成bin,可以生成。但是下進去沒有反應。有大神知道怎么解決嗎?
    發表于 04-17 21:35

    用9263生成信號,9201采集,為什么采集不到?

    `根據NI十講視頻第三講的內容用9263生成信號,9201采集,為什么我的9201采集不了啊,是因為我的9263和9201都用的是仿真設備嗎?謝謝,求解答`
    發表于 11-21 17:09

    PWM信號控制的這個電路是否可以實現

    我是用STM32生成PWM信號來控制該電路,想在輸出端輸出0-5V的電壓,請問這個電路可以實現嗎?
    發表于 12-26 10:23

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

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

    STM32高級定時器TIM1生成互補PWM硬件

    STM32高級定時器TIM1生成互補PWM硬件:stm32f103zet6開發工具:Keil uVision V5.26.2.0下載調試工具:J-Link最近在研究三相無刷電機FOC控
    發表于 08-10 06:56

    用TIM1生成PWM驅動舵機

    一、問題最近做了下門禁系統用到舵機,但是用TIM1生成PWM驅動舵機時,發現給出命令后,要等一會兒舵機才能響應轉動。于是四處找問題,終于在網上找到一些大神的結論,在這里做下記錄,也希望幫到遇到同樣問題的人。...
    發表于 08-16 08:44

    STM32多路PWM信號頻率如何檢測?

    頻率檢測的原理是什么?STM32多路PWM信號頻率如何檢測?
    發表于 02-14 07:32

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

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

    怎么用STM32F1生成一個11位60K的PWM

    怎么用STM32F1生成一個11位60K的PWM
    發表于 10-15 13:26

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

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

    PWM信號生成方法 PWM調制原理講解

    PWM(脈沖寬度調制,Pulse Width Modulation)是一種重要的模擬信號電平數字編碼方法,在電子技術和控制領域具有廣泛應用。以下是對PWM信號
    的頭像 發表于 11-28 16:34 ?1569次閱讀
    主站蜘蛛池模板: 奇米色偷偷| 绝逼会被锁| 久久综合老色鬼网站| 亚州AV人片一区二区三区99久| vagaa哇嘎黄短片| 暖暖日本在线手机免费完整版| 在线中文字幕亚洲日韩| 久久久精品久久久久三级| 亚洲野狼综合网站| 精品视频在线观看视频免费视频| 亚洲国产精品久久精品成人网站| 国产精品久久久久一区二区三区| 涩涩在线观看免费视频| 俄罗斯aaaaa一级毛片| 色婷婷国产精品视频一区二区三区| 超碰在线视频公开| 手机在线观看你懂的| 国产精品久久久久久精品... | 中文字幕无码他人妻味| 黑人性xxx| 久久资源365| 97久久精品视频| 男男校园园bl文全肉高h寝室| 99热免费精品店| 欧美一级久久久久久久久大| 成人免费在线观看| 胸太大被男同桌吃好爽| 精品无码人妻一区二区免费AV| 中文字幕人成乱码熟女APP| 嫩草影院永久在线一二三四| 把英语老师强奷到舒服动态图 | 果冻传媒视频在线播放 免费观看 果冻传媒视频在线播放 | 久久久久综合网| 伊人狼人久久精品热9| 和尚轮流澡到高潮H| 在线亚洲视频无码天堂| 女配穿书病娇被强啪h| 俄罗斯美女z0z0z0在线| 亚洲国产在线精品国| 久久天堂成人影院| 超碰人热人人热人人看|