#include"STC12C5A.h"
void delay(unsigned int cnt) //延時函數(shù)
{
unsigned char i;
for(;cnt>0;cnt--)
for(i=0;i<250;i++);
}
void main()
{
CCON=0; //PCA初始化
CL=0; //PCA的16位計數(shù)器低八位
CH=0; //PCA的16位計數(shù)器高八位
CMOD=0x0a; //選擇 系統(tǒng)時鐘/4 為計數(shù)脈沖,則PWM的頻率f=sysclk/256/4;
CCAP0H=0x80; // 占空比控制
CCAP0L=0x80;
PCA_PWM0=0x00; //控制占空比的第九位為0
CCAPM0=0x42; //允許P13作為PWM輸出
CR=1; //啟動PCA計數(shù)器
while(1)
{
if(P10==0)
{
delay(200);
while(P10==0);
CCAP0H+=10; //占空比調(diào)節(jié)
CCAP0L+=10;
}
}
}
這個是我在網(wǎng)上查看到的一個產(chǎn)生PWM波的程序。我正想做一個PWM控制電機轉(zhuǎn)數(shù)的一個程序。有幾個問題想要咨詢一下大家。
1、假如我的晶振是20M是,那是不是產(chǎn)生的PWM的頻率是19.5k hz. 這里我把系統(tǒng)時鐘理解成了20m不知錯了 沒有。
2、 那個占空比的控制 CCAP0H=0x80; CCAP0L=0x80; 這個是代表占空比是50% 是不是高地位的數(shù)值必須是一樣的。 但是這一句: PCA_PWM0=0x00; //控制占空比的第九位為0 我沒有理解不知道是什么意思。
3、這個單片機是8位的,他就是把分為了256份, 是不是電機轉(zhuǎn)數(shù)在10000轉(zhuǎn)的時候每條一次占空比電機的轉(zhuǎn)數(shù)浮動是10000/256轉(zhuǎn)。 要是的話在程序的哪里可以看出來。
暫時就這三個問題,謝謝了。
|