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