![基于STM32的SPWM源代碼_第1頁](http://file4.renrendoc.com/view/e01de1f736877b5b3ed4d280b6a0b6c9/e01de1f736877b5b3ed4d280b6a0b6c91.gif)
![基于STM32的SPWM源代碼_第2頁](http://file4.renrendoc.com/view/e01de1f736877b5b3ed4d280b6a0b6c9/e01de1f736877b5b3ed4d280b6a0b6c92.gif)
![基于STM32的SPWM源代碼_第3頁](http://file4.renrendoc.com/view/e01de1f736877b5b3ed4d280b6a0b6c9/e01de1f736877b5b3ed4d280b6a0b6c93.gif)
![基于STM32的SPWM源代碼_第4頁](http://file4.renrendoc.com/view/e01de1f736877b5b3ed4d280b6a0b6c9/e01de1f736877b5b3ed4d280b6a0b6c94.gif)
![基于STM32的SPWM源代碼_第5頁](http://file4.renrendoc.com/view/e01de1f736877b5b3ed4d280b6a0b6c9/e01de1f736877b5b3ed4d280b6a0b6c95.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
本文格式為Word版,下載可任意編輯——基于STM32的SPWM源代碼1、TIMER輸出PWM基本概念
脈沖寬度調(diào)制(PWM),是英文“PulseWidthModulation〞的縮寫,簡稱脈寬調(diào)制,是利用微處理器的數(shù)字輸出來對模擬電路進(jìn)行控制的一種十分有效的技術(shù)。簡單一點(diǎn),就是對脈沖寬度的控制。一般用來控制步進(jìn)電機(jī)的速度等等。STM32的定時(shí)器除了TIM6和TIM7之外,其他的定時(shí)器都可以用來產(chǎn)生PWM輸出,其中高級定時(shí)器TIM1和TIM8可以同時(shí)產(chǎn)生7路的PWM輸出,而通用定時(shí)器也能同時(shí)產(chǎn)生4路的PWM輸出。1.1PWM輸出模式
STM32的PWM輸出有兩種模式,模式1和模式2,由TIMx_CCMRx寄放器中的OCxM位確定的(“110〞為模式1,“111〞為模式2)。模式1和模式2的區(qū)別如下:110:PWM模式1-在向上計(jì)數(shù)時(shí),一旦TIMx_CNTTIMx_CCR1時(shí)通道1為無效電平(OC1REF=0),否則為有效電平(OC1REF=1)。111:PWM模式2-在向上計(jì)數(shù)時(shí),一旦TIMx_CNTTIMx_CCR1時(shí)通道1為有效電平,否則為無效電平。由此看來,模式1和模式2正好互補(bǔ),互為相反,所以在運(yùn)用起來區(qū)別也并不太大。而從計(jì)數(shù)模式上來看,PWM也和TIMx在作定時(shí)器時(shí)一樣,也有向上計(jì)數(shù)模式、向下計(jì)數(shù)模式和中心對齊模式,關(guān)于3種模式的具體資料,可以查看《STM32參考手冊》的“14.3.9PWM模式〞一節(jié),在此就不詳細(xì)贅述了。1.2PWM輸出管腳
PWM的輸出管腳是確定好的,具體的引腳功能可以查看《STM32參考手冊》的“8.3.7定時(shí)器復(fù)用功能重映射〞一節(jié)。在此需要強(qiáng)調(diào)的是,不同的TIMx有分派不同的引腳,但是考慮到管腳復(fù)用功能,STM32提出了一個重映像的概念,就是說通過設(shè)置某一些相關(guān)的寄放器,來使得在其他非原始指定的管腳上也能輸出PWM。但是這些重映像的管腳也是由參考手冊給出的。譬如說TIM3的第2個通道,在沒有重映像的時(shí)候,指定的管腳是PA.7,假使設(shè)置部分重映像之后,TIM3_CH2的輸出就被映射到PB.5上了,假使設(shè)置了完全重映像的話,TIM3_CH2的輸出就被映射到PC.7上了。1.3PWM輸出信號
PWM輸出的是一個方波信號,信號的頻率是由TIMx的時(shí)鐘頻率和TIMx_ARR預(yù)分頻器所決定的,具體設(shè)置方法在前面一個學(xué)習(xí)筆記中有詳細(xì)的交代。而輸出信號的占空比則是由TIMx_CRRx寄放器確定的。其公式為“占空比=(TIMx_CRRx/TIMx_ARR)*100%〞,因此,可以通過向CRR中填入適當(dāng)?shù)臄?shù)來輸出自己所需的頻率和占空比的方波信號。
2、TIMER輸出PWM源代碼
#include\
/*Privatetypedef*/GPIO_InitTypeDefGPIO_InitStructure;
TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;TIM_OCInitTypeDefTIM_OCInitStructure;
TIM_BDTRInitTypeDefTIM_BDTRInitStructure;NVIC_InitTypeDefNVIC_InitStructure;
/*Privatedefine*//*Privatemacro*//*Privatevariables*/u16TimerPeriod=7200;u16DutyFactor=50;
/*Privatefunctionprototypes*//*Privatefunctions*/voidRCC_Configure();voidGPIO_Configure();voidTIM_Configure();voidPWM_Configure();voidNVIC_Configure();/**
*@briefMainprogram.*@paramNone*@retvalNone*/
voidRCC_Configure(){
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4|RCC_APB1Periph_TIM3,ENABLE);}
voidGPIO_Configure(){
/*GPIOA配置:通道PA.6和PA.7為輸出引腳*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,}
voidTIM_Configure(){
/*TimeBaseconfiguration這里配置的就是PWM的周期,pwm還真是比AVR的強(qiáng)勁*/TIM_TimeBaseStructure.TIM_Prescaler=0;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//計(jì)數(shù)方式
TIM_TimeBaseStructure.TIM_Period=TimerPeriod-1;TIM_TimeBaseStructure.TIM_ClockDivision=0;TIM_TimeBaseStructure.TIM_RepetitionCounter=0;TIM_TimeBaseInit(TIM3,
TIM_DeInit(TIM4);//這邊是普通定時(shí)器的初始化和中斷申請TIM_TimeBaseStructure.TIM_Period=1;//自動重裝載寄放器的值TIM_TimeBaseStructure.TIM_Prescaler=3599;//時(shí)鐘預(yù)分頻數(shù)
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;//采樣分頻TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//計(jì)數(shù)方式TIM_TimeBaseInit(TIM4,
TIM_ClearFlag(TIM4,TIM_FLAG_Update);//清除溢出中斷標(biāo)志
TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);//計(jì)數(shù)溢出時(shí)觸發(fā)中斷}
voidPWM_Configure(){
/*通道1,2和3配置在PWM模式*/
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;TIM_OCInitStructure.TIM_Pulse=DutyFactor*7200/100;//設(shè)置占空比
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//這里的4行代碼就是設(shè)置PWM的空閑電平、波形方式的!一開始自己一不防備搞成了都高的死區(qū),這里是都低電平的死區(qū)~TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_High;TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Set;TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCIdleState_Reset;TIM_OC1Init(TIM3,
TIM_OC2Init(TIM3,//初始化兩組互補(bǔ)的PWM
/*自動輸出訪能,中斷,死區(qū)相關(guān)的設(shè)置*/
TIM_BDTRInitStructure.TIM_OSSRState=TIM_OSSRState_Enable;TIM_BDTRInitStructure.TIM_OSSIState=TIM_OSSIState_Enable;TIM_BDTRInitStructure.TIM_LOCKLevel=TIM_LOCKLevel_1;
TIM_BDTRInitStructure.TIM_DeadTime=12;//死區(qū)時(shí)間為12/SYSTEMCLK(ns)TIM_BDTRInitStructure.TIM_Break=TIM_Break_Disable;//關(guān)閉外部break功能,當(dāng)然在產(chǎn)品中最好參與這個保護(hù),蠻好用的。
TIM_BDTRInitStructure.TIM_BreakPolarity=TIM_BreakPolarity_High;
TIM_BDTRInitStructure.TIM_AutomaticOutput=TIM_AutomaticOutput_Enable;TIM_BDTRConfig(TIM3,
TIM_CtrlPWMOutputs(TIM3,ENABLE);/*主輸出啟用*/}
voidNVIC_Configure(){
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel=TIM4_IRQn;//通道TIM3
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//占優(yōu)先級NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;//副優(yōu)先級NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(}
intmain(void){
RCC_Configure();GPIO_Configure();TIM_Configure();PWM_Configure();
NVIC_Configure();
TIM_Cmd(TIM3,ENABLE);/*TIM3的計(jì)數(shù)器使能*/TIM_Cmd(TIM4,ENABLE);/*TIM4的計(jì)數(shù)器使能*/while(1);}
放在system32_it.c里執(zhí)行
voidTIM4_IRQHandler(void){
staticvu16sign=0;
staticvu16Counter_sine=0;staticvu16Duty_Cycle_sinewavetable[128]={0x0,0x83,0x105,0x187,0x209,0x28A,0x30A,0x38A,0x409,0x486,0x502,0x57D,0x5F7,0x66F,0x6E5,0x75A,0x7CC,0x83D,0x8AB,0x917,0x981,0x9E8,0xA4D,0xAAF,0xB0E,0xB6B,0xBC4,0xC1B,0xC6E,0xCBE,0xD0B,0xD54,0xD9A,0xDDD,0xE1C,0xE57,0xE8F,0xEC3,0xEF3,0xF1F,0xF48,0xF6C,0xF8D,0xFA9,0xFC2,0xFD6,0xFE6,0xFF3,0xFFB,0xFFF,0xFFF,0xFFB,0xFF3,0xFE6,0xFD6,0xFC2,0xFA9,0xF8D,0xF6C,0xF48,0xF1F,0xEF3,0xEC3,0xE8F,0xE57,0xE1C,0xDDD,0xD9A,0xD54,0xD0B,0xCBE,0xC6E,0xC1B,0xBC4,0xB6B,0xB0E,0xAAF,0xA4D,0x9E8,0x981,0x917,0x8AB,0x83D,0x7CC,0x75A,0x6E5,0x66F,0x5F7,0x57D,0x502,0x486,0x409,0x38A,0x30A,0x28A,0x209,0x187,0x105,0x83,0x0}
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年廣東省廣州市部分學(xué)校高二上學(xué)期期中考試歷史試卷
- 2025年企業(yè)內(nèi)部控制完善咨詢合同
- 2025年住宅小區(qū)機(jī)動車停放安全與管理協(xié)議
- 2025年高效酸霧凈化器項(xiàng)目規(guī)劃申請報(bào)告模式
- 2025年企業(yè)并購協(xié)議問答
- 2025年建筑施工照明設(shè)備安裝安全策劃協(xié)議書
- 2025年水利項(xiàng)目施工勞務(wù)合同
- 2025年酒類銷售合作合同
- 2025年醫(yī)院安保人員雇傭合同范本
- 2025年住宅建設(shè)項(xiàng)目合同管理與績效
- 工程數(shù)學(xué)試卷及答案
- DB11T 211-2017 園林綠化用植物材料 木本苗
- 智能建造施工技術(shù) 課件 項(xiàng)目1 智能建造施工概論
- 物理學(xué)家伽利略課件
- 2024上海申康醫(yī)院發(fā)展中心招聘2人高頻難、易錯點(diǎn)500題模擬試題附帶答案詳解
- 《氣排球》教學(xué)大綱
- 市政道路監(jiān)理大綱34368
- 北師大版二年級數(shù)學(xué)下冊教材分析
- 國際工程項(xiàng)目管理課件
- 珠海市政工程竣工檔案驗(yàn)收指南(試行上)
- 2024年廣東省廣州市中考英語試卷附答案
評論
0/150
提交評論