|
本帖最后由 5695585 于 2015-8-8 23:33 編輯
寫(xiě)這個(gè)程序的目的是準(zhǔn)備給無(wú)刷直流電機(jī)提供驅(qū)動(dòng)信號(hào)
需要的是給一個(gè)低頻方波信號(hào)里面填充較高頻率的PWM波
思路是設(shè)置好PCA的寄存器,包括PWM的占空比和頻率
然后用定時(shí)器0來(lái)控制CR,即PCA0CN 寄存器的第6位,周期性的使能和禁止PWM輸出,實(shí)現(xiàn)PWM的填充
產(chǎn)生類(lèi)似調(diào)制波一樣的波形
大概程序如下:
void PCA0_Init (void)
{
char SFRPAGE_save = SFRPAGE; // Save current SFR Page
SFRPAGE = PCA0_PAGE;
// configure PCA time base; overflow interrupt disabled
PCA0CN = 0x00; // Stop counter; clear all flags
PCA0MD = 0x00; // Use SYSCLK as time base
PCA0CPM0 = 0x42; // Module 0 = 8-bit PWM mode
// Configure initial PWM duty cycle = 50%
PCA0CPH0 = 256 - (256 * 0.2);
// Start PCA counter
CR = 1;
SFRPAGE = SFRPAGE_save;
}
void Timer_Init()
{
char SFRPAGE_SAVE = SFRPAGE;
SFRPAGE = TIMER01_PAGE;
TMOD = 0x01;
TH0 = 0xF4;
TL0 = 0x00;
EA=1; //總中斷開(kāi)
TR0=1; //定時(shí)方式
ET0=1;
SFRPAGE = SFRPAGE_SAVE;
}
void Timer0_ISR(void) interrupt 1
{
char SFRPAGE_SAVE = SFRPAGE;
SFRPAGE = TIMER01_PAGE;
TH0 = 0xF4;
TL0 = 0x00;
SFRPAGE = PCA0_PAGE;
CR = ~CR;
SFRPAGE = SFRPAGE_SAVE;
}
11.jpg (271.13 KB, 下載次數(shù): 87)
下載附件
2015-8-8 21:29 上傳
22.jpg (260.9 KB, 下載次數(shù): 96)
下載附件
2015-8-8 21:29 上傳
33.jpg (263.29 KB, 下載次數(shù): 106)
下載附件
2015-8-8 21:29 上傳
本來(lái)希望得到的是第三張圖一樣的波形,沒(méi)有PWM的部分為低電平
但是輸出在圖1和圖3之間不斷的跳變,有時(shí)沒(méi)有PWM的部分為高,有時(shí)為低,感覺(jué)不受控
請(qǐng)問(wèn)這個(gè)問(wèn)題出在哪兒
我試過(guò)在中斷里直接 CR = 0 ,輸出是恒低的
非常感謝
試過(guò)在CR = 0的時(shí)候控制P0.0輸出低電平
void Timer0_ISR(void) interrupt 1
{
char SFRPAGE_SAVE = SFRPAGE;
SFRPAGE = TIMER01_PAGE;
TH0 = 0xF4;
TL0 = 0x00;
SFRPAGE = PCA0_PAGE;
CR = ~CR;
if(CR == 0)
{
SFRPAGE = CONFIG_PAGE;
XBR0 = 0x00; P0MDOUT = 0xFF;
P0 &= 0xFE;
XBR0 = 0x08;
}
SFRPAGE = SFRPAGE_SAVE;
}
但一點(diǎn)用都沒(méi)有
請(qǐng)教各位問(wèn)題出在哪兒
非常感謝
|
評(píng)分
-
查看全部評(píng)分
|