首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

并口示波器

并口示波器

并口示波器


虚拟示波器

这应该算是我第一次吧,刚出校门不久,老板赏识,给了一次难得的机会。。。。
从schàpcbà硬件调试à单片机程序,收获颇多。。。。

《第一版并口示波器》


第一版的板子,改动挺多的,运放都弄错了,7805功率也不够,换了一个金属壳的。。。。
反正不少问题。

《PCB图》


呵呵,看看当时的布线,走线中规中举横平竖直,这图是用trax画的,当时已经很少用这个画图的了,现在的小伙们可能都没听说过。

《原理图一》


《原理图二》




到现在看这款示波器的原理还是挺经典的,后面的逻辑部门全部用数字电路搭起来的,没用CPLD之类的芯片,AD
FIFO
都是挺经典的电路。图可能不是很清楚,感兴趣的可以联系我索要原理图。而且,这款示波器还是隔离的,市面上很少有隔离的虚拟示波器。。。。。



部分代码程序:
/*    --10mV
   |--20mV
   |---50mV
   |---100mV
幅度调整----|---200mV
   |---500mV
   |---1V  
   |---2V  
    ---5V
     ---AC
AC/DC/GND---|---DC
      ---GND
*/
//YA幅度调整及AC/DC/GND控制
void Prefix_con_YA (unsigned char AC/DC/GND,unsigned char Voltage)
{
unsigned char control_reg_YA = 0x00;

switch(AC/DC/GND){
  case 0 : control_reg_YA = control_reg_YA&0xDF;  break;//AC
  case 1 : control_reg_YA = control_reg_YA|0x20;  break;//DC
  case 2 : control_reg_YA = control_reg_YA&0x10|0x10;break;//GND
}
switch(Voltage){
  case 0 : control_reg_YA = control_reg_YA&0xE0|0X04;break;//10mV
  case 1 : control_reg_YA = control_reg_YA&0xE0|0X06;break;//20mV
  case 2 : control_reg_YA = control_reg_YA&0xE0|0X05;break;//50mV
  case 3 : control_reg_YA = control_reg_YA&0xE0|0X04;break;//100mV
  case 4 : control_reg_YA = control_reg_YA&0xE0|0X0A;break;//200mV
  case 5 : control_reg_YA = control_reg_YA&0xE0|0X09;break;//500mV
  case 6 : control_reg_YA = control_reg_YA&0xE0|0X08;break;//1V???????
  case 7 : control_reg_YA = control_reg_YA&0xE0|0X1A;break;//2V
  case 8 : control_reg_YA = control_reg_YA&0xE0|0X19;break;//5V
}
write_74HCT574_U04(control_reg_YA);
}
//YB幅度调整及AC/DC/GND控制
void Prefix_con_YB (unsigned char AC/DC/GND,unsigned char Voltage)
{
unsigned char control_reg_YB = 0x00;

switch(AC/DC/GND){
  case 0 : control_reg_YB = control_reg_YB&0xDF;  break;//AC
  case 1 : control_reg_YB = control_reg_YB|0x20;  break;//DC
  case 2 : control_reg_YB = control_reg_YB&0x10|0x10;break;//GND
}
switch(Voltage){
  case 0 : control_reg_YB = control_reg_YB&0xE0|0X04;break;//10mV
  case 1 : control_reg_YB = control_reg_YB&0xE0|0X06;break;//20mV
  case 2 : control_reg_YB = control_reg_YB&0xE0|0X05;break;//50mV
  case 3 : control_reg_YB = control_reg_YB&0xE0|0X04;break;//100mV
  case 4 : control_reg_YB = control_reg_YB&0xE0|0X0A;break;//200mV
  case 5 : control_reg_YB = control_reg_YB&0xE0|0X09;break;//500mV
  case 6 : control_reg_YB = control_reg_YB&0xE0|0X08;break;//1V
  case 7 : control_reg_YB = control_reg_YB&0xE0|0X1A;break;//2V
  case 8 : control_reg_YB = control_reg_YB&0xE0|0X19;break;//5V
}
write_74HCT574_U05(control_reg_YB);
}
//YA偏移量控制,YB偏移量控制
void offset (unsigned int quantity)
{
//quantity = setbuf[2] + (setbuf[3]<<0x08) + (setbuf[4]<<0x10);
write_LT1446(quantity);
}
//时基控制
/*    ---0.5us/0.2us--20M
   |---1us/2us  --10M
   |---5us   --2M
   |---10us/20us --1M
   |---50us   --200K
   |---0.1ms/0.2ms--100K
时基控制-|---0.5ms  --20K
   |---1ms/2ms  --10K
   |---5ms   --2K
   |---10ms/20ms --1K
   |---50ms   --200Hz
   |---0.1s/0.2s --100Hz
   |---0.5s   --20Hz
   |---    --10Hz
   |---    --2Hz
    ---    --1Hz
*/
void time_base (unsigned char time)
{
switch(time){
  case 0  : write_74HCT574_U31(0XF8);break;//20M
  case 1  : write_74HCT574_U31(0XF9);break;//10M
  case 2  : write_74HCT574_U31(0XFA);break;//2M
  case 3  : write_74HCT574_U31(0XFB);break;//1M
  case 4  : write_74HCT574_U31(0XFC);break;//200K
  case 5  : write_74HCT574_U31(0XFD);break;//100K
  case 6  : write_74HCT574_U31(0XFE);break;//20K
  case 7  : write_74HCT574_U31(0XFF);break;//10K
  case 8  : write_74HCT574_U31(0XF0);break;//2K
  case 9  : write_74HCT574_U31(0XF1);break;//1K
  case 10 : write_74HCT574_U31(0XF2);break;//200Hz
  case 11 : write_74HCT574_U31(0XF3);break;//100Hz
  case 12 : write_74HCT574_U31(0XF4);break;//20Hz
  case 13 : write_74HCT574_U31(0XF5);break;//10Hz
  case 14 : write_74HCT574_U31(0XF6);break;//2Hz
  case 15 : write_74HCT574_U31(0XF7);break;//1Hz
}
}
//同步电平控制
void trig_level (unsigned char level)
{
//level = setbuf[6] + (setbuf[7]<<0x08);
write_LT1451(level);
}
//触发沿控制
void trig_pol (unsigned char pol)
{
switch(pol){
  case 0 : write_74HCT574_U09(0XF7);  break;//上升沿
  case 1 : write_74HCT574_U09(0XF7);  break;//下降沿
}
}
//同步源控制
void trig_fountain (unsigned char fountain)
{
switch(fountain){
  case 0 : write_74HCT574_U09(0XF7);  break;//YA同步
  case 1 : write_74HCT574_U09(0XF7);  break;//YB同步
  case 2 : write_74HCT574_U09(0XF7);  break;//外同步
}
}
//YA/YB选择
//停止/开始
void start_stop(unsigned char st)
{
switch(st){
  case 0 : write_74HCT574_U09(0XF7);  break;//停止
  case 1 : write_74HCT574_U09(0XF7);  break;//开始
}
}
//发送设置
void signal_setup()
{
//前置设置
switch(setbuf[0]){
  case 0 : Prefix_con_YA ();  break;//AC/10mV
  case 1 : Prefix_con_YA ();  break;//AC/20mV
  case 3 : Prefix_con_YA ();  break;//AC/50mV
  case 4 : Prefix_con_YA ();  break;//AC/100mV
  case 5 : Prefix_con_YA ();  break;//AC/200mV
  case 6 : Prefix_con_YA ();  break;//AC/500mV
  case 7 : Prefix_con_YA ();  break;//AC/1V
  case 8 : Prefix_con_YA ();  break;//AC/2V
  case 9 : Prefix_con_YA ();  break;//AC/5V
  case 2 : Prefix_con_YA ();  break;//AC/50mV
}
}



下面是当时市面存在的比较经典的虚拟示波器:

《普源并口示波器》


《迪阳并口示波器》



《汉泰USB示波器》




细节决定成败!
返回列表