欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
問大神:STC8A8K64S4A12芯片怎么單獨(dú)使用里面PWM部分產(chǎn)生正弦波信號
[打印本頁]
作者:
zz2200
時間:
2019-8-9 13:52
標(biāo)題:
問大神:STC8A8K64S4A12芯片怎么單獨(dú)使用里面PWM部分產(chǎn)生正弦波信號
同標(biāo)題
作者:
angmall
時間:
2019-8-12 14:23
一個SPWM帶有死區(qū)的程序 用STC8A8K64S4A12單片機(jī)編寫的SPWM
//一個SPWM帶有死區(qū)的程序 用STC8A8K64S4A12單片機(jī)編寫的SPWM
//介紹了一種高性能微機(jī)控制的單相 SPWM 變頻調(diào)速系統(tǒng)
// SPWM信號經(jīng)低通濾波后可變換為正弦波,窄帶范圍內(nèi)的方波經(jīng)低通濾波后可變換為相應(yīng)頻率的正弦波
//程序能用,如果不是你想要的頻率,那就 自己改一下數(shù)據(jù) 記得同時要替換數(shù)組里面的值
#define MAIN_Fosc 24000000L //定義主時鐘
#include "STC8.H"
unsigned int code T_SinTable[]={
1220, 1256, 1292, 1328, 1364, 1400, 1435, 1471, 1506, 1541,
1575, 1610, 1643, 1677, 1710, 1742, 1774, 1805, 1836, 1866,
1896, 1925, 1953, 1981, 2007, 2033, 2058, 2083, 2106, 2129,
2150, 2171, 2191, 2210, 2228, 2245, 2261, 2275, 2289, 2302,
2314, 2324, 2334, 2342, 2350, 2356, 2361, 2365, 2368, 2369,
2370, 2369, 2368, 2365, 2361, 2356, 2350, 2342, 2334, 2324,
2314, 2302, 2289, 2275, 2261, 2245, 2228, 2210, 2191, 2171,
2150, 2129, 2106, 2083, 2058, 2033, 2007, 1981, 1953, 1925,
1896, 1866, 1836, 1805, 1774, 1742, 1710, 1677, 1643, 1610,
1575, 1541, 1506, 1471, 1435, 1400, 1364, 1328, 1292, 1256,
1220, 1184, 1148, 1112, 1076, 1040, 1005, 969, 934, 899,
865, 830, 797, 763, 730, 698, 666, 635, 604, 574,
544, 515, 487, 459, 433, 407, 382, 357, 334, 311,
290, 269, 249, 230, 212, 195, 179, 165, 151, 138,
126, 116, 106, 98, 90, 84, 79, 75, 72, 71,
70, 71, 72, 75, 79, 84, 90, 98, 106, 116,
126, 138, 151, 165, 179, 195, 212, 230, 249, 269,
290, 311, 334, 357, 382, 407, 433, 459, 487, 515,
544, 574, 604, 635, 666, 698, 730, 763, 797, 830,
865, 899, 934, 969, 1005, 1040, 1076, 1112, 1148, 1184,
};
#define PwmClk_1T 0
#define PwmClk_2T 1
#define PwmClk_3T 2
#define PwmClk_4T 3
#define PwmClk_5T 4
#define PwmClk_6T 5
#define PwmClk_7T 6
#define PwmClk_8T 7
#define PwmClk_9T 8
#define PwmClk_10T 9
#define PwmClk_11T 10
#define PwmClk_12T 11
#define PwmClk_13T 12
#define PwmClk_14T 13
#define PwmClk_15T 14
#define PwmClk_16T 15
#define PwmClk_T2 16
#define EAXSFR() P_SW2 |= 0x80 /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作對象為擴(kuò)展SFR(XSFR) */
#define EAXRAM() P_SW2 &= ~0x80 /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作對象為擴(kuò)展RAM(XRAM) */
#define PWM_Enable() PWMCR |= 0x80 /* 使能PWM波形發(fā)生器,PWM計數(shù)器開始計數(shù) */
#define PWM_Disable() PWMCR &= ~0x80 /* 關(guān)閉PWM波形發(fā)生器 */
#define P2n_standard(bitn) P2M1 &= ~(bitn), P2M0 &= ~(bitn)
#define P2n_push_pull(bitn) P2M1 &= ~(bitn), P2M0 |= (bitn)
#define P2n_pure_input(bitn) P2M1 |= (bitn), P2M0 &= ~(bitn)
#define P2n_open_drain(bitn) P2M1 |= (bitn), P2M0 |= (bitn)
#define PWM_VECTOR 22
#define PWM_DeadZone 12 /* 死區(qū)時鐘數(shù), 6 ~ 24之間 */
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
sbit OE245 =P4^1;
sbit LED_OUT =P3^3;
#define Port P1 //設(shè)置CPU和模塊的通訊接口
u8 PWM_Index; //SPWM查表索引
void delay(unsigned long d)
{
while(d--);
}
//========================================================================
// 函數(shù): void PWM_config(void)
// 描述: PWM配置函數(shù)。
// 參數(shù): none.
// 返回: none.
// 版本: VER1.0
// 日期:
// 備注:
//========================================================================
void PWM_config(void)
{
EAXSFR(); // 訪問XFR
PWM3T1 = 65; // 第一個翻轉(zhuǎn)計數(shù)
PWM3T2=1220; // 第二個翻轉(zhuǎn)計數(shù)
PWM3CR =0; // PWM3輸出選擇P2.3, 無中斷
PWM3CR |= 0x80; // 相應(yīng)PWM通道的端口為PWM輸出口,受PWM波形發(fā)生器控制 ENC30
PWM3CR &= ~0x40; // 設(shè)置PWM輸出端口的初始電平為0 C3INI
P23 = 0;
P2n_push_pull(1<<3); //IO初始化, 上電時為高阻
PWM4T1= 65-PWM_DeadZone; // 第一個翻轉(zhuǎn)計數(shù)低字節(jié)
PWM4T2 = (1220+PWM_DeadZone); // 第二個翻轉(zhuǎn)計數(shù)高字節(jié)
PWM4CR = 0; // PWM4輸出選擇P2.2, 無中斷
PWM4CR |= 0x80; // 相應(yīng)PWM通道的端口為PWM輸出口,受PWM波形發(fā)生器控制 ENC40
// PWMCFG &= ~0x04; // 設(shè)置PWM輸出端口的初始電平為0 C4INI
PWM4CR |= 0x40; // 設(shè)置PWM輸出端口的初始電平為1
P24 = 1;
P2n_push_pull(1<<4); //IO初始化, 上電時為高阻
PWMC = 2400; // PWM計數(shù)器的高字節(jié)
PWMCKS = PwmClk_1T; // 時鐘源: PwmClk_1T,PwmClk_2T, ... PwmClk_16T, PwmClk_Timer2
EAXRAM(); // 恢復(fù)訪問XRAM
PWMCR |= ENPWM; // 使能PWM波形發(fā)生器,PWM計數(shù)器開始計數(shù)
// PWMCR &= ~ECBI; // 禁止PWM計數(shù)器歸零中斷
PWMCR |= ECBI; // 允許PWM計數(shù)器歸零中斷
// PWMFDCR = ENFD | FLTFLIO | FDIO; //PWM失效中斷控制, ENFD | FLTFLIO | EFDI | FDCMP | FDIO
}
/**********************************************/
void main(void)
{
unsigned char i;
OE245 =0;
LED_OUT =1;
PWM_config(); //初始化PWM
EA = 1; //允許全局中斷
while (1)
{
for(i=1;i!=0;i<<=1) // 0000 0000
{
Port =~i; //0111 1111
delay(200000);
}
}
}
/********************* PWM中斷函數(shù)************************/
void PWM_int (void) interrupt PWM_VECTOR
{
u16 j;
u8 SW2_tmp;
if(PWMCFG & CBIF) //PWM計數(shù)器歸零中斷標(biāo)志 PWMCFG
{
PWMCFG &= ~CBIF; //清除中斷標(biāo)志
SW2_tmp = P_SW2; //保存SW2設(shè)置
EAXSFR(); //訪問XFR
j = T_SinTable[PWM_Index];
PWM3T2H = (u8)(j >> 8); //第二個翻轉(zhuǎn)計數(shù)高字節(jié)
PWM3T2L = (u8)j; //第二個翻轉(zhuǎn)計數(shù)低字節(jié)
j += PWM_DeadZone; //死區(qū)
// 指向PWM4
PWM4T2H = (u8)(j >> 8); //第二個翻轉(zhuǎn)計數(shù)高字節(jié)
PWM4T2L = (u8)j; //第二個翻轉(zhuǎn)計數(shù)低字節(jié)
P_SW2 = SW2_tmp; //恢復(fù)SW2設(shè)置
if(++PWM_Index >= 200) PWM_Index = 0;
}
}
復(fù)制代碼
單片機(jī)SPWM波 產(chǎn)生正弦波的源程序及工具
http://www.raoushi.com/bbs/dpj-55510-1.html
作者:
cjm82
時間:
2019-8-12 22:50
如果要求不高,用50%占空比輸出方波,經(jīng)過一個截止頻率等于方波頻率的4階以上低通濾波器,出來的基本就是個正弦波了.
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1