zhaocongxue
级别: 略有小成
精华主题: 0
发帖数量: 381 个
工控威望: 477 点
下载积分: 1180 分
在线时间: 166(小时)
注册时间: 2007-10-27
最后登录: 2024-04-07
查看zhaocongxue的 主题 / 回贴
楼主  发表于: 2012-08-18 09:43
系统程序:
#include <c8051f000.h>
typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned long ulong;
sbit P1_0=P1^0;
sbit P1_2=P1^2;
sbit P0_6=P0^6;
sbit P0_4=P0^4;
sbit P0_7=P0^7;
sbit P1_3=P1^3;
sbit P1_4=P1^4;
#define CON 28585756
uint t[4]={0,0,0,0};
uint i=0,a=0,t1=0,t2=0,e=0,tt=0;
char d=1,n=1,jj=0,j=0,m=0;

union tcfint16{
      uint myword0;
      struct{uchar hi;uchar low;}bytes0;
      }myint16;
union tcfint116{
      uint myword1;
      struct{uchar hi;uchar low;}bytes1;
      }myint116;
void pca1()                            //设置脉冲捕捉
{    
EIE1=0x00;                          //禁止脉冲捕捉中断
PCA0MD=0x00;                      //系统时钟12分频,禁止pca中断
PCA0CN=0x00;                       //CR=0
PCA0CPM0=0x20;
PCA0CPM1=0x20;                      //正沿捕捉
}
void DAC0(uint DAChl)
{
myint16.myword0=DAChl;
DAC0L=myint16.bytes0.low;
DAC0H=myint16.bytes0.hi;
}
void delay()
{
uint xxxx,xxx=999,xx,x;
for(x=0;x<400;x++)
   for(xx=0;xx<x;xx++)
   {
     xxxx=xxx/1000;
    }
}
main()                              //主函数
{
uint t0;
uint dk1=0,dk2=0;
WDTCN=0xde;
WDTCN=0xad;            //关看门狗
XBR0=0x12;
XBR2=0x40;               //交叉开关设置,外部中断无引脚
XBR1=0x00;
OSCICN=0x95;             //内部时钟4MHz
DAC1CN=0;               //DCA1无效
PRT0CF=0xc0;
PRT1CF=0x18;
CKCON=0xe7;            //系统时钟12分频
TMOD=0x11;
TCON=0x00;               //外部中断请求及标志位0
TH0=0x00;
TL0=0x00;
TH1=0x00;
TL1=0x00;
pca1();                   //pca初始化  
REF0CN=0x03;
DAC0CN=0x84;             //DCA0使能,左对齐
  P1_0=0;
  P1_2=1;
  P0_6=0;
  P0_7=0;
  P1_3=0;
  P1_4=0;
   EA=1;                          //中断设置
   ET0=1;
   PT0=1;
   ET1=1;
   PT1=1;
   a=0x91A0;
   //a=0xF2A0;
     DAC0(a);
    delay();    
//****************************测频*****************************//
  while(1){
   for(i=1;i<4;i++){
    CCF0=0;                         //变频上升沿标志
   while(CCF0==0)
   {}
   TR1=1;
   CCF0=0;                          //变频上升沿标志
   while(CCF0==0)
   {}
   TR1=0;
myint116.bytes1.low=TL1;
myint116.bytes1.hi=TH1;
TH1=0;
TL1=0;
if(myint116.myword1>6000&&myint116.myword1<30000)  //剔除粗大误差值
{m++;
t[m]=myint116.myword1;
}
else
i--;}
    for(i=1;i<=2;i++)                //中值滤波
     for(jj=1;jj<=3-i;jj++)
       if(t[jj]>t[jj+1])
         {t[0]=t[jj];
         t[jj]=t[jj+1];
         t[jj+1]=t[0];
         }  
    dk1=t[2];                        
    for(i=0;i<4;i++)
    t=0;
    n=1;                           //进入鉴频鉴相
//***************************鉴频*****************************//
while(d==1){                        //测量变频周期
   for(i=1;i<4;i++){
    CCF1=0;                       //变频上升沿标志
   while(CCF1==0)
   {}
   TR1=1;
   CCF1=0;                         //变频上升沿标志
   while(CCF1==0)
   {}
   TR1=0;
myint116.bytes1.low=TL1;
myint116.bytes1.hi=TH1;
TH1=0;
TL1=0;
if(myint116.myword1>6000&&myint116.myword1<30000)
{m++;
t[m]=myint116.myword1;
}
else
i--;                   }
    for(i=1;i<=2;i++)                  //中值滤波
     for(jj=1;jj<=3-i;jj++)
       if(t[jj]>t[jj+1])
         {t[0]=t[jj];
         t[jj]=t[jj+1];
         t[jj+1]=t[0];
         }  
    dk2=t[2];
    for(i=0;i<4;i++)
    t=0;
    if(dk2>dk1+2)                       //鉴频
     {a=a+192;
      DAC0(a);}
     else
      d=0;
     }
    a=0xF2A0;
    DAC0(a);
//****************************鉴相*****************************//     TR0=1;
    while(n==1)
    {
    CCF1=0;
    while(CCF1==0)
    {}
    TR1=1;
    CCF0=0;
    while(CCF0==0)
    {}
    TR1=0;
    myint116.bytes1.low=TL1;
    myint116.bytes1.hi=TH1;
      TH1=0;
      TL1=0;
      t1=myint116.myword1;//假设变频超前测t1
      if(t1>=(dk1-700))
      t1=t1-(dk1-700);
      else
      t1=700+t1;             //补偿
    CCF0=0;
    while(CCF0==0)
    {}
    TR1=1;
    CCF1=0;
    while(CCF1==0)
    {}
    TR1=0;
    myint116.bytes1.low=TL1;
    myint116.bytes1.hi=TH1;
      TH1=0;
      TL1=0;
      t2=myint116.myword1;      //假设工频超前测t2
    f(t2>=700)
    t2=t2-700;
    else
    t2=dk1-(700-t2);           //补偿
      if(t1<=t2)               //变频超前工频
      {if(t1<250)
       {a=CON/dk1*16-t1;
       DAC0(a);}
       else{
       a=CON/dk1*16-250;
       DAC0(a);}
       n=0;                   //转入测频
       }
      else                      //工频超前变频
      {if(t2<250)
       {a=CON/dk1*16+t2;
       DAC0(a);}
        else{
       a=CON/dk1*16+250;
       DAC0(a);}
       n=0;                    //转入测频
      }
    }
  }
}
void t0_ISR()interrupt 1     //中断服务程序
{TH0=0x00;
TL0=0x00;
TF0=0;
j++;
if(j==80)
{j=0;
P0_7=1;}
}
void t1_ISR()interrupt 3   //中断服务程序
{TH1=0x00;
TL1=0x00;
TF1=0;
}


