电路部分全图

前面部分为相移电路,后部分为整流电路将正弦波转换成方波并将最低电压抬升到0V,使得单片机可以进行正常的电位读取。
相移电路部分

R1,C1,R2,C2部分起到选择正弦波频率的作用,滑动变阻器R3则起到相位调整作用,U2B起到对电压的放大作用。
整流电路部分

通过LM358进行整流将正弦波转换成方波形式,之后通过1N4153稳压管对输出波形进行电压抬升,后面的滑动变阻器可以用来调整输出电压大小。(电压抬升也可以通过LM358的3脚正极电压输入来实现) 期间出现的问题可能会有在连接单片机后,输出波形有一次被抬升,此时可以通过调整R10来恢复。
单片机软件代码部分
总体
相位差测量思路
将两个输出波形分别输入到单片机两个外部中断口,且将外部中断模式设置为下降沿中断,当检测到两个外部中断的输入波形都为高电平时,同时打开两个定时器,分别对两个输入进行计时,任意一个输入到下降沿时,其对应计时器关闭且记录相应数值,比较数值大小可得出超前滞后问题,两计数差和周期相比较则为相位差,周期则可通过每一次下降沿中断关闭定时器计数之后跳出中断打开定时器来实现测量。

#include "STC15F2K60S2.h"sbit INT0=P3^2;
sbit INT1=P3^3;unsigned long ck=0;unsigned long DATA0=0;
unsigned long DATA1=0;
unsigned long DATA2=0;
unsigned long DATAS=0;
unsigned long T=0;
unsigned int NUM0=0;
unsigned int NUM1=0;
unsigned int NUM2=0;
unsigned int NUM3=0;
unsigned long show=0;
unsigned int flag0=0;
unsigned int flag1=0;unsigned char code t_display[]={
//   0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
//black  -     H    J    K    L    N    o   P    U     t    G    Q    r   M    y0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};    //0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1
unsigned char code T_COM[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};/*********    **************/
sbit P_HC595_SER   = P4^0; //pin 14    SER     data input
sbit P_HC595_RCLK  = P5^4; //pin 12    RCLk    store (latch) clock
sbit P_HC595_SRCLK = P4^3; //pin 11    SRCLK   Shift data clock/***************显示传输函数*******************/
void Send_595(unsigned char dat)
{       unsigned char   i;for(i=0; i<8; i++){dat <<= 1;P_HC595_SER   = CY;P_HC595_SRCLK = 1;P_HC595_SRCLK = 0;}
}void main()
{int q;int j=0;P3M1=0x00;         P3M0=0x00;         IT0 = 1;                    EX0 = 1;                   IT1 = 1;                    EX1 = 1;                    EA = 1;         //设置下降沿中断及总线打开TMOD=0x01;    //设置定时器模式TH0 = 0;TL0 = 0;TH1 = 0;TL1 = 0;      while(1)    {if(flag0>=1)       {TR0=1; //测量周期通过第一个外部中断测量周期}  if(INT0==1&&INT1==1&&flag0==0&flag1==0)  //当两输入电流为第一次高电平状态时打开定时器{TR0 = 1;TR1 = 1;      }T=DATA2;if(DATA0>DATA1)                                                    {       ck=DATA0-DATA1;                                            show=ck*1000000/T*360*10/1000000;NUM3=9;}if(DATA1>DATA0){      ck=DATA1-DATA0;show=ck*1000000/T*360*10/1000000;NUM3=1;}NUM0=show/100;NUM1=show%100/10;NUM2=show%10;for(j=0;j<8;j++)  //显示传输函数{Send_595(T_COM[j]);switch(j){case 0: Send_595(0x00);break;case 1: Send_595(0x00);break;case 2: Send_595(0x00);break;case 3: Send_595(0x00);break;case 4: Send_595(t_display[NUM3]);break;case 5: Send_595(t_display[NUM0]);break;case 6: Send_595(t_display[NUM1]|0x80);break;case 7: Send_595(t_display[NUM2]);break;default:  break;}P_HC595_RCLK=1;P_HC595_RCLK=0;  for(q=0;q<100;q++);       }
}}//-----------------------------------------void exint0() interrupt 0
{if(flag0==0)     //第一次进入中断  {TR0=0;        //关闭定时器0DATA0=TH0*256+TL0; //记录DATA0  此数值和第二个中断内的DATA1用以计算相位差DATAS=DATA0;TH0=0;   //定时器清0TL0=0;}if(flag0>=1)   //不是第一次进入中断TR0=0;   //关闭定时器DATAS=DATAS+(TH0*256+TL0);   //记录本次周期数值并累加TH0=0;TL0=0;}if(flag0==1000)             //第一千个周期测量完毕时 取平均周期值{DATA2=DATAS/1000;}flag0=flag0+1;}void exint1() interrupt 2    //中断2部分
{                                                   TR1=0;                  //关闭定时器1if(flag1==0)     //如果是第一次进中断则记录DATA1{DATA1=TH1*256+TL1;    }}
//-----------------------------------------------

作者为初学者如有错误,欢迎大家指正提出。

此文章为作者原创

利用LM358制作相移电路并通过STC单片机检测相位差相关推荐

  1. 制作新版STC单片机WiFi下载器

    简 介: 基于WiFi的STC单片机下载器可以方便对STC的8A,8G,8H,15系列的单片机完成程序下载,方便了程序的开发与调试.特别适应于需要强磁隔离.运动平台的单片机开发,做到程序的快速更新与测 ...

  2. LM358制作简易电平灯

    LM358是业界通用运算放大器,今天让我们来通过LM358制作一个简易的电平灯,话不多说,先上效果图. 说到运算放大器,最简单的就是用其做电压比较器,电压比较器顾名思义是对两个输入电压的大小进行比较, ...

  3. 基于LM567制作的反射式红外检测电路,用于节能信标检测电路

    简 介: 本文测试了基于LM567的反射式光电管用于信标灯检测车模通过的功能.通过实验给出了对于原来信标灯的修改方案. 关键词: 节能型表,LM567,红外检测,智能车竞赛 #mermaid-svg- ...

  4. LM358运放电路参数设计-运算放大器-单位增益带宽及反馈并联电容

    [电路笔记]LM358运放电路参数设计 实验目的:利用LM358放大电路对电流取样信号进行放大,且模拟浪涌状态,外加300K的干扰信号,分析运放输出波形的变化,选取合适的参数. 一.对仅使用电阻反馈放 ...

  5. 自制STC单片机下载电路,再也不用人工干预了

    关注+星标公众号,不错过精彩内容 来源 | TsinghuaJoking STC单片机的程序下载使用ISP模式,下载程序通过微机上串口,或者USB转串口,与单片机上特定的下载端口相连进行下载.不需要任 ...

  6. 利用Unity3D制作简易2D计算器

    利用Unity3D制作简易2D计算器 标签(空格分隔): uiniy3D 1. 操作流程 在unity3DD中创建一个新项目 注意选择是2D的(因为默认3D) 在Assets框右键新建C#脚本 在新建 ...

  7. STC单片机高速下载电路改进

    01改进的思路 在2020年5月20日,收到了来自STC公司发送过来更新后的STC8H技术手册,其中对于原来连接在UART-TTL转换RS232芯片与STC8H下载端口的二极管和电阻可以去掉了. 这两 ...

  8. 为利用 QT 制作的项目设置图标

    为利用 QT 制作的项目设置图标 在 .pro 文件末尾添加语句 RC_ICONS = logo.ico logo.ico 即为图标文件的名称

  9. 动态给a标签赋值_怎样利用Excel制作抖音上的心形动态函数图像?

    最近在抖音上看到有用Excel制作心形动态函数图像,感觉很新奇,闲来无事,准备自己动手做做,遂网上搜了教程,按照教程一步步做,前面都很顺利,但到最后一部确卡壳,问了公司Excel大牛也未找到原因,知道 ...

最新文章

  1. linux利用* vim提权,linux 通过suid vim.basic文件提权
  2. Java面试笔试题大汇总三(最全+详细答案)
  3. 仅需2张图,AI便可生成完整运动过程
  4. PAT_甲级_1002_C语言
  5. Java程序员应该知道的10个Eclipse调试技巧
  6. 解决 : Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile
  7. 处理Redis里的数据
  8. 一加手机如何拷贝公交卡_手机瞬间变身公交卡!教你开通腾讯乘车卡
  9. 笔记 | 《机器学习》中主成分分析与度量学习
  10. n阶方程求逆c语言,n阶方阵求逆
  11. 详解 inner join with another 'dataframe' df1.join(df2, $df1Key === $df2Key)
  12. AE CS6 安装后启动报错BUG解决
  13. 世界500强企业面试经验分享
  14. 深入理解什么是Beta分布
  15. PC端视频录制软件大集合,看看有没有你用过的?
  16. springcontext.xml 中方言是红色的_12种方言都能听懂!讯飞智能录音笔A1评测:小如钥匙坠+复古磁带造型...
  17. js中出现错误:Uncaught TypeError: date.getDay is not a function
  18. 2018-8-10-三种方式设置特定设备UWP-XAML-view
  19. 我发现智能无人机课程里面讲了无人机建模这方面的理论知识
  20. 与matlab里面 imadjust 函数相同的python代码

热门文章

  1. CSP - J 2020 T2 直播获奖
  2. delphi tclientdataset字段显示type mismatch
  3. maps google android版,google maps中文安卓版
  4. shell脚本中的export和PWD的作用
  5. 网络安全·Wireshark抓取流量
  6. 计算机显卡又叫什么,显卡是什么?又有什么作用呢?
  7. Python pandas数据分列,分割符号固定宽度
  8. 最全FC交换机基础知识详解
  9. 统考英语计算机报名入口奥鹏,考试服务
  10. Web追踪——CNAME Cloaking