|
本帖最后由 5695585 于 2015-8-8 23:33 編輯
寫這個程序的目的是準備給無刷直流電機提供驅動信號
需要的是給一個低頻方波信號里面填充較高頻率的PWM波
思路是設置好PCA的寄存器,包括PWM的占空比和頻率
然后用定時器0來控制CR,即PCA0CN 寄存器的第6位,周期性的使能和禁止PWM輸出,實現PWM的填充
產生類似調制波一樣的波形
大概程序如下:
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; //總中斷開
TR0=1; //定時方式
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, 下載次數: 87)
下載附件
2015-8-8 21:29 上傳
22.jpg (260.9 KB, 下載次數: 96)
下載附件
2015-8-8 21:29 上傳
33.jpg (263.29 KB, 下載次數: 106)
下載附件
2015-8-8 21:29 上傳
本來希望得到的是第三張圖一樣的波形,沒有PWM的部分為低電平
但是輸出在圖1和圖3之間不斷的跳變,有時沒有PWM的部分為高,有時為低,感覺不受控
請問這個問題出在哪兒
我試過在中斷里直接 CR = 0 ,輸出是恒低的
非常感謝
試過在CR = 0的時候控制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;
}
但一點用都沒有
請教各位問題出在哪兒
非常感謝
|
評分
-
查看全部評分
|