附件: 变频工频锁相程序.doc (40 K) 下载次数:19
网站提示: 请不要用迅雷下载附件,容易出错
yamqq
雅马哈,爱普生,电装机器人。
级别: 网络英雄

精华主题: 0
发帖数量: 1717 个
工控威望: 5539 点
下载积分: 24528 分
在线时间: 297(小时)
注册时间: 2008-05-05
最后登录: 2024-04-01
查看yamqq的 主题 / 回贴
1楼  发表于: 2012-08-18 09:51
请问,有谁能给我一百万块钱吗?
这个人很懒,什么也没有留下!
二手工控电器
且行且珍惜
级别: 工控侠客
精华主题: 0
发帖数量: 2780 个
工控威望: 4406 点
下载积分: 206254 分
在线时间: 3111(小时)
注册时间: 2008-02-22
最后登录: 2024-04-30
查看二手工控电器的 主题 / 回贴
2楼  发表于: 2012-08-18 10:10
这可不是一小时二小时一天二天可解决问题了!!!没酬劳估计没人会帮忙!!
欢迎捧场光临工控自动化小店!供应二手拆机PLC 、伺服、步进、变频器、3相固态调压调功模块、接线端子等等
http://shop115113109.taobao.com/?spm=a1z10.5-c.0.0.L6cazp&v=1
twt97
级别: 略有小成
精华主题: 0
发帖数量: 182 个
工控威望: 345 点
下载积分: 906 分
在线时间: 133(小时)
注册时间: 2009-04-03
最后登录: 2021-01-21
查看twt97的 主题 / 回贴
3楼  发表于: 2012-08-18 10:24
这是C程序,要译成梯形图光是看程度很难译,加上工作原理要求和电路原理图就好点
dptyl
如果爱,请深爱,不爱请离开!
级别: 略有小成
精华主题: 0
发帖数量: 118 个
工控威望: 229 点
下载积分: 14630 分
在线时间: 107(小时)
注册时间: 2012-05-19
最后登录: 2021-01-22
查看dptyl的 主题 / 回贴
4楼  发表于: 2012-08-18 10:33
哇嘿,难怪我一点都看不明白。
andy_gao
级别: 略有小成
精华主题: 0
发帖数量: 281 个
工控威望: 445 点
下载积分: 2179 分
在线时间: 225(小时)
注册时间: 2012-08-02
最后登录: 2024-04-07
查看andy_gao的 主题 / 回贴
5楼  发表于: 2012-08-18 11:39
把单片机的C程序转化为PLC程序,还不如按照控制要求,自己从新编写来的快
富阳工控
灯泡电工
级别: 家园常客
精华主题: 0
发帖数量: 337 个
工控威望: 536 点
下载积分: 23611 分
在线时间: 157(小时)
注册时间: 2012-07-06
最后登录: 2024-04-15
查看富阳工控的 主题 / 回贴
6楼  发表于: 2012-08-18 11:55
各位用C语言编程序难吗?
tkggtdkjpl
工欲善其事,必先利其器!
级别: 网络英雄

