⑴ 為什麼51單片機的定時器計時不準確
中斷函數裡面盡量少放語句,如果產生脈沖波形就只放一個
⑵ 單片機延時誤差的問題,求大神解答
一般是由於C語言代碼轉換成匯編代碼後,語句的多少不同,造成累計誤差。
例如: while(x--) ; 和 while(--x); 的匯編語言代碼長短是不同的
解決,最好用定時器代替延時函數,或者精確計算匯編代碼的C代碼,或C語言中嵌入匯編代碼 等
⑶ PLC程序如何消除累積誤差
如果是通用口脈沖控制:那麼DOG+Z方式回原點,可以保證每次起始點是一樣的。以前做轉盤設備的時候,是這樣處理的。這種架構一直做相對運動,的確會產生累積誤差。DOg+Z方式也可以用一次絕對值定位零點來替代,當然如果前進了很多,這個動作一般無法接受。
如果位置信息反饋到控制器,或者是運動匯流排伺服做的:那麼改變下編程,用相對運動方式,命令脈沖= 目標位置 - 當前位置。這樣就可以補償累積誤差。
⑷ 基於單片機的萬年歷設計的誤差主要有哪些
看你採用什麼方法,如果採用時鍾晶元,如DS1302,誤差只與外部32768晶振有關,如果以單片機本身定時器來實現,則與單片機的晶振有關,與程序中中斷的處理也有關系,有時一兩條指令看似對時間影響𣎴大,但長時累積也會表現出明顯誤差
⑸ 基於51單片機的頻率測量及測量誤差
可以用對單位時間內 脈沖個計數的方法來實現,用2個 定時/計數器 ,一個作為定時器,定時50 ms,累積10次或20次,即0.5S或1S
另外一個作為計數器,對外部脈沖計數
誤差與晶振頻率准確度有關,測量與時間有關的量,你本身的時間當然要准確。如果所測信號頻率高,可以測0.2s或0.5S內的脈沖數,可以防止溢出,如果頻率低,可以測1S或2S內的脈沖數,以減小誤差,但響應速度慢一些。
程序比較簡單,以下供參考
void init()//初始化設置
{
TMOD=0x15;//定時器0作為計數器,定時器1作為定時器用
TH0=0;//計數器清0
TL0=0;
EA=1;//開總中斷
ET1=1;//允許定時器1中斷
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR0=1;//啟動計數器
TR1=1;//啟動定時器
aa=0;
}
void main()//主程序
{
init();//初始化
while(1)//循環程序
{
dd=bb*256+cc;//0.5S的計數值
ee=2*dd;//換算為1秒鍾的計數值
if(aa==1)
{
if(TH0>12)//預判斷,50ms內TH0>12,1s內計數值將超過可計數的最大值65535
fm=1;//報警
}
display4(ee);//顯示
fm=0;//報警停止
}
}
void timer1()interrupt 3//注意:定時器1的中斷序號為3
{
aa++;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
if(aa==10)//中斷10次,共0.5S
{
TR0=0;//暫停計數
aa=0;
bb=TH0;//讀出計數器數據
cc=TL0;
TL0=0;//計數器清0
TH0=0;
TR0=1;//重新啟動計數器
}
}
⑹ 單片機:用計時器給LCD計時間每一秒可能都會多個幾毫秒,要怎麼能減小這種誤差
千分之幾的誤差,用定時器計時的這種方法誤差很難消,
實在想消的話,可以用下面幾種法子試試:
1. 挑選晶振,晶振頻率有差,挑選個頻率高一點的。
2. 調大計數器的初值,然後在中斷服務 子程序中讓計數器停止計數、馬上再啟動計數,目的是微微調整定時的周期。
兩種方法都較難調好,要慢慢試,最好改其它定時法。比如用1302等晶元
⑺ 12MHZ單片機串口通信時老是出錯~從單片機傳到上位機~00h變成80h 01h變成81h怎麼解決這個誤差~求解~謝謝~
使用11.0592MHZ晶振,或降低波特率,找到誤差小於5%的波特率發生器那個波特率。
⑻ 如何用單片機的定時器精確定時
用單片機本身的定時來做電子表,我個人認為,這種方法不可取,
現在有很多時鍾晶元,與單片機介面也很簡單,它有專門的外部晶振,而且在時間精確是,是絕對准確的。只要你能夠按照時序與它產生通訊,就可以達到時間的精確。
畢竟,單片機本身不是專讓用來做時鍾的,而專門的時鍾晶元才會有此條件。
這是我們公司主板時鍾電路圖,此晶元除了時鍾功能,還自帶2KBFLASH存儲器,雙功能,你可以參考一下。比起你用單片機模擬定時,效率高得多,而且與單片機的介面只有兩根線,介面簡單,操作方便,關鍵還可以當EPPROM用。
如果你要具體資料,可以聯系我,我還可以給你提供程序參考
⑼ 系統誤差有累積性那要怎麼消除誤差
平差消除。知道初始誤差,再知道終極誤差,相減再除以節點數,就是每個節點的平均誤差。節點數的累加數乘以每節點的平均誤差,就是這個節點的誤差。