STM32產生SPWM
下一篇文章中會簡單講解一下Duty[]是如何產生的連結:http://blog.csdn.net/mjlsuccess/article/details/11020219/** @author Mei Jilin @date 2013/9/2 @brief 加入生成SPWM部分 **/ #include "timer.h" #include "led.h" static uint16_t CCR3_Val = 1800; static uint16_t PrescalerValue = 0; /*PWM輸出配置說明,*/ /* - Prescaler = (TIM3CLK / TIM3 counter clock) - 1 選擇TIMER工作在36MHZ The TIM3 is running at 36 MHz: TIM3 Frequency = TIM3 counter clock/(ARR + 1) = 36 MHz / 3600 = 10 KHz TIM3 Channel1 duty cycle = (TIM3_CCR1/ TIM3_ARR)* 100 */ /*轉換週期10K*/ void PWM_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; /* TIM3 clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); /* GPIOA and GPIOB clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB| RCC_APB2Periph_AFIO, ENABLE); /* GPIOA Configuration:TIM3 Channel1, 2, 3 and 4 as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //TIM1_CH1N GPIO_Init(GPIOB, &GPIO_InitStructure); /* Compute the prescaler value */ PrescalerValue = (uint16_t) (SystemCoreClock / 36000000) - 1; //TIMER2 - 36MHZ /* Time base configuration */ TIM_TimeBaseStructure.TIM_Period = 3600; /*TIM3_ARR = 2879,12.5Khz*/ TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); /* Channel 1, 2,3 and 4 Configuration in PWM mode */ 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 = CCR3_Val; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High; TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set; TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Set; TIM_OC1Init(TIM1, &TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); //這句的功能是讓改變CCR2之後馬上有效 TIM_ITConfig(TIM1, TIM_IT_CC1, ENABLE); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 6; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); TIM_Cmd(TIM1, ENABLE); /* TIM1 Main Output Enable */ TIM_CtrlPWMOutputs(TIM1, ENABLE); //TIM1需要加上這句,貌似低階定時器不需要 } uint16_t Duty[] = {1800,1856,1912,1968,2023,2078,2131,2183,2233,2282,2329,2373,2416,2456,2493, 2528,2559,2588,2614,2636,2655,2671,2684,2692,2698,2699,2698,2692,2684,2671,2655,2636,2614, 2588,2559,2528,2493,2456,2416,2373,2329,2282,2233,2183,2131,2078,2023,1968,1912,1856,1800, 1743,1687,1631,1576,1521,1468,1416,1366,1317,1270,1226,1183,1143,1106,1071,1040,1011,985, 963,944,928,915,907,901,900,901,907,915,928,944,963,985,1011,1040,1071,1106,1143,1183,1226, 1270,1317,1366,1416,1468,1521,1576,1631,1687,1743,1799,1799}; uint16_t count = 0; uint16_t num = sizeof(Duty)/(sizeof(Duty[0])); void TIM1_CC_IRQHandler(void) { if (TIM_GetITStatus(TIM1, TIM_IT_CC1) != RESET) { TIM1->SR = (uint16_t)~TIM_IT_CC1; TIM1->CCR1 = Duty[count]; count++; if(count==num) { count=0; } } }
相關推薦
STM32產生SPWM波
SPWM釋義 SPWM(Sinusoidal PWM)法是一種比較成熟的,目前使用較廣泛的PWM法。前面提到的取樣控制理論中的一個重要結論:衝量相等而形狀不同的窄脈衝加在具有慣性的環節上時,其效果基本相同。SPWM法就是以該結論為理論基礎,用脈衝寬度按正弦規律變化而和正弦波等效的PWM波形
STM32產生SPWM
/** @author Mei Jilin @date 2013/9/2 @brief 加入生成SPWM部分 **/ #include "timer.h" #include "led.h" static uint16_t CCR3_Val = 1800
如何計算產生SPWM所需要的佔空比
在上一篇文章裡貼上了STM32產生SPWM的程式碼,我在編寫這些程式碼時最大的問題就是如何得到佔空比,就是程式碼中的陣列 Duty[]。他的思想就是對正弦波取樣,在取樣點出用PWM的佔空比來代替正弦波在該點的數值。最容易想到就是用定時器的ARR值乘以sin(2*pi*f*t
利用28335的epwm產生spwm波的總結
一、SPWM設計簡介 設計的內容是產生倍頻的SPWM波,也即是用的是同一個調製波,兩個橋臂上的載波相差180度。產生spwm時,利用TB產生載波,也即是三角波。(計數方式採用增減模式即可),CC中放的是要比較的數值,當TB中的值等於CC中的值就可產生相應的動作。此動作可由A
在keil中觀察STM32產生的PWM 用示波器觀察實質頻率與模擬不符 是計算值的10倍(疑惑中。。。)
第一步:選擇軟體模擬 1.配置軟體模擬 第二步:進入模擬,呼叫logicc analyer 觀察波形 1.按模擬按鍵進入模擬介面 2.開啟模擬 示波器 介面 3.設定觀察埠 4.開始模
stm32高級定時器的應用——spwm
異步 影響 時鐘 技術分享 pwm nbsp http image 定時器 用過stm32定時器的朋友都知道,定時器的CCR寄存器,可以用來配置PWM的輸出,但同樣也可以用來配置spwm。廢話不多說,直接上代碼。 首先,你得考慮一下幾個因素:
STM32 定時器2 CH1 CH2 PWM輸出 產生呼吸燈效果
PWM一般用來驅動電機(控制速度),控制LED亮度,驅動開關電源電路等等,本例項通過改變PWM佔空比的方式來驅動LED燈,形成呼吸燈的效果。用這種方式來學習STM32 TIM2輸出PWM的配置。 以STM32F103C8T6為例,從其資料手冊中可以看到,P
【STM32】STM32之timer3產生PWM
//****************************************************************************** //name: GUA_Timer3_PWM.c
利用MATLAB計算SPWM脈衝寬度與並應用STM32輸出
轉自 光電科技協會 王誠博 http://blog.csdn.net/wcb425499094/article/details/76703042 先上一張spwm波形生成原理圖: 首先利用MATLAB產生三角波與正弦波疊加: [cpp] view plain copy print? %%
STM32定時器產生PWM--呼吸燈
說明:本工程程式碼在STM32F407ZET6上測試通過。 1、PWM定義 Pulse Width Modulation:脈衝寬度調製(PWM) 2、用途 (1)控制輸出的電壓和電流 (2)燈光的亮度 (3)電機控制 3、分析PWM產生
STM32F429--STM32的PWM佔空比產生與測量
一、PWM波形的產生; 使用定時器2 (TIM2)PA5埠輸出。 通過配置 TIM_TimeBaseStructure.TIM_Period= 1000 - 1; TIM_TimeBaseStructure.TIM_Prescaler= 9000 - 1; TI
H橋SPWM波產生電路及死區電路的分析
1、 H橋電路 H橋的工作原理如下,正半波時Q1,Q4導通,Q2,Q3截止;負半波時Q2,Q3導通,Q1,Q4截止。而且要保證Q3和Q4,Q1和Q2不能同時導通。即Q3與Q4,Q1與Q2要有死區,所謂
微控制器SPWM的產生
電賽剛結束不久,期間我做的題目需要用單片產生一個三相的SPWM波,然後再通過硬體電路LC濾波形成正弦波。 我用的微控制器是STC15F2K60S2,然後通過自然數查表法控制內部3路PWM產生SPWM訊號,而且生成的正弦波相位是相差120°,並且頻率是50Hz。
python出現UnicodeEncodeError有可能產生的另一個原因
erro inux encode fault roo install 出現 div wrap 在使用python中,我們都有可能遇到如下的錯誤: UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters in po
STM32的RFID射頻讀寫控制裝置
please include .cn mage str rfid alt all float ,大二上學期做的,過了很久,先上一下圖: 這並不是做個最後一版;主體是RC552+STM32+1062;蜂鳴器,繼電器,LED等;反正最後的效果就是,刷一下卡,1602顯示一下持
modelsim調用產生隨機數及創建虛擬類
iic blue 類型 div spa 窗口 查看 隨機數 lan 1、 Modelsim仿真產生隨機數 reg data; data = $random % a; //產生從-a+1 ~ a-1 的隨機數 data = {$random} % a; //產生從0
STM32的IO口
enum 都是 芯片 復用 一個 article 模擬 font 下拉 STM32 的 IO 口 能夠由軟件配置成例如以下 8 種模式: 1、輸入浮空 2、輸入上拉 3、輸入下拉 4、模擬輸入 5、開漏輸出 6、推挽輸出 7、推挽式復用功能 8、開漏復用功能 每一個
從 datetime2 數據類型到 datetime 數據類型的轉換產生一個超出範圍的值
mvc 異常 highlight ech 解決方案 har sqlserve 要去 轉化 最近在ASP.NET MVC中遇到一個問題,如題,在使用EF數據模型的時候,要去添加一條新的數據到Sqlserver數據庫,在之前項目中並沒有出現該異常,所以去扒了扒demo,發現有幾
SPI problem of STM32
cti program ram can ash fun amp read this There is a problem that data can not be read from the flash when I use SPI to operate W25Q6
js 解決由於(bom文件格式)產生的空白行
空白行 pan original inner itl nal 文件 head type 把以下代碼放到HTML頁面的head標簽裏就行了: <script> var a=document.body.innerHTML; document.body.inn