在开发臭氧发生器的时,我们使用UV灯来实现臭氧的产生。而UV灯的强度决定了臭氧产生的浓度,UV灯的光强则与其控制电压密切相关。所以我们要控制产生的臭氧的浓度就需要调节其控制电压。我们选择了AD5663这一模拟量输出模块来实现这一点。

1AD5663简介

AD5663属于nanoDAC系列,是低功耗、双通道、16位缓冲电压输出数模转换器(DAC),采用2.7V至5.5V单电源供电。AD5663采用多功能三线式串行接口,能够以最高50 MHz的时钟速率工作,并与标准SPI、QSPI、MICROWIRE、DSP接口标准兼容。它内置片内精密输出放大器,能够实现轨到轨输出摆幅。其功能框图如下所示:

2、硬件设计

我们用来产生臭氧的UV灯,其控制电压约需要在AC300V到AC1500V的范围,工作频率约为10kHz到20kHz的范围内,当然选用的灯不一样可能会有些许差异。为了达到这个目的,我们使用两个PWM控制电路产生低压交流电源,然后通过高频变压器产生我们需要的交流电源。基于此,我们先要有一个连续可调的低压直流电源才有可能通过PWM控制电路达到我们想要的结果。如下图即是我们电压控制电路:

上图中我们采用LM2596S-ADJ作为电源模块,以AD5663作为电源调节输出。LM2596S的反馈电压要求在1.23V,二极管的1N4001的管压降设定为0.5V,根据R27、R28、R29几个电阻电路就可以实现LM2596S输出电压的调节。由于二极管的存在,AD5663需要输出大于1.73V(1.23V+0.5V)以上的电压才能起到调节效果。我们设返回电压为Vf=1.23V,LM2596S的输出电压为Vo,二极管的管压降为Vd,AD5633的输出电压为Vs于是我们可以得到一个等式:

在上述等式中Vf=1.23V是确定的,二极管的管压降Vd=0.5V也是确定的,所以等式有2中情况:第一种是AD5663的输出电压小于等于1.73时,AD5663的输出对电压输出没有影响;第二种是当AD5663的输出电压大于1.73时,可以通过AD5663的输出调节LM2596S的输出,而且为线性关系。

3、软件设计

经过上述的分析和设计,相关软件的编写就变得相对容易了。AD5663有一个输入移位寄存器,对AD5663操作都是通过输入移位寄存器来实现的。

3.1、输入移位寄存器

输入移位寄存器为24位宽。前2位是无关位,后续三位是命令位C2至C0,然后是3位DAC地址A2至A0,其结构如下:

3.2、软件复位

软件复位也是通过操作输入移位寄存器来实现的。命令位的定义没有变化,数据段的最后一位作为软件复位的模式设定,其它位无效。最后一位为0时,会清除DAC寄存器和输入寄存器,而最后一位为1时清除掉全部寄存器。最后一位为1时,实际就是上电复位模式。输入移位寄存器的数据格式如下:

其软件实现如下:

void Ad5663SoftwareReset(AD5663ResetType resetMode,void (*WriteByteToAD5663)(uint8_t))
{uint32_t inputShiftData=0;if(resetMode==ResetSoftware){inputShiftData=RESET|Register_Reset_Software;}if(resetMode==ResetPoweron){inputShiftData=RESET|Register_Reset_Poweron;}uint8_t txData[3];txData[0]=inputShiftData>>16;txData[1]=inputShiftData>>8;txData[2]=inputShiftData;WriteByteToAD5663(txData[0]);WriteByteToAD5663(txData[1]);WriteByteToAD5663(txData[2]);
}

3.3、上电复位

上电复位也是通过操作输入移位寄存器来实现的。命令位的定义没有变化,数据段的DB5和DB4定义掉电的模式,而DB1和DB0定义操作的通道。输入移位寄存器的数据格式如下:

其软件实现如下:

