找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6926|回复: 3
打印 上一主题 下一主题
收起左侧

单片机+DAC0832数控直流电源程序+电路图

[复制链接]
跳转到指定楼层
楼主

功能说明:
本作品采用DAC0832作为电压信号输出。DAC0832是一款采用CMOS工艺制成的单片电流输出型8位数 / 模转换器DAC0832有三种工作方式:不带缓冲工作方式,单缓冲工作方式,双缓冲工作方式。因为输出电压量程为10V,VREF基准电压范围为-10V---+10V,基准电压可以为5.12V,这样在DAC0832的8脚输出电压的分辨率为:即D/A输入数据端每增加1,电压增加0.02V。D/A的电压输出端接放大器OP27的输入端,放大器的放大倍数为5 ,才能得到输出电压的电压分辨率:0.02V×5=0.1V这样当调节电压的时候,以每次0.1V的梯度增加或者降低电压。
硬件电路图
1.波形转换与放大部分
选用51系列的单片机产生和控制波形。数模转换器用的是DAC0832,本方案中DAC0832采用单缓冲模式。
电路如图五所示,P0口和DAC0832的数据口直接相连,接地,DAC数据寄存器处于直通状态,ILE=1,和连接后接P2.0。在选中该片的地址(=0)时,写入数字量,该数字信号就立即传送到DAC输入寄存器,并直通至DAC数据寄存器,经过短暂的建立时间,即可以获得相应的模拟电压。 写入操作结束, 和立即变为高电平,写入的数据被输入寄存器锁存,直到再次写入刷新。

单片机源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char

  3. sbit dp=P1^4;
  4. sbit sh=P1^5;

  5. void delay(unsigned int t);
  6. uchar Getkey(void);
  7. void Disp(uchar n);

  8. uchar Disptab[10]={0x11,0x7d,0x23,0x29,0x4d,0x89,0x81,0x3d,0x1,0x9};

  9. main()
  10. {
  11.     uchar key;
  12.     char Vol1=0x00,Vol2=0x00;
  13.     Disp(Disptab[Vol2]);
  14.         Disp(Disptab[Vol1]-1);
  15.         P0=0x00;
  16.     while(1)
  17.         {
  18.             key=Getkey();
  19.                 switch(key)
  20.                 {
  21.                     case 0x01:break;
  22.                         case 0x02:break;
  23.                         case 0x04:if(Vol1==0&&Vol2==0)break;
  24.                                   Vol2--;
  25.                                   if(Vol2<0)
  26.                       {
  27.                           Vol2=9;Vol1--;
  28.                       }
  29.                       Disp(Disptab[Vol2]);
  30.                               Disp(Disptab[Vol1]-1);
  31.                               P0=4.3*(Vol1*10+Vol2);
  32.                                   break;
  33.                         case 0x08:if(Vol1==9&&Vol2==9)break;
  34.                                   Vol2++;
  35.                                   if(Vol2==10)
  36.                                   {
  37.                                      Vol2=0x00;Vol1++;
  38.                       }
  39.                       Disp(Disptab[Vol2]);
  40.                               Disp(Disptab[Vol1]-1);
  41.                               P0=4.3*(Vol1*10+Vol2);
  42.                       break;
  43.                         default:break;
  44.                 }
  45.         }
  46. }

  47. uchar Getkey(void)
  48. {
  49.     uchar key;
  50.     P1|=0x0f;
  51.         if(!(~(P1|0xf0))) return 0x00;
  52.         delay(0x20);
  53.     if(!(~(P1|0xf0))) return 0x00;
  54.         key=~(P1|0xf0);
  55.         while(~(P1|0xf0));
  56.         return key;
  57. }

  58. void delay(unsigned int t)
  59. {
  60.     while(--t);
  61. }

  62. void Disp(uchar n)
  63. {
  64.     uchar i;
  65.     for(i=0;i<8;i++){
  66.         sh=0;
  67.         if(0x80&n){
  68.             dp=1;
  69.         }
  70.         else{
  71.             dp=0;
  72.         }
  73.         sh=1;        
  74.         n=(n<<1)+1;
  75.     }
  76. }
复制代码

所有资料51hei提供下载:
数控直流电源.rar (298.51 KB, 下载次数: 178)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:375451 发表于 2020-3-27 15:29 | 只看该作者
很不错的一个应用
回复

使用道具 举报

板凳
ID:846847 发表于 2021-1-17 16:13 | 只看该作者
请问你的设计输出电压是0-10V吗?有过流、短路保护吗?
回复

使用道具 举报

地板
ID:34268 发表于 2022-5-10 21:39 | 只看该作者
显然没有过流短路保护
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表