娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年01月26日(星期日)

2019年01月26日 | SPWM波在單片機上的實現與調節(基于MSP430F5529)

發布者:brian808090 來源: eefocus關鍵字:SPWM波  單片機  調節  MSP430F5529 手機看文章 掃描二維碼
隨時隨地手機看文章

SPWM波的定義和生成方法在這里就不多說了,本文主要說SPWM波在單片機上的實現,以及如何調節濾出后的正弦波的頻率及幅度。 


先弄清楚SPWM在單片機上如何產生,比如你要輸出100HZ的SPWM正弦波,每個周期100個點,則定時器B的中斷頻率為100*100=10K,用于載波(定時器A)的PWM頻率應>=10K(這里我建議載波為1M,因為定時器的配合問題會有+-1的誤差,所以載波盡量的大則濾出的正弦波的波形越好)。 


通過軟件,你先得到100個點的正弦波采樣值,你可以用定時器A來產生1MHZ的PWM,然后用定時器B,做定時器中斷,10KHZ的頻率,每次中斷,就把一個采樣值賦值給定時器A的輸出通道:CCRx。然后不停的循環,每中斷一百次,就輸出1個波。不停的循環就不停的輸出,那么PWM輸出端,經過濾波后(外部濾波電路要找相關電路去設計),就是100HZ的正弦波了。 


調節頻率要通過定時器B,公式:正弦波頻率*每個周期的點數=定時器B中斷頻率 

調節幅度要依據載波中最大與最小占空比之差也即是調制深度,這個沒有公式…….. 

剩下的就要參考我給出的程序作出自己的理解吧,靠你們了,騷年們! 


程序示例:


函數

/*----------------------------------------------------------------------------------------------

 * 功能:產生單路SPWM波

 * 輸入:無

 * 輸出:P1.4

 * 注意:定時器也為TA1.1;載波頻率為126.26K;;默認正弦頻率為100HZ,幅度未知

 */

void SPWM_1Way_Init(void)

{

    P1SEL |=BIT4;

    P1DIR |=BIT4;

    //P1DS |=BIT4; //全力驅動

    P1OUT &=~BIT4;

    spwm_i=0;

    TA0CCR0 =198;//載波126.26KHZ

    TA0CCR3 =Lab1[spwm_i];

    TA0CCTL3 =OUTMOD_7;

    TA0CTL =TASSEL_2+MC_1+TACLR;//選擇時鐘為SMCLK,UP模式


    P2SEL |=BIT0;

    P2DIR |=BIT0;

    P2OUT &=~BIT0;

    TA1CCR0 =2499;//25000000/(100*100)=2500:100Hz,100個點:10KHZ(時間不太準我做了些補償)

    TA1CTL =TASSEL_2+MC_1+TACLR;//選擇時鐘為SMCLK,UP模式

    TA1CTL  |= TAIE;//開啟中斷


    __enable_interrupt();//開啟總中斷

}

void SPWM_1Way_Set_Freq(unsigned int freq)

{

    unsigned long freq_num;

    freq_num=250000/(freq)-1;

    TA1CCR0 =freq_num;

}

/*

 * 功能:輸出兩路SPWM波,相位可調

 * 輸入:無

 * 輸出:P1.4,P1.5

 * 注意:定時器也為TA1.1;載波頻率為126.26K;;默認正弦頻率為100HZ,幅度未知

 */

void SPWM_2Way_Init(void)

{

    P1SEL |=BIT4+BIT5;

    P1DIR |=BIT4+BIT5;

    //P1DS |=BIT4+BIT5; //全力驅動

    P1OUT &=~BIT4+BIT5;

    spwm_i=0;

    spwm_j=50;//控制相位

    TA0CCR0 =198;//載波126.26KHZ

    TA0CCR3 =Lab1[spwm_i];

    TA0CCR4 =Lab1[spwm_j];

    TA0CCTL3 =OUTMOD_7;

    TA0CCTL4 =OUTMOD_7;

    TA0CTL =TASSEL_2+MC_1+TACLR;//選擇時鐘為SMCLK,UP模式


    P2SEL |=BIT0;

    P2DIR |=BIT0;

    P2OUT &=~BIT0;

    TA1CCR0 =2499;//25000000/(100*100)=2500:100Hz,100個點:10KHZ

    TA1CTL =TASSEL_2+MC_1+TACLR;//選擇時鐘為SMCLK,UP模式

    TA1CTL  |= TAIE;//開啟中斷


    __enable_interrupt();//開啟總中斷

}

void SPWM_2Way_Set_Freq(unsigned int freq)

{

    unsigned long freq_num;

    freq_num=250000/(freq)-1;

    TA1CCR0 =freq_num;

}

/*

 * 功能:中斷函數,改變SPWM中占空比寄存器的值

 * 輸入:無

 * 輸出:無

 * 注意:為0時雙路輸出,為1時單路輸出

 */

#if 0

#pragma vector=TIMER1_A1_VECTOR

__interrupt void TimerA1(void)

{

        TA0CCR3 =Lab1[spwm_i++];

        if(spwm_i==100)spwm_i=0;

    TA1IV=0;    //GPIO的單獨中斷會自動清零,可TIMER的不會,所以要軟件清零;!!

}

