版本 13883fd5aef096cc1273dbaaa90ff9183f77a1e6
Changes from 13883fd5aef096cc1273dbaaa90ff9183f77a1e6 to 1122caf7910b4ad60e445097c68829a0a1578f85
---
title: Pulse-width modulation(PWM)
...
Introduction
============
又稱pulse-duration modulation(PDM),是將類比信號轉為脈波的一種技術。
為何需要PWM?雖然類比電壓可直接用來控制,但類比電路控制信號容易隨時間漂移,功耗大。
.. image:: /pwm.png
如圖所示,PWM 電路主要功能是將輸入電壓的振幅轉換成脈衝寬度。一般轉換後脈波的週期固定,脈波的占空比會依類比信號的大小而改變,可用來控制燈泡亮度、馬達轉速等等,脈波寬度越大燈泡亮度越亮、馬達轉速越快。
Implementation
==============
- 基本定时器(TIM6 和 TIM7)
- 高级控制定时器(TIM1 和 TIM8)
- 通用定时器(TIMx):具有測量輸入信號的脈衝長度、產生輸出波形和PWM的功能。
GPIO_PinAFConfig(GPIOD, GPIO_PinSource12, GPIO_AF_TIM4); //將GPIO D12腳位與TIM4做連結
-----------
- //設定LED(即Pin12 13 14 15) 用來做PWM
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //設定這些腳位PWM模式 為交流(高-低)
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
-----------
- TIM_ClockDivision //變數設定將clock做除頻
- TIM_Period //設定週期數
- TIM_Prescaler //
- TIM_OutputState //設定Pin腳可以Output
- TIM_Pulse //設定多少個脈衝以後做反應事件
- TIM_OC1Init( TIM4, &TIM_OCInitStruct ); //設定Timer4的CH1初使化
- TIM4->CCR1 //設定Timer幾個tik後發出脈衝
- CCR與Period關係示意圖在不同模式下
------------
.. image:: /1275.PNG
------------
效果呈現
Demo
============
Reference
============
http://zh.wikipedia.org/zh-tw/%E8%84%88%E8%A1%9D%E5%AF%AC%E5%BA%A6%E8%AA%BF%E8%AE%8A
http://ppt.cc/nIAF