5个方面详解:AI产品运营必知的软硬件技术
比算法更难得是算法的思想,比编程工具更难的是编程的思维,比做产品更难的是产品的梦想。本文主要从5个方面,详细阐述AI产品运营必知的软硬件技术。
一、AI产品运营对基础关系的安排
1. 智能软硬件与软件和硬件
在AI产品里没有纯粹单独的软件和硬件,尤其是产品经理更应该系统来看,把软件和硬件看成是AI赋能的智能软硬件。
例如:单片机一般意义上被看做硬件,但是我们以一种单片机Arduino来看,Arduino板子上的微控制器可以通过Arduino的编程语言来编写程序,编译成二进制文件,烧录进微控制器,而程序本身又是软件部分。其他AI产品部件也类似像STM32,瑞芯微3288等等。
单片机只是举例,现在这么大的数据量单片机是处理不了的,AI也不只是跑在单片机上,X86,服务端也有。
AI里软件相当于人的大脑,硬件相当于人的身体!所以离开软件硬件没有灵魂,离开硬件软件没有肉身!当下AI硬件主要被用来采集数据和作为算力!
2. 算法和数据
有人说算法重要,因为它体现了技术水平的高低,驾驭数学知识的能力;有人说数据重要没有数据算法如何实现效果,实际上LineLian和工程院院士杨善林的学生讨论后发现,算法和数据是鱼和水的关系。AI时代里算法跟传统算法的区别在于AI的算法是对人脑的模拟,是一种智能。
AI是在大量的样本数据基础上,通过神经网络算法训练数据,建立了输入数据和输出数据之间的映射关系,其最直接的应用是在分类识别方面。例如:训练样本的输入是语音数据,训练后的神经网络实现的功能就是语音识别,如果训练样本输入是人脸图像数据,训练后实现的功能就是人脸识别。
AI算法使得解决问题的步骤智能,数据使得算法得到训练从而实现算法所构建的商业模式!
3. 服务端和应用端
服务端和应用端是相对的。
开发应程序调操作系统的API, 操作系统的API有(创建线程、 读写文件【读、写、偏移到指定地址】、 网络通信、 图形渲染),那么操作系统就是应用程序的服务端。
而写一个常规的小程序或者APP,前端用户界面上需要的数据就是分别通过WEB程序调用浏览器功能接口然后OS向后台服务端发请求传数据。
另外web程序员,和底层嵌入式程序员理解的服务端和应用端还有差别,这里产品经理明了这种关系即可。服务端即底层就是功能的实现者, 应用端上层就是功能的使用者,这一关系利于产品开发过程中需求时间安排规划。
AI产品经理明了基础关系,能更好的协调资源,补充Team短板,提升产品生命期效率!
二、站在硬件肩旁上赋能硬件
智能软硬件是指通过将硬件和软件相结合,对设备进行智能化创造或者改造。而智能软硬件移动应用端则是软件,通过应用连接智能硬件,操作简单、开发简便,各式应用层出不穷,也是企业获取用户的重要入口。例如:新零售的店铺,智能贩卖机等!
创造和改造对象可能是电子设备,例如:手表、电视和其他电器;也可能是以前没有电子化的设备,例如:门锁、茶杯、汽车甚至房子。
智能软硬件已经从可穿戴设备延伸到智能电视、智能家居、智能汽车、医疗健康、智能玩具、机器人等领域。比较典型的智能软硬件包括Google Glass、三星Gear、FitBit、麦开水杯、咕咚手环、Tesla、无屏电视等。
1. 智能软硬件的特征
信息的获取和交互智能软硬结合2. 智能硬件的组成
(1)传感器
传感器是一种检测装置,能感受到被测量的信息,并能将感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求。
例如:检测距离的声波传感器,寻找轨迹的红外传感器,通信的蓝牙、NB-IoT传感器等等!
(2)控制器
控制器是指按照预定顺序改变主电路或控制电路的接线和改变电路中电阻值,来控制电动机的启动、调速、制动和反向的主令装置。
由程序计数器、指令寄存器、指令译码器、时序产生器和操作控制器组成,它是发布命令的“决策机构”,即完成协调和指挥整个计算机系统的操作。例如:一般功能的叫MCU单片机,复合功能的叫操作系统OS!
首先,控制器在智能硬件中一般叫做芯片,AI与CPU比较在架构和功能特点上有着非常大的区别。
传统的CPU运行的所有的软件是由程序员编写,完成的固化的功能操作,其计算过程主要体现在执行指令这个环节。但与传统的计算模式不同,人工智能要模仿的是人脑的神经网络,从最基本的单元上模拟了人类大脑的运行机制。它不需要人为的提取所需解决问题的特征,或者总结规律来进行编程。
AI一般包含机器学习和深度学习,但不管是机器学习还是深度学习都需要构建算法和模式,以实现对数据样本的反复运算和训练,降低对人工理解功能原理的要求。
因此,AI芯片需要具备高性能的并行计算能力,同时要能支持当前的各种人工神经网络算法。传统CPU由于计算能力弱,支撑深度学习的海量数据并行运算,且串行的内部结构设计架构为的是以软件编程的方式实现设定的功能,并不适合应用于人工神经网络算法的自主迭代运算。
传统CPU架构往往需要数百甚至上千条指令才能完成一个神经元的处理,在AI芯片上可能只需要一条指令就能完成。
其次,解读主流的人工智能芯片。
AI的高级阶段是深度学习,而对于深度学习过程则可分为:训练和推断两个环节。
训练环节通常需要通过大量的数据输入或采取增强学习等非监督学习方法,训练出一个复杂的深度神经网络模型。训练过程由于涉及海量的训练数据和复杂的深度神经网络结构,需要的计算规模非常庞大,通常需要GPU集群训练几天甚至数周的时间,在训练环节GPU目前暂时扮演着难以轻易替代的角色。
推断环节指利用训练好的模型,使用新的数据去“推断”出各种结论,如视频监控设备通过后台的深度神经网络模型,判断一张抓拍到的人脸是否属于黑名单。虽然推断环节的计算量相比训练环节少,但仍然涉及大量的矩阵运算。
在推断环节,除了使用CPU或GPU进行运算外,FPGA以及ASIC均能发挥重大作用。目前,主流的人工智能芯片基本都是以GPU、FPGA、ASIC以及类脑芯片为主。
FPGA:
即专用集成电路,一种集成大量基本门电路及存储器的芯片,可通过烧入FPGA配置文件来来定义这些门电路及存储器间的连线,从而实现特定的功能。而且烧入的内容是可配置的,通过配置特定的文件可将FPGA转变为不同的处理器,就如一块可重复刷写的白板一样。
FPGA有低延迟的特点,非常适合在推断环节支撑海量的用户实时计算请求,如语音识别如LineLian2017年打造的裸眼3D试衣镜所采用的芯片。
由于FPGA适合用于低延迟的流式计算密集型任务处理,意味着FPGA芯片做面向与海量用户高并发的云端推断,相比GPU具备更低计算延迟的优势,能够提供更佳的消费者体验。在这个领域,主流的厂商包括Intel、亚马逊、百度、微软和阿里云。
ASIC:
即专用集成电路,不可配置的高度定制专用芯片。特点是需要大量的研发投入,如果不能保证出货量其单颗成本难以下降,而且芯片的功能一旦流片后则无更改余地,若市场深度学习方向一旦改变,ASIC前期投入将无法回收,意味着ASIC具有较大的市场风险。但ASIC作为专用芯片性能高于FPGA,如能实现高出货量,其单颗成本可做到远低于FPGA。
谷歌推出的TPU就是一款针对深度学习加速的ASIC芯片,而且TPU被安装到AlphaGo系统中。但谷歌推出的第一代TPU仅能用于推断,不可用于训练模型,但随着TPU2.0的发布,新一代TPU除了可以支持推断以外,还能高效支持训练环节的深度网络加速。
根据谷歌披露的测试数据,谷歌在自身的深度学习翻译模型的实践中,如果在32块顶级GPU上并行训练,需要一整天的训练时间,而在TPU2.0上,八分之一个TPUPod(TPU集群,每64个TPU组成一个Pod)就能在6个小时内完成同样的训练任务。
GPU:
即图形处理器。最初是用在个人电脑、工作站、游戏机和一些移动设备上运行绘图运算工作的微处理器,可以快速地处理图像上的每一个像素点。后来科学家发现,其海量数据并行运算的能力与深度学习需求不谋而合,因此,被最先引入深度学习。
GPU之所以会被选为超算的硬件,是因为目前要求最高的计算问题正好非常适合并行执行。一个主要的例子就是深度学习,这是人工智能(AI)最先进的领域。
深度学习以神经网络为基础,神经网络是巨大的网状结构,其中的节点连接非常复杂。训练一个神经网络学习,很像我们大脑在学习时,建立和增强神经元之间的联系。
从计算的角度说,这个学习过程可以是并行的,因此它可以用GPU硬件来加速。这种机器学习需要的例子数量很多,同样也可以用并行计算来加速,在GPU上进行的神经网络训练能比CPU系统快许多倍。
目前,全球70%的GPU芯片市场都被NVIDIA占据,包括谷歌、微软、亚马逊等巨头也通过购买NVIDIA的GPU产品扩大自己数据中心的AI计算能力。
3. 智能硬件生产流程
智能软硬件的开发流程介绍
(1)需求调研及分析
凡是开发产品类的,都需要进行完成的市场调研,智能硬件也是一样,通过面向群体来收集有用的价值,从而对产品开发的导向及功能要求有明确的方向。
(2)产品原型设计
对于该产品的硬件、原件、结构进行开发,完成后进行联调测试,如果中途出现问题,需要重新设计,若通过进行组装及测试。
(3)试产阶段
小批量的进行产品试产,进行产品认证。
(4)产品运营硬件市场化量产阶段
一般情况下,需要等到一些认证做完,接到正式订单才会开始大规模生产。
三、站在软件肩旁上赋能软件
上文第二节里讲站在硬件的肩旁上赋能硬件里,硬件本身亦不是纯硬件,其中有软件部分且是必不可少的部分。
软件包含系统软件和应用软件,系统软件是软件的软件,是软件运行的平台,应用软件是为了完成特定产品业务运营而编写的软件。
常用的系统软件有操作系统(DOS、WINDOWS、UNIX、OS/2)、数据库管理系统(FoxPro、DB-2、Access、SQL-server)、编译软件(VB、C++、JAVA)。应用软件有文字处理软件(WORD、WPS)、信息管理软件、辅助设计软件(CAD)、实时控制软件(CAM)。再例如:APP、小程序等属于应用软件,Android/IOS等属于系统软件。
软件流程一般如下图:
AI需要的智能软硬件流程:
四、以智能家居的智能软硬件产品实战为例
本节以智能家居整体结构设计、芯片选型、模块设计实战经验为例讲一遍智能软硬件产品的打造流程。
先看下图为笔者操盘的智能家居整体结构图:
以下为整体结构图解析:
Android手机终端在连接的4G或WIFI情况下通,过向服务器发出 HTTP 请求完成对信息的查询和任务的设定。
云服务器根据用户需求提供必要的数据,并将对应的任务更新至数据库。嵌入式智能设备通过WIFI模块AT与服务器,进行Socket通信,服务器端使用基于JavaNIO的框架实现 Socket连接。
Android手机终端和智能设备通过不同的服务器进行通信 ,Android手机终端采用http 协议与服务器进行通信,服务器提供了用于通信的RESTful API,嵌入式智能设备基于 Socket与服务器连通。两个服务器部署在同一台机器上,通过MYSQL数据库做中间桥接,实现数据的共享。
再看下图为具体模块结构图:
上图中MCU负责整个模块的控制;WIFI模块实现模块的无线连接,并集成协议TCP/Ip协议,负责同服务器交换数据;开关控制使用继电器实现,能够实现弱电对强电的控制;湿度、温度、亮度模块根据不同模块的功能进行选装,从而实现对不同量的测量。
限位检测用于检测电机运行的位置状态,从而实现对宠物喂食中机械的控制,实现定量的喂食;RTC时钟为系统的运行提供时间基准;FRAM保存配置数据,即使在掉电后还能够执行之前设定的任务;基本的用户界面提供了现场的控制途径,使用户能够对模块进行直接的操作;供电使用AC/DC电源直接由220V供电或者使用DC进行供电,可以根据外部公开进行选择。
其次芯片选型。
选用M451LG6AE作为主控芯片M451LG6AE为 32位单片机,基于M4内核,具有足够的RAM和 Flash能够满足运行程序的要求。其具有多个串口,支持硬件的 SPI 及 I2C,能够方便实现的通信,具有 AD能够实现一些状态量的测量。
使用 DTH11进行温湿度的测量,其集成了温度及湿度检测功能,接口为单线制串口。节约 IO,使用 DS18B20进行范围较大的温度测量,其测温范围较广,具有密封的封装,能够测量液体温度,能多个并联。对于土壤湿度的测量,使用电阻式湿度传感器进行测量。
限位检测主要用于检测物体是否移动到了指定位置,或者在喂食装置中电机旋转的圈数(决定喂食的量),只需要输出开关量,因此使用光电门进行检测,使用非接触测量能够有效地延长传感器的使用时间,同时能够提供足够的精度。
为了实现高精度的计时,从而减小离线时出现的定时误差,使用外置的RTC DS3231 作为计时基准。DS3231 内置了带温补的晶振,能够实现较高精度的计时,满足运用的需求。
选择擦写次数多和读取速度块的FRAM FM24V系列,来进行设置数据的存储%使掉电复位后,仍然能够进行中断的任务。
使用 HLK-PM01 作为 AC/DC芯片,HLK-PM01 用于实现220VAC到 5VDC的转换,能够提供 3W的功率,足够系统的使用。使用 HLK_M30模块作为WIFI 模块,其体积很小,功耗较低 ,支持TCP Server/TCP Client /UDP Server/UDP Client工作方式,能够方便地实现互联网连接,串行接口能够方便地与主控器连接。
再则软件设计:
整体软件功能模块如下图:
其中1: 软件部分与硬件之间交互通信模块, APP通过HTTP 协议与服务器进行通信 ,采用 OkHttp 进行网络请求,请求的方式以 Post为主。
Android系统提供了两种 HTTP 交互的方式HTTPURL-CONNECTION和 APACHE HTTP CLIENT,虽然两者都支持 HTTPS流的上传和下载,配置超时IPV6和连接池,已足够满足各种HTTP请求的需求,但原生的HTTP 接口存在着 API 数量过多,扩展困难等不足。
因此产生了许多出色的网络通信库来替代原生的 HTTPURLConnection,其中OkHttp是最出色的一个。
使用 OkHttp 库进行更高效 HTTP请求可以让应用运行更快、更节省流量,因此,本项目中使用 OkHttp库依赖开发。
APP与 服务器通信时采用 JSON格式进行数据传输 ,JSON 作为一种轻量级的数据交换格式,易于阅读和编写,并且多种编程语言均提供了对 JSON 格式数据解析的支持,易于机器解析和生成。
并且相比XML格式,JSON数据量更小,具有较高的有效数据率,有助于节省流量,提升网络传输速率。APP采用 Android 自带的 JSONObject 类进行 JSON数据的解析。
其中2: 登录模块,由于智能家居控制系统是一个面向多种需求多个用户的控制系统,需要建立用户系统,使不同的用户可以有序地管理自己的设备。
APP在启动时会首先检查本地是否存有用户的 token,如果不存在,跳转到登录界面,密码采用 MD5进行加密。用户登录成功后, 将服务器发来的 token通过 SharedPreferences 保存在本地,以后每次网络请求通过这个token进行用户验证,而不需要重新进行登录。
其中3: 设备模块设备列表中选择一个设备进入设备控制页面,在设备控制页面可以进行查看设备信息,查看历史记录,对设备进行控制等操作。
进行设备控制时,智能照明控制开、关两种状态,智能浇水对浇水量进行控制,智能喂食对喂食量进行控制,每种设备的控制均提供手动和定时两种工作方式。 在启动定时任务时,可以设置每周某几天在某个时间重复执行设备控制的任务。
其中4: 场景页面中可以添加的任务分为两种类型:
一种是对设备的控制任务,包含控制照明设备的开关,浇水设备的浇水量、喂食设备的喂食量等。另一种是延时任务,用于设定不同设备控制任务之间的延时间隔,场景可以设置为手动或定时启动两种方式。为了减少控制的复杂性,场景中的单项任务不能进行定时的设置,但可以通过设置场景整体的定时任务来实现场景中每个任务的定时执行。希望通过以上智能软硬件产品实战,来传达一套系统的智能软硬件产品方法论!
五、Hold住产品靠本领,引领智能软硬件市场靠人性!
同样是语音识别猎豹做出来翻译棒,而天猫做出阿里智能音箱。同样是图像识别,用在机场可以协助安检通过,波士顿动力可以给机器狗避障!
智能软硬件产品运营是生意人,互联网产品运营是设计师。
而笔者爸爸说:
“10年难培养一个生意人,1年也许就能培养一个擅长用工具的设计师和程序员”。
比算法更难得是算法的思想,比编程工具更难的是编程的思维,比做产品更难的是产品的梦想!
运营好和卖好产品,并用户口口香传,与实现产品同样重要。没有指令机器不知运转,而没有机器指令又命谁运转?智能软硬件是产品运营的未来!
#专栏作家#
连诗路,公众号:LineLian。人人都是产品经理专栏作家,《产品进化论:AI+时代产品经理的思维方法》一书作者,前阿里产品专家,希望与创业者多多交流。
本文原创发布于人人都是产品经理。未经许可,禁止转载。
题图来自 Unsplash,基于 CC0 协议
单片机实例分享,自制数字示波器
示波器是最常用的电子测量仪器之一,它能把肉眼看不见的电信号变换成看得见的图像。为了携带方便,我曾经做过一台简易数字示波器(见图22.2),材料成本只有150元左右,这台数字示波器的设计思想是:简单实用,价格低廉,容易制作。
主要性能指标:
最高采样率:20MSa/s
模拟带宽:4MHz
输入阻抗:1MΩ
垂直灵敏度:0.01V/div~5V/div(按1-2-5方式递进,共9挡)
水平扫描速度:1.5µs/div~6ms/div(按1-2-5方式递进,共12挡)
垂直分辨率:8位
显示屏:2.4 英寸 TFT320×240(驱动控制芯片:ILI9325)
测量时能同时显示信号的频率、电压峰峰值,具有信号保持(HOLD)功能。
图22.2 自制的简易数字示波器
电路工作原理
图22.3 数字示波器结构框图
我们知道,模拟示波器是用阴极射线示波管(CRT)显示被测信号波形的,而数字示波器是采用LCM(LCD显示模块,含LCD及显示驱动控制芯片)显示被测信号波形。因为LCM的每一个显示像素都对应一个地址,地址要用数据表示,每一个像素的颜色也是用数据表示的。因此电路向LCM发送的是数据编码信号,这就决定了它和模拟示波器的电路结构不一样。
本文介绍的数字示波器的结构框图如图22.3所示。它由垂直输入电路、A/D转换电路、数字信号处理与控制电路、液晶屏显示电路、电源电路等部分组成。
图22.4 数字示波器电路原理图
输入的电压信号经垂直输入电路放大,以提高示波器的灵敏度和动态范围。对输出的信号取样后由 A/D 转换器实现数字化,模拟信号变成了数字形式存入存储器,微处理器对存储器中的数据根据需要进行处理,最终在显示屏上显示测量波形和相关的参数,这就是数字存储示波器的工作过程。
数字示波器的电路原理图如图22.4所示,下面分别对各单元电路进行介绍。
表22.1 垂直灵敏度和K1~K5的对应关系
1. 垂直输入电路
垂直输入电路由双运算放大器LM6172和衰减电路等部分组成。对其有两个基本的要求:一是对放大倍数的控制,二是要有满足设计要求的足够的带宽。
示波器输入信号电压的动态范围很大,为了将输入信号电压调节到A/D转换电路的最佳采样范围,以便得到最合理的显示波形,在信号电压较小时要进行放大,在信号过大时要进行衰减。
示波器输入信号的频率范围也很宽,为了使垂直输入电路有较平坦的频率特性曲线,即对不同频率的信号放大电路的增益基本保持一致。为此选用了高速双运放LM6172,其带宽为100MHz,并在衰减电路中加了频率补偿电容。
电阻R1、R2、R3和继电器K1、K2、K3等组成衰减电路,衰减系数分3挡:1:1、1:10、1:100,由K1、K2、K3控制。第一级运算放大器接成电压跟随器的模式,主要起到缓冲的作用,提高输入阻抗,降低输出阻抗。第二级运算放大器接成电压串联负反馈电路的模式,其中电阻R6、R7、R8和继电器K4、K5等组成3挡增益调节电路,放大器的增益由K4、K5控制。当触点K4闭合时增益为(R6+R9)/R6;当触点K4开启、K5闭合时增益为(R6+R7+R9)/(R6+R7);当触点K4、K5均开启时增益为(R6+R7+R8+R9)/(R6+R7+R8)。按电路图中各电阻的取值,对应本级3挡的增益分别为25、12.5、5。
继电器K1~K5工作状态受单片机控制,所以垂直输入电路是一个程控放大器。垂直灵敏度和K1~K5工作状态的对应关系见表22.1(1表示闭合,0表示断开)。
2. A/D 转换电路
我们知道,A/D转换电路的作用就是将模拟信号数字化。一般把实现连续信号到离散信号的过程叫采样。连续信号经过采样和量化后才能被单片机处理。通过测量等时间间隔波形的电压幅值,并把该电压值转化为用二进制代码表示的数字信息,这就是数字示波器的采样,采样的工作过程见图22.5。采样的时间间隔越小,重建出来的波形就越接近原始信号。采样率就是每秒采样的次数,例如,示波器的采样率是10MSa/s,即每秒采样10M次,则表示每 0.1μs进行一次采样。采样率是数字示波器最重要的一项指标。
根据Nyquist采样定理,当对一个最高频率为f的模拟信号进行采样时,采样率必须大于f的两倍以上才能确保从采样值完全重构原来的信号。对于正弦波,每个周期至少需要两次以上的采样才能保证根据采样数据恢复原始波形。在数字示波器中,为了减小显示波形的失真,采样率至少要取被测信号频率的5~8倍。本文介绍的数字示波器采样率取被测信号频率的5倍,因为最高采样率为20MSa/s,所以当被测信号的带宽在4MHz以内时有比较好的测量结果。
采样率的提高受制于A/D转换芯片的工作速度,本文电路中使用的单片机ATmega16内部虽然也有A/D转换器,但其工作频率太低,不能满足数字示波器的采样要求。因此我们用了一片高速A/D转换芯片ADS830E,其最高采样率可达60MSa/s。ADS830E的转换精度为8位二进制数,即垂直分辨率为256,因为选用的LCM的分辨率为320×240,对应垂直分辨率为240,所以ADS830E完全能满足分辨率的使用要求。
ADS830E的IN(17脚)是供采样的模拟信号的输入端,CLK(10脚)是采样时钟信号输入端。每输入一个时钟脉冲就进行一次A/D转换,转换后的8位二进制数据由D0~D7输出。ADS830E的输入电压幅度可以通过11脚进行控制,当11脚接高电平时,ADS830E的输入电压范围是1.5~3.5V;当11脚接低电平时,输入电压范围是2~3V。这里选用1.5~3.5V的输入电压范围,中点电压为2.5V,中点电压由电位器RP进行调节。当IN输入电压为1.5V时,D0~D7输出的转换数据是0x00,当IN输入电压为3.5V时,D0~D7输出的转换数据是0xff,即255。
图22.5 采样的工作过程
3. 数字信号处理与控制电路
数字信号处理与控制电路由单片机ATmega16、FIFO(先进先出)存储器IDT7205、4个2输入与非门74HC00等组成。
单片机ATmega16在电路中的主要作用是:(1)对A/D转换后的数字信号进行处理,转换成LCM能接受的数据格式,输出给它显示;(2)产生ADS830E、IDT7205工作所需要的时钟脉冲信号;(3)通过按键对示波器参数进行控制调节,输出继电器的控制信号。
图22.6 倍频电路及各点的脉冲
FIFO存储器IDT7205是一个双端口的存储缓冲芯片,具有控制端、标志端、扩展端和8192×9的内部RAM阵列,12ns的高速存取时间。内部读、写指针在先进先出的基础上可进行数据的自动写入和读出。当有数据输入到数据输入端口D0~D8时,可由控制端Wclk来控制数据的写入。为了防止数据的写溢出,可用标志端满FF、半满HF来标明数据的写入情况,写入时由内部写指针安排其写入的位置。由于内部RAM阵列的特殊设计,先存入的数据将被先读出。如果需要数据外读,则可由控制端Rclk来控制数据的读出。RST为复位端。Wclk、Rclk、RST均由单片机ATmega16提供控制脉冲。数据输出端口Q0~Q8是三态的,在无读信号时呈高阻态。输入数据位D0~D8和输出数据位Q0~Q8均为9位,这里输入和输出均只使用了8位,即只使用了D0~D7和Q0~Q7。
读到这里,有的读者可能会问:把ADS830E输出端口D0~D7输出的数据直接输入ATmega16的PA端口不就行了吗,为什么还要在中间加上一个IDT7205?这是因为ADS830E工作速度比ATmega16快得多,即ATmega16读取数据的速度比ADS830E输出数据的速度慢,如果直接相连ATmega16就拖了ADS830E的后腿。加上IDT7205后就起到了缓冲的作用,ADS830E转换的结果先存在IDT7205内,等到ATmega16需要时,再从IDT7205中读出来。
ADS830E的采样时钟与IDT7205的写信号时钟是同一个时钟源,以确保两者同步。时钟脉冲信号由ATmega16使用内部定时器产生,由于ATmega16外接晶体的频率为20MHz,所以产生的时钟信号最高频率只能达到10MHz,为了使采样率达到20MSa/s,使用了74HC00等构成的倍频电路。若ATmega16 PD7端输出的脉冲信号频率为f,则74HC00的F4输出的脉冲信号频率为2f,倍频电路的工作过程和各点脉冲信号时序关系如图22.6所示。
K1~K5是干簧继电器,干簧继电器特点是吸合和释放时噪声很小,功耗低。因其吸合电流较小,所以可直接用ATmega16的输出端口驱动。
SB1~SB5是示波器调节按钮。SB1、SB2是水平扫描速度调节按钮,按SB1时μs/div的值增加(水平扫描速度减小),按SB2时μs/div的值减小(水平扫描速度增加);SB3、SB4是垂直灵敏度调节按钮,按SB3时V/div的值增加(垂直灵敏度减小),按SB4时V/div的值减小(垂直灵敏度增加);SB5是波形保持(HOLD)按钮,按一下测量波形被冻结保持,同时在显示屏上显示字符“HOLD”,再按一下又恢复到正常测试状态。所有调节参数均显示在液晶屏上,调节好的参数将自动保存到ATmega16的EEPROM中,下次开机时有关参数将预设在上次关机前的设定值上。
4. 显示电路
LCM采用2.4英寸TFT彩色液晶屏,分辨率为320像素×240像素,驱动控制芯片为ILI9325,该芯片传递数据8/16接口位兼容,使用8位接口时能够节省单片机的输出端口,在8位接口工作状态时16位数据分两次传递,速度稍慢。数据端口D0~D15中的高8位D8~D15为8位接口使用的端口。8/16接口位的选择由端口IM0控制,IM0接高电平时为8位接口工作状态,IM0接低电平时为16位接口工作状态。
电路中ILI9325的工作电压是3V,ATmega16的工作电压是5V,两者高电平不一致,通信端口相连时要进行电平转换,因为这里只需要ATmega16向ILI9325单向传递数据,所以只需要将5V向3V电平转换,不需要将3V电平向5V电平转换,就不必使用专用的电平转换芯片,只要用电阻分压电路将5V高电平转换成3V高电平就行了。电路中R14~R35组成电阻分压电路,连接端口有8个数据端口和3个控制端口。
5. 电源电路
这个数字示波器使用了交流电源,提供+5V、−5V、+3V三种直流电压。
程序设计
设计好电路只是为数字示波器奠定基础,更重要的是单片机程序的设计。实际上在设计硬件时既要考虑到功能,也要考虑到程序设计的需要。比如对单片机的选型,主要考虑功能、工作速度、端口的数量、程序存储器Flash的容量、RAM的容量、有没有EEPROM等。综合考虑后选用AVR单片机ATmega16,它的程序存储器Flash为16KB,RAM为1KB,使用时将16MHz的时钟频率超频到20MHz,经过对其资源合理分配,完全可以满足设计要求。
程序的开发环境为ICC-AVR V6.31A,使用 C语言编写。程序采用了分时控制、顺序调度的工作方式,没有使用任何中断程序,程序流程图如图22.7所示。
图22.7 程序流程图
下面对主要部分进行分别介绍。
1. 垂直灵敏度控制
按钮SB3、SB4用来调节垂直灵敏度,按动后通过键盘扫描程序可以增加或减小程序中变量Key_ver的值,Key_ver取值范围为1~9,分别对应9挡垂直灵敏度,通过Key_ver的取值控制继电器K1~K5的工作状态,从而得到相应的灵敏度。
以K1为例,K1接ATmega16的PB0端口,有关宏定义为:
#define K1_ON PORTB &=~(1<
#define K1_OFF PORTB |= (1<
因此,K1_ON表示PB0输出低电平,K1闭合,触点接通;K1_OFF表示PB0输出高电平,K1释放,触点断开。
2. 水平扫描速度控制
水平扫描速度控制是通过改变A/D转换电路的采样率来实现的,按动SB1、SB2可以改变程序中变量Key_hor的值,Key_hor取值范围为1~12,分别对应12挡水平扫描速度。
A/D转换电路所需的采样时钟脉冲用ATmega16的8位定时器/计数器2-T/C2产生,选择CTC工作模式。其工作参数主要由控制寄存器TCCR2、计数寄存器TCNT2、输出比较寄存器OCR2决定。TCCR2中的位CS22、CS21、CS20的取值确定T/C2的时钟源的分频系数,OCR2中的数据用于同TCNT2中的计数值进行连续的匹配比较,一旦TCNT2计数值与OCR2的数据相等,单片机端口OC2的输出电平即取反,这样即可输出脉冲信号。脉冲信号的频率f由时钟源的分频系数和OCR2的预置值决定,计算公式为f=时钟源频率/(2×(1+OCR2)),OC2输出的脉冲信号经倍频后作为采样时钟信号,相关参数之间的关系见表22.2。
只要对寄存器TCCR2、OCR2的值进行设置,就可以获得我们所需频率的采样时钟信号。
3. 数据的存储和读取
ADS830E的采样数据存入IDT7205后达到一定数量就停止采样,再将IDT7205存储的数据读入ATmega16,程序中用一个数组RAM[650]来存储读取的数据,存储容量为650,即一次读取650个采样数据。
仔细看了电路图的读者可能会发现,IDT7205的满FF端口并没有使用,为什么不用呢?这是因为ATmega16的RAM容量只有1KB,只能分配约650个存储单元用来存储从IDT7205读取的数据,IDT7205存多了数据也没有用,ATmega16不能全部存储,多余的数据就丢弃了,还不如少读点数据节省时间,提高显示波形的刷新频率。这在采样时钟频率较低时效果尤为明显,因为采样时钟频率越低,采集一个数据所花的时间越长。以采样时钟频率5kHz为例,如果要将IDT7205存满8192个数据,所需要的时间为8192/5000≈1.6s, 显示波形1.6s以上才能刷新一次,这显然是不行的。如果存满700个就结束,则所需要的时间为700/5000=0.14s,刷新速度提高了很多。
从上面的分析可以看出,FIFO存储器其实使用IDT7202就够了,IDT7202有1024个存储单元。不过笔者只买到了DIP封装的IDT7205,虽然有点大材小用,但为以后数字示波器升级提供了空间。FIFO存储器存储数据的容量称为数字示波器的存储深度,也称记录长度,存储深度也是数字示波器的一个重要技术指标,适当存储深度便于对显示波形进行分析和处理。
不使用FF端口是如何控制IDT7205存储数量的呢?我在IDT7205存储数据时根据不同的采样时钟频率设置了不同的延时时间,在此时间内能存入多于700个数据即可。延时结束后即将IDT7205的存储数据读入ATmega16。
表22.2 相关参数之间的关系
由于ADS830E每次重新进入工作状态要有一个稳定的过程,开始采样的几个数据精度不高,因此在读取IDT7205数据时先空读50个数据,将这些数据丢弃,然后再将后面的数据读入ATmega16。
图22.8 显示区域
4. 数据计算处理
数据计算处理工作主要包括同步触发信号检测、信号电压峰峰值测量、信号频率测量。这部分程序设计的思路是:
先在650个数据的前350个数据中以显示屏的垂直中点对应数据120为基准,找到同步触发信号。之所以在前350个数据中找同步触发信号,是为保留后面至少有300个数据供显示波形用。找到同步触发信号后,则把对应该点数据为起点的连续300个数据作为显示数据。
然后找到650个数据中的最大值和最小值,求最大值和最小值的算术平均数,即可得到中点电压值,检测信号相邻两次向上穿过中点的时间差即可计算出信号的周期。
5. LCM的控制与显示
TFT-LCD显示屏的分辨率为320像素×240像素。显示屏的每一个像素都对应着驱动控制芯片ILI9325内部存储器唯一的一个地址(x,y),x为横坐标,寻址范围为0~319;y为纵坐标,寻址范围为0~239。在像素对应地址写入16位颜色数据就可以显示相应的颜色,如果某一点要清除,只要对该像素对应的地址写入背景色就可以了。由于这里ILI9325采用8位接口工作模式,因此传递16位数要分两次进行。
因为数字示波器既要显示被测信号的波形,也要显示有关的测量数据,如电压峰峰值、频率、水平扫描速度、垂直灵敏度等,所以必须对显示区域进行合理的划分,并对颜色进行规划设置,分配好的显示区域如图22.8所示。图中用来显示波形的区域为中间的300×200。在这个区域画了刻度线,将水平方向分成10格,垂直方向分成8格。其余区域用来显示各种数据。
对ILI9325最基本的操作有两种:发送命令和发送数据。无论是显示屏的初始化,还是设置显示地址和显示颜色,都要用到这两种基本操作。
显示被测信号波形的过程是:先清除上一帧显示波形,然后画刻度线(刻度线每次都要重画,因为有些和显示波形交叉的点也被清除了),最后画新的一帧信号波形,同时备份数据作下一次清除用。显示信号波形时,存储器地址(x,y)中的x代表水平扫描信号所处的位置,y代表信号电压的大小。每次刷新信号波形时,信号电压峰峰值和信号频率显示数据也同时刷新一次。水平扫描速度和垂直灵敏度的数据只有在重新调整后才刷新。
表22.3 主要元器件清单
元器件选择
主要元器件的清单见表22.3。
经过试验,我发现在工作电压为5V时,单片机ATmega16和ATmega16L在时钟频率为20MHz下均能正常工作。因此,如果你手头只有ATmega16L也可以使用。
IDT7205如果使用PLCC封装的芯片,请注意引脚编号不同。
干簧继电器也可以选用其他型号的,只要工作电压是5V,闭合电流小于20mA即可。
机箱我选用的是成品塑料机箱,你也可以用其他样式的,或者自己用有机玻璃DIY。
显示屏和ADS830E的两块转接板是必须要用的,不然无法在万能板上安装,可以设法和元器件一起采购。
图22.9 缓冲区对比图
图22.10 开关单独安装在小的万能板上
显示屏的品牌很多,你很难买到和我一样的品牌。但有一点要注意,驱动控制芯片一定要是ILI9325的,如果不是,你就要修改程序了,不同的芯片即使是同一系列,驱动程序也往往不兼容。即使驱动芯片一样,不同品牌的显示屏引脚编号也可能不一致,接线时要仔细对照。另外有一点提醒一下:我买的显示屏的4个背光二极管是并联的,我是把它们公共的阳极串接一个电阻(不知道模块内部有没有限流电阻,还是外接一个电阻保险)接到+5V电源,如果你买的显示屏的背光二极管是串联的,要求的工作电压就高了,接到+5V是不能发光的,可串连一个100Ω(电阻的取值使发光二极管工作电流不超过20mA为宜)接到LM7805的输入端,此处的电压约有10V,可以满足驱动要求。
安装
安装前先将目标文件dso.hex写入单片机ATmega16,特别提醒一下:用编程器将目标文件调入时要选择“缓冲区预先填充00”选项,否则在显示屏显示字符时会出现色块。如果你用下载线写入文件,则往往不提供该选项给你选,会直接把缓冲区都填入了FF,见图22.9上半部分,这时你可以手工编辑一下,把方框中的FF全部改为00,结果见图22.9下半部分。
5个按钮开关单独安装在小的万能板上,见图22.10。其余的元件除显示屏直接固定在机箱面板上外,都安装在大的万能板上。接线时注意同一单元要一点接地,数字地和模拟地要分开。三端稳压器LM7805要加一个小的散热片。
机箱的面板根据显示屏的大小、按钮开关和BNC插座的安装位置开孔,面板上的标记可打印在一张纸上,再用1~2mm的透明有机玻璃做一块尺寸一样的面板(对应显示屏的位置不开窗口,正好做防护屏),再把打印好的纸夹在两层中间,用螺丝固定好后,面板就做好了。
按钮开关电路板是直接用4个螺丝固定在面板上的,显示屏可用热熔玻璃胶固定,把显示屏在窗口摆正位置后,在4个角用热熔玻璃胶固定一下就可以了。
安装好的示波器内部结构见图22.11。
图22.11 安装完成的内部结构
调试
如果安装时没有接线错误,元器件没有质量问题,调试还是比较容易的。
调试分4步进行。
(1)各单元先不接电源,测量电源部分输出电压是否正常,正常后再接通各部分的电源。
图22.12 水平扫描线与中线未重合
图22.13 补偿电容与方波波形的关系
图22.14 调试好的示波器的使用效果
(2)检查显示屏工作是否正常,接通电源,显示屏初始化后先是全屏显示白色闪亮一下,然后显示刻度线和相关数据。如果开机后显示屏没有反应,先检查单片机有没有正常工作,如按动K3、K4继电器的工作状态应该有所改变。如正常再查显示屏的连线和供电是否正常,直至显示正常才能进入下一步。
(3)将示波器输入端信号线短接,调节电位器RP,使其中点电压为2.44V(注意不是1.5~3.5V的中点电压2.5V,因为显示屏垂直方向中点的值是120,120是2.44V电压经A/D转换后对应的值,对应2.5V电压的A/D转换值是255/2),这时候可以看到一条水平扫描线出现在水平中线附近,见图22.12,仔细调节RP,使得其和水平中线重合。
(4)对衰减器的频率补偿电容进行调整,将垂直灵敏度调到0.5V/div,输入 200kHz、幅度1V的方波,改变电容C2的容量,使示波器显示的方波波形最好;再将垂直灵敏度调到1V/div,输入200kHz、幅度2V的方波,改变电容C3的容量,使示波器显示的方波波形最好。频率补偿电容与方波波形的关系见图22.13。
装配调试好的数字示波器的使用效果见图22.14。
相关问答
单片机 上 怎么连线 ?单片机上连线方法一般单片机的外接按键有三种接法:1、每个I/O端口接一个按键:按键接另一端通常是接地,I/O口通常还应该接一个上拉电阻,有些单片机的I/O口可...
在proteus中如何将元器件的端点与 单片机 端点设置虚拟(不需要用导线连接那种)连接,求设置方法?在需要连接的导线但表面上没有导线,在两端都加相同的网络标号就行了,在左边的工具条点LBL,之后当鼠标移到导线上时就会出现一个叉,点下鼠标后就可以输入几个...
舵机怎么连接?舵机控制原理舵机一般有3条线,分别是电源正、电源负、信号线。电源正极线一般为红色或橙色,连接+5V(单片机电源正)【有的舵机为6V供电】电源负极线一般为黑色,...
烧录器与烧录座接法?如果要烧录程序,买个40PIC锁紧座并焊接在万用板上吧,不要这样直接连。STC系列的单片机是使用串口进行程序烧录的,因此烧录需具备四条线:电源VCC、GND、TX、R...
电脑连接 单片机 的时候,COM端口应该怎么调试? - 你总是不懂我...一般单片机由于供电的原因,通常都是TTL的UART电平讯号,需要经过转换IC来提升电平(RS-232),电脑通常都是RS-232的讯号,因此直接把转换后的RS-232跟电...
单片机 连不上电脑怎么办?原因可能如下:1.驱动没有安装,电脑里显示:无法识别的设备;2.连线错误;3.串口只支持STC型号的下载,其他不支持;4.在单片机先停电状态下,然后点下载按...原...
初学者用STC-ISP下载到 单片机 总是连接失败 求帮助!!-ZOL问答升级吧,或者单片机已经坏了将最高波特率调整为9600或更低即可。1、确定你的连线是否正确,在保证电路没有问题的情况下,查看单片机与串口的连线是否正常;2...
求助,L298N模块该 怎么连线 ?用L298N驱动直流电机,如需PWM调速,ENA、ENB使能端最好接单片机的IO口上,这样可控,如果直接接5V的话,那么就不可控了。用L298N驱动直流电机,如需PWM调速,ENA、...
交流充电桩烧录步骤?6、然后对单片机重新上电,不久后,软件界面右下角显示框显示“正在重新握手...成功”。完成以上设置后,即可完成给单片机烧录程序。5、然后点击“下载”选项,...
单片机 元器件用什么固定?一般元器件在印制板上的安装固定方式有卧式和立式两种。(1)立式安装元器件占用面积小,适用于要求元件排列紧凑的印制板。立式安装的优点是节省印制板的面积;...