#else

#pragma vector=TIMER1_A1_VECTOR

__interrupt void TimerA1(void)

{

    TA0CCR3 =Lab1[spwm_i++];

    if(spwm_i==100)spwm_i=0;

    TA0CCR4 =Lab1[spwm_j++];

    if(spwm_j==100)spwm_j=0;

    TA1IV=0;    //GPIO的單獨中斷會自動清零,可TIMER的不會,所以要軟件清零;!!

}

#endif


頭文件PWM.h

/*

 * PWM.h

 *

 *  Created on: 2016-8-22

 *      Author: Flyskyr

 */


#ifndef PWM_H_

#define PWM_H_


extern unsigned int spwm_i,spwm_j;

extern unsigned int Lab_base[];

extern float Lab1[];


extern void SPWM_1Way_Init(void);

extern void SPWM_1Way_Set_Freq(unsigned int freq);

extern void SPWM_2Way_Init(void);

extern void SPWM_2Way_Set_Freq(unsigned int freq);


#endif /* PWM_H_ */


頭文件include.h

/*

 * include.h

 *

 *  Created on: 2016-8-18

 *      Author: Flyskyr

 */


#include

#include"PWM.h"


unsigned int spwm_i,spwm_j;

unsigned int Lab_base[]={99,105,111,117,123,129,135,141,146,152,157,162,166,171,175,179,182,185,188,191,193,194,196,197,197,198,197,197,196,194,193,191,188,185,182,179,175,171,166,162,157,152,146,141,135,129,123,117,111,105,99,92,86,80,74,68,62,56,51,45,40,35,31,26,22,18,15,12,9,6,4,3,1,0,0,0,0,0,1,3,4,6,9,12,15,18,22,26,31,35,40,45,51,56,62,68,74,80,86,92

};

float Lab1[]={99,105,111,117,123,129,135,141,146,152,157,162,166,171,175,179,182,185,188,191,193,194,196,197,197,198,197,197,196,194,193,191,188,185,182,179,175,171,166,162,157,152,146,141,135,129,123,117,111,105,99,92,86,80,74,68,62,56,51,45,40,35,31,26,22,18,15,12,9,6,4,3,1,0,0,0,0,0,1,3,4,6,9,12,15,18,22,26,31,35,40,45,51,56,62,68,74,80,86,92

};//這個float數組我是用來調節調制深度的,改變這里的值就可以改變輸出的幅度了


關鍵字:SPWM波  單片機  調節  MSP430F5529 引用地址:SPWM波在單片機上的實現與調節(基于MSP430F5529)

上一篇:STC15單片機6路專用PWM
下一篇:STC12C5A60S2單片機-雙串口通信

推薦閱讀

I2C_示例程序;----------------------------------------------------------; File Name: I2C.ASM; Author: Andy Yu; Date: July 22, 1998;----------------------------------------------------------#define I2C_ASMinclude i2c.incpublIC InitI2CBusMasterpublic _i2c_bLOCk_writepublic _i2c_block_readpublic SendDatapublic TxmtSt...
時至年關,不知道大家今年的年終獎還滿意否?筆者最近在公司內部做了一個小調查,大約詢問了二十多名平時熱愛攝影的編輯們,讓大家選出年底最想購買的影像產品。今天這份產品列表,不僅涵蓋相機與鏡頭,還包括諸如穩定器、三腳架等等攝影相關產品。下面我們就來看一下我們得票率最高的十款產品是什么。得票率第一名:大疆Osmo Pocket在所有影像產品中,大...
工業機器人本體競爭格局:四大家族壟斷,國產品牌突圍工業機器人“四大家族”日本發那科、瑞士ABB、日本安川、德國KUKA,在全球高端應用領域占有較高市占率。國內品牌廣州啟帆、埃夫特、新松、埃斯頓、廣州數控、新時達享受市場增長紅利快速成長,正在國內市場實現突圍。2016年,“四大家族”全球市場中的市占率合計達58%,占據了全球市場份額的超過半壁江...
在剛剛過去的2020年,5nm處理器只在蘋果iPhone12系列、華為Mate40以及年末發布的vivo X60、小米11(至截稿日處于預購狀態)等少數機型搭載。而2021年,5nm處理器將應用于更多5G機型。無論是新近推出第二款5nm處理器和首發機型Galaxy S21的三星,確認搭載高通驍龍888的IQOO7,還是支持高通驍龍888平臺的 OPPO、魅族、黑鯊等十幾家OEM廠商,皆對5n...

史海拾趣

小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 九龙城区| 海晏县| 乌鲁木齐县| 三河市| 任丘市| 河源市| 双柏县| 卢湾区| 三门县| 丰原市| 菏泽市| 灌南县| 汉沽区| 东山县| 济阳县| 西乌| 兰州市| 建昌县| 河间市| 巴南区| 凌源市| 威信县| 图们市| 合肥市| 皮山县| 麻江县| 仁布县| 榕江县| 孝义市| 法库县| 平阳县| 东源县| 阿拉善右旗| 合川市| 新竹市| 广德县| 淅川县| 舟曲县| 兰考县| 怀安县| 江西省|