❶ stc12c5a60s2單片機 輸出自帶pwm頻率怎麼改變,比如說我現在需要50hz的頻率
1,stc12c5a60s2一般pwm頻率=PCA時鍾源/256
2,PCA時鍾源設置有4種方式,一般都有T0的溢出率,來設置PCA時鍾源,
一般在COMD這個寄存器的B2,B1兩位來確定是那種方式,10方式就是T0溢出方式(1T更快),可以做可變PCA時鍾源時鍾源,從而得到可變頻率的pwm輸出。
3,理論可生成(1-65535)個頻率級別,如12MHz主頻,(1T)方式最小可以做到12MHz,但實際是到了的最快也就是1/2SYsclk,即6MHz,然後除以256,理想可以輸出23Khz~0.5Hz左右的頻率范圍
❷ 求助:對於STC12C5A60S2單片機,如何用pca實現定時中斷
程序說明:
y = pca(mixedsig),程序中mixedsig為 n*T 階混合數據矩陣,n為信號個數,T為采樣點數, y為 m*T 階主分量矩陣。
程序設計步驟:
1、去均值
2、計算協方差矩陣及其特徵值和特徵向量
3、計算協方差矩陣的特徵值大於閾值的個數
4、降序排列特徵值
5、去掉較小的特徵值
6、去掉較大的特徵值(一般沒有這一步)
7、合並選擇的特徵值
8、選擇相應的特徵值和特徵向量
9、計算白化矩陣
10、提取主分量
程序代碼
%程序說明:y = pca(mixedsig),程序中mixedsig為 n*T 階混合數據矩陣,n為信號個數,T為采樣點數
% y為 m*T 階主分量矩陣。
function y = pca(mixedsig)
if nargin == 0
error('You must supply the mixed data as input argument.');
end
if length(size(mixedsig))>2
error('Input data can not have more than two dimensions. ');
end
if any(any(isnan(mixedsig)))
error('Input data contains NaN''s.');
end
%——————————————去均值————————————
meanValue = mean(mixedsig')';
mixedsig = mixedsig - meanValue * ones(1,size(meanValue,2));
[Dim,NumofSampl] = size(mixedsig);
oldDimension = Dim;
fprintf('Number of signals: %d\n',Dim);
fprintf('Number of samples: %d\n',NumofSampl);
fprintf('Calculate PCA...');
firstEig = 1;
lastEig = Dim;
covarianceMatrix = cov(mixedsig',1); %計算協方差矩陣
[E,D] = eig(covarianceMatrix); %計算協方差矩陣的特徵值和特徵向量
%———計算協方差矩陣的特徵值大於閾值的個數lastEig———
rankTolerance = 1e-5;
maxLastEig = sum(diag(D)) >rankTolerance;
lastEig = maxLastEig;
%——————————降序排列特徵值——————————
eigenvalues = flipud(sort(diag(D)));
%—————————去掉較小的特徵值——————————
if lastEig <oldDimension
lowerLimitValue = (eigenvalues(lastEig) + eigenvalues(lastEig + 1))/2;
else
lowerLimitValue = eigenvalues(oldDimension) - 1;
end
lowerColumns = diag(D) > lowerLimitValue;
%—————去掉較大的特徵值(一般沒有這一步)——————
if firstEig > 1
higherLimitValue = (eigenvalues(firstEig - 1) + eigenvalues(firstEig))/2;
else
higherLimitValue = eigenvalues(1) + 1;
end
higherColumns = diag(D) < higherLimitValue;
%—————————合並選擇的特徵值——————————
selectedColumns =lowerColumns & higherColumns;
%—————————輸出處理的結果信息—————————
fprintf('Selected[ %d ] dimensions.\n',sum(selectedColumns));
fprintf('Smallest remaining (non-zero) eigenvalue[ %g ]\n',eigenvalues(lastEig));
fprintf('Largest remaining (non-zero) eigenvalue[ %g ]\n',eigenvalues(firstEig));
fprintf('Sum of removed eigenvalue[ %g ]\n',sum(diag(D) .* (~selectedColumns)));
%———————選擇相應的特徵值和特徵向量———————
E = selcol(E,selectedColumns);
D = selcol(selcol(D,selectedColumns)',selectedColumns);
%——————————計算白化矩陣———————————
whiteningMatrix = inv(sqrt(D)) * E';
dewhiteningMatrix = E * sqrt(D);
%——————————提取主分量————————————
y = whiteningMatrix * mixedsig;
%——————————行選擇子程序———————————
function newMatrix = selcol(oldMatrix,maskVector)
if size(maskVector,1)~ = size(oldMatrix,2)
error('The mask vector and matrix are of uncompatible size.');
end
numTaken = 0;
for i = 1:size(maskVector,1)
if maskVector(i,1) == 1
takingMask(1,numTaken + 1) == i;
numTaken = numTaken + 1;
end
end
newMatrix = oldMatrix(:,takingMask);
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/lillllllll/archive/2010/02/21/5315382.aspx
❸ 我想用stc12c5a60s2單片機PCA輸出pwm 周期20ms 脈寬1ms,怎麼計算周期 怎麼
stc12C5A60s2的官方文檔
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!10.3.4 脈寬調節模式(PWM) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
有介紹
PWM頻率= PCA時鍾/256.
PCA的時鍾源可以選擇:sysclk,sysclk/2,sysclk/4,sysclk/6,sysclk/8,sysclk/12,(其中 sysclk就是你的晶振頻率),定時器0的溢出,P3.4口的輸入時鍾.
CCAPnL寄存器的值 = 256-(256*脈寬/周期)
另外CCAPnL是重裝值,也需要配置好.
周期20ms,也就是說頻率是50Hz.
那你只能選擇使用定時器0的溢出作為PCA的時鍾了.
CL=0;//清零PCA計數器
CMOD=0x04;//定時器0溢出做PCA模塊的時鍾源
CCAPnH=CCAPnL=0xF3;//n=0or1//1ms
CCAPMn=0x42;//n=0or1//脈寬調節模式
CR=1;//都配置好了之後,打開PCA計數器
當然其它的寄存器配置你需要自己寫,比如說定時器0.
詳見官方文檔
我寫是對照文檔現寫的,比較匆忙,代碼可能有問題,但是思路是對的.
❹ STC12C5A60S2單片機的PCA作為捕捉使用時,捕捉的是兩個邊沿信號之間的脈寬還是一段時間內的脈沖數量
沒仔細研究,這一節的說明特別長,看起來費勁但我學習STM32時對捕獲有所理解,應該是兩個捕獲寄存器1和2聯合使用,第一個上升沿到來,兩個捕獲寄存器同時復位,下降沿時,捕獲寄存器2產生捕獲更新事件,即可得到脈沖寬度第二個上升沿到來捕獲寄存器1產生捕獲更新事件,即可得到脈沖周期同時占空比也知道了兩個寄存器的捕獲值是內部時鍾個數,根據晶振頻率和分頻系數即可得到時間
而不是一段時間內外部的脈沖數量
❺ stc12c5a60s2單片機的串列中斷對pca有沒有影響
串口中斷對PCA可能造成的影響是:
1、如果是優先順序一樣,那麼一個中斷在執行過程中,其他中斷只能排隊等候,所以有中斷響應延遲的情況出現。
2、如果是優先順序不一樣,那麼低級中斷就可能被高級中斷打斷的可能。
3、如果沒有使用using n(n~3)那麼如果多個中斷都使用了同一個名稱的工作寄存器的話,可能會干涉。
❻ STC12系列單片機的PCA是指什麼,跟PWM有什麼區別
PCA——可編程計數器陣列
STC手冊中把概念模塊化了,他的PCA包含兩個 捕獲/比較匹配 模塊,可以實現上升沿/下降沿捕獲,及捕獲中斷,或者比較匹配中斷,或者PWM,或者最普通的定時/計數器。
其實就是個功能稍微強大點的定時器 - -!
比如STC12C2052AD,它的PCA是16位的計數器,計數脈沖可選(時鍾分頻後做為計數信號,或者外部信號),包含兩個比較單元,這兩個比較單元可以用來產生比較匹配或者PWM,也就是上面所說的 兩個模塊。
當PCA本身的計數數值與比較匹配相等時,可以觸發中斷,或者PWM波形翻轉。
當PCA工作於捕獲時,首先設定一個捕獲條件 上升沿或下降沿 。當這個條件發生時,PCA本身的計數值就被自動的復制到一個固定的寄存器上,等待讀取,並可以觸發中斷。
實際上PCA就是一個平平常常的計數器,比AT89S52的強點,現在的定時器基本上都有這些功能。
實在不明白就看看手冊吧。。
❼ 關於STC12C5A60S2單片機的PCA/PWM應用
1、CL/CH就是個一直在累加的計數器,功能同TL/TH;2、CCAPnL/CCAPnH裡面放所謂的捕獲值,也就是說:CL/CH中計數的值等於CCAPnL/CCAPnH時發生捕獲事件,將申請中斷;PWM時計數達到CCAPnL時輸出電平翻轉,達到CCAPnH時翻轉回去,重新計數;3、CL/CH是計數器;CCAPnL/CCAPnH是寄存器,單片機實時對比其與CL/CH的值是否相等;4、實現16位軟體定時可以用CL/CH的溢出中斷(同T0、T1。。),也可以使用捕獲模式,CCAPnL/CCAPnH中存放定時所要計數的值,CL/CH初值賦0,在捕獲中斷中清零CL/CH的值;5、在2中已說明。