/*设置AD5663上电/掉电工作模式*/
void Ad5663PowerUpDownMode(DACHANNEL channel,AD5663PowerdownType powerdownType,void (*WriteByteToAD5663)(uint8_t))
{uint32_t inputShiftData=0;if(channel==DAChannelA){inputShiftData=DAC_A;}if(channel==DAChannelB){inputShiftData=DAC_B;}if(channel==ChannelAll){inputShiftData=DAC_A|DAC_B;}switch(powerdownType){case NormalOperation:{inputShiftData=inputShiftData|Normal_Operation|Power_Down;break;}case R1K2GND:{inputShiftData=inputShiftData|_1K_GND|Power_Down;break;}case R100K2GND:{inputShiftData=inputShiftData|_100K_GND|Power_Down;break;}case ThreeState:{inputShiftData=inputShiftData|Three_State|Power_Down;break;}}

3.4、输出操作

对各输出通道值的操作也是同过输入移位寄存器来完成。其数据格式如前面输入移位寄存器的介绍。后16位是数据(0-65535),然后是3位地址和3位命令。通讯的时序图如下所示:

设置DA通道的值具体代码如下:

void SetAD5663ChannelValue(DACHANNEL channel,uint16_t data,void (*WriteByteToAD5663)(uint8_t))
{uint32_t inputShiftData=0;if(channel==DAChannelA){inputShiftData=WriteTo_Update_DAC_Channel|DAC_Channel_A|data;}if(channel==DAChannelB){inputShiftData=WriteTo_Update_DAC_Channel|DAC_Channel_B|data;}uint8_t txData[3];txData[0]=inputShiftData>>16;txData[1]=inputShiftData>>8;txData[2]=inputShiftData;WriteByteToAD5663(txData[0]);WriteByteToAD5663(txData[1]);WriteByteToAD5663(txData[2]);
}

4、结论

经过实际应用后,应该说效果还是不错的可以实现输出电压的连续调节。但也存在一些需要改进的地方。

第一,因为采用了二极管输出,产生了管压降无意中抬高了DAC输出的零点。而由于电路结构的原因DAC的输出需要大于1.73V才会进入调节段,实际上使DAC丧失了三分之一的精度。

第二,理论上输出应该是线性的,但实际上由于电源元件和电阻反馈网络的温度效应等,其实在某些段线性并不太好。

第三,因为电源器件的输出精度影响实现自动调节时,参数的整定变得较为麻烦,在不同的段其输出精度不同参数的设置也要不同,或者降低调整速度。

对于这些问题,我们考虑了一些改进措施,如采用运放代替二极管,采用输出精度高一点的DC/DC电源等。还在软件上,我们采用专家PID来进行控制以提高调节的精度。

欢迎关注:

STM32基于AD5663的UV灯电压控制相关推荐

  1. 【毕业设计】基于ZigBee的智能灯控系统 -物联网 单片机 stm32

    文章目录 1 简介 2 系统结构 系统功能 相关器件 Zigbee芯片 CC2530 LED发光二极管 人体红外感应模块 光敏电阻传感器 3 实现效果 5 相关部分代码 6 最后 1 简介 Hi,大家 ...

  2. STM32单片机点亮流水灯

    STM32单片机GPIO口点亮流水灯 任何一个单片机,最简单的外设莫过于 IO 口的高低电平控制了,本文将通过一个经典的流水灯程序,了解 STM32F1 的 IO 口作为输出LED:DS0 和 DS1 ...

  3. STM32汇编语言点亮led灯

    STM32汇编语言点亮led灯 首先,这篇blog的主要内容是在C语言中调用汇编语言写的函数.即在我们常用的标准库函数工程中,对外设(这里指led)使用汇编语言完成相关的寄存器配置和控制. 一.背景 ...

  4. STM32驱动全彩LED灯模块WS2812

    STM32驱动全彩LED灯模块WS2812 WS2812全彩LED灯模块系列,可以进行级联实现灯带的效果,MCU端通过一个管脚可以控制所有级联的LED灯的不同发光颜色显示. 级联电路 WS2811(未 ...

  5. 基于机器视觉的交通灯控制系统设计

    基于机器视觉的交通灯控制系统设计 摘 要 Abstract 引言 1 课题背景 1.1概述 1.2传统交通路口信号灯 1.3基于机器视觉的交通灯控制智能系统 1.3.1国内研究现状 1.3.2国外研究 ...

  6. 嵌入式系统开发13——STM32输出PWM实现呼吸灯

    本文主要介绍在STM32F103C8T6上,利用定时器输出PWM波形,进而驱动LED实现呼吸灯. 目录 一.任务要求 二.PWM简介 1.什么是PWM 2.相关概念 3.PWM的产生 4.PWM的通道 ...

  7. CASE_01 基于FPGA的交通灯控制器

        该系类博客序言和资源简介可浏览该博客:PREFACE FPGA经典案例序言 快速了解该系列博客的内容与可用 资源. 目录 1 案例引导 1.1 硬件设计初窥 1.2 逻辑设计初窥 2 模块级逻 ...

  8. STM32基于HAL工程硬件I2C读写AT24C02/04/08数据

    STM32基于HAL工程硬件I2C读取AT24C02数据 ✨申明:本文章仅发表在CSDN网站,任何其他网站,未注明来源,见此内容均为盗链和爬取,请多多尊重和支持原创!

  9. STM32基于HAL工程读取DHT11/DHT22/AM2302/AM2301

    STM32基于STM32-HAL工程读取DHT11/DHT22/AM2302/AM2301 ✨申明:本文章仅发表在CSDN网站,任何其他网站,未注明来源,见此内容均为盗链和爬取,请多多尊重和支持原创!

最新文章

  1. 用c语言输出数组中最小值,C语言.由键盘输入10个整数存入数组,输出最大值、最小值及它们的位置信息.并将最大、最小值位置互换后,再...
  2. Distributed Transaction Coordinator 服务因 3221229584 (0xC0001010) 服务性错误而停止
  3. oracle段管理方式设为自动,oracle自动段管理ASSM笔记
  4. 按15分钟取数据_【数量技术宅|金融数据分析系列分享】套利策略的价差序列计算,恐怕没有你想的那么简单...
  5. python 编码规范
  6. 10个关于linux中Squid代理服务器的实用面试问答
  7. 前驱和后驱什么意思_为什么只有豪车才敢用后驱
  8. 标准盒子与IE盒子的区别
  9. 中国恒大:半个月网上售房近10万套 认购金额1026.7亿元
  10. oracle update 改为 merge
  11. JavaScript版MD5应用
  12. isp邮件服务器是什么,与ISP企业邮箱共建邮件服务器
  13. 【CityHunter】游戏进度总控,及需求设计
  14. SAP License:FI/CO模块常用表及事务代码
  15. css3 - 图标元素动画效果5 - 弹性动画效果
  16. 罗技k380键盘-数字键上的字符对不上怎么办?
  17. 人工智能学习(八斗学院)
  18. 巧借“中国制造2025”东风占领“智”高点
  19. IE8开发者工具调试(三)javascript篇
  20. 硬笔练字“州”字书写技巧,想练好都不难!

热门文章

  1. MySql笔记:Can't create table 'mydb3.#sql-f48_1' (errno: 150
  2. 【动态规划】洛谷 P1282 多米诺骨牌
  3. python 约束与异常处理
  4. 849. 到最近的人的最大距离
  5. 设置 sideload Outlook Add-ins
  6. 配置 CentOS 7 的网络,及重命名网卡名
  7. 第二百七十九节,MySQL数据库-pymysql模块操作数据库
  8. 《构建之法》 读书笔记(4)
  9. css —— 图片环绕+首行缩进
  10. 操作系统学习笔记目录(暂时不全223)