日韩在线不卡免费视频一区,日韩欧美精品一区二区三区经典,日产精品码2码三码四码区,人妻无码一区二区三区免费,日本feerbbwdh少妇丰满

  • 回復
  • 收藏
  • 點贊
  • 分享
  • 發(fā)新帖

求51單片機測交流電壓的程序

stc12c5a60s2利用定時器中斷測電壓值  應該怎么樣寫程序  我寫出的程序是比較法  換幾個直流電還可以 交流電一直在閃屏 示數(shù)也不對………………  求指導
全部回復(8)
正序查看
倒序查看
2013-09-05 10:04
為何要用中斷?
0
回復
2013-09-05 10:06
@賀赫無名
為何要用中斷?

把AC電壓再轉成DC,再用AD轉吧。

除非你是用外掛的AD,這個AD是必須能直接將AC轉成有效值的二進制就可以

如電表用的芯片

0
回復
無衣
LV.6
4
2013-09-08 20:42

用單片機內的高速AD轉換,用外中斷找到過零點,測出半個周期內的N個電壓值,然后求均方根值.用以上方法可以同時測頻率和有效值.

0
回復
2013-09-09 08:18
@無衣
用單片機內的高速AD轉換,用外中斷找到過零點,測出半個周期內的N個電壓值,然后求均方根值.用以上方法可以同時測頻率和有效值.

你這樣太耗MCU時間了。。STC的MCU速度是可以達100K,但你1秒就中斷100次,還得采樣幾十次,對于顯示肯定會有影響了。

   我用過片外串口總線的24位AD,速度需好等上mS才行哦。。。

0
回復
anges
LV.3
6
2013-09-12 16:41
@賀赫無名
你這樣太耗MCU時間了。。STC的MCU速度是可以達100K,但你1秒就中斷100次,還得采樣幾十次,對于顯示肯定會有影響了。  我用過片外串口總線的24位AD,速度需好等上mS才行哦。。。
**此帖已被管理員刪除**
0
回復
2013-09-19 07:23
@anges
**此帖已被管理員刪除**

用AD采樣吧

我是這樣做的,我測量220V 50Hz交流電壓有效值和有效功率

  

0
回復
2013-09-22 22:51

樓主 可以請教一下問題嗎 就是這個單片機的ADC的編程問題和外圍連接問題 我弄了一個這樣的程序 不過好像有誤差挺大的,還有那個外部的連接問題怎樣改 加入我要測量超過5v的電壓

#include "Text2.h"   //stc12c5a60s2頭文件
#define uchar unsigned char
#define uint unsigned int
unsigned char data  adc_dat =0x30;
uchar ge,shi,shifen,baifen,qianfen;
float vin,R;
int  vins;
sbit dula=P3^6;
uchar code table[]={ 0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};   //有小數(shù)點的
uchar code table1[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90} ; //沒小數(shù)點的
void display(uchar shi,uchar ge,uchar shifen,uchar baifen,uchar qianfen);
void delay(uint z)          //延時子函數(shù)
{
 uint x,y;
 for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
void main(void)
{
 unsigned long i;
 unsigned char status;
 ADC_CONTR|=0x80;  //打開AD轉換電源
 for(i=0;i<10000;i++);  //延時
 P1ASF=0x04;     //選擇通道P1.2轉換
    ADC_CONTR=0xE2;   
 for(i=0;i<10000;i++);  //延時
    while(1)      //循環(huán)進行AD轉換
 {
  ADC_CONTR|=0x08; //重新進行AD轉換
  status=0;
  while(status==0)  //等待AD轉換結束
  {
  
   status=ADC_CONTR&0x10;

  }
  ADC_CONTR&=0xE7;  //將ADC  FLAG清零
  adc_dat=ADC_RES;  //保存結果
  
       for(i=100;i>0;i--)   //轉換100次
   {
    adc_dat=ADC_RES;
  
    R+=adc_dat;
    }
    R/=100.0;  //求平均值   
 
    vin=R*5.0/256;
  vin=vin*1000;
     vins=(int)vin;
  ge=vins/1000%10; // 分離數(shù)據(jù)
  shi=vins/1000/10;
  shifen=vins%1000/100;
  baifen=vins%1000%100/10;
  qianfen=vins%1000%100%10;
  display(shi,ge,shifen,baifen,qianfen);   
   
 }
}

void display(uchar shi,uchar ge,uchar shifen,uchar baifen,uchar qianfen)   
{
  dula=1;
  P2=0xfe;
  dula=0;
  dula=1;   
  P0=table1[shi];
  dula=0;
  delay(5);
  

  dula=1;
  P2=0xfd;
  dula=0;  
  dula=1;
  P0=table[ge];
  dula=0;
  delay(5);

  dula=1;
  P2=0xfb;
  dula=0;  
  dula=1;
  P0=table1[shifen];
  dula=0;
  delay(5);
  
  dula=1;
  P2=0xf7;
  dula=0;  
  dula=1;
  P0=table1[baifen];
  dula=0;
  delay(5); 

  dula=1;
  P2=0xef;
  dula=0;  
  dula=1;
  P0=table1[qianfen];
  dula=0;
  delay(5);
}

0
回復
mdbmhy
LV.1
9
2016-08-02 10:49
@pads2005pcb
用AD采樣吧我是這樣做的,我測量220V50Hz交流電壓有效值和有效功率[圖片]  

你好,我對你的這個方案感興趣,可以轉讓嗎

0
回復
發(fā)