精华主题: 1 篇
发帖数量: 3413 个
工控威望: 20949 点
下载积分: 20678 分
在线时间: 1701(小时)
注册时间: 2010-01-03
最后登录: 2024-04-30
查看tkggtdkjpl的 主题 / 回贴
7楼  发表于: 2012-08-18 12:33
见过把PLC程序转成单片机程序的,把单片机程序转成PLC程序还是第一次看到
C语言你能编,PLC你不能编我觉得很好奇!
自动化单机,生产线,项目编程调试!
songzuolei
中达电通
级别: 网络英雄
精华主题: 0
发帖数量: 381 个
工控威望: 6656 点
下载积分: 4158 分
在线时间: 363(小时)
注册时间: 2010-05-03
最后登录: 2023-05-26
查看songzuolei的 主题 / 回贴
8楼  发表于: 2012-08-18 15:29
楼主在做梦没有啊
代理台达变频器,PLC,触摸屏,设备维修,控制柜制作      QQ;171986645  手机13921226012
陈大围
工控新人,还请多多指教
级别: 论坛先锋

精华主题: 0
发帖数量: 876 个
工控威望: 1158 点
下载积分: 8908 分
在线时间: 1811(小时)
注册时间: 2011-04-17
最后登录: 2024-04-24
查看陈大围的 主题 / 回贴
9楼  发表于: 2012-08-19 10:13
看懂c的控制要求,在依要求编PLC程序
专心学工控技术,请各位帮忙指教
langman
级别: 家园常客
精华主题: 0
发帖数量: 576 个
工控威望: 606 点
下载积分: 1500 分
在线时间: 227(小时)
注册时间: 2008-06-23
最后登录: 2021-04-09
查看langman的 主题 / 回贴
10楼  发表于: 2012-08-19 14:05
不能在百度或者狗狗上在线翻译么?
朗工自动化,承接自动化改造工程:PLC控制系统、伺服系统、气动、步进、节能灯设备、机械手、集成电路测试设备、变频器、人机界面,欢迎洽谈,