辜渝傧

13037102709

027-87870986

新闻动态

您当前的位置:首页 > 新闻动态 > 行业动态 >

物联网技术区|| STC15单片机应用开发之外部信号采集

发布者:    布时间:2020-09-16 16:30:36    点击量:

       通过STC15W4k56S4单片机中8通道10位高速电压输入型模拟数字转换器(ADC)配置,用于温度、电池电压、距离、频谱等的检测和按键扫描。本任务实现实验板测定芯片外部光敏传感器的电压值,并通过串口发送电压值。
       具体步骤为:实验板上电后,初始化串口1和ADC;开启ADC通道0,对直流电压值进行采集;串口助手接收测量电压值,例如“2.7V”重复上述步骤。
知识引入

  1. ADC转换原理
       STC15系列单片机ADC由多路选择开关、比较器、逐次比较寄存器、10位DAC、转换结果寄存器( ADC RES和 ADC RESL)以及 ADC CONTR构成。
      STC15W4k56S4系列单片机ADC是逐次比较型模数转换器,由一个比较器和D/A转换器构成,通过逐次比较逻辑,从高位(MSB)开始,顺序地对每一输入电压模拟量与内置D/A转换器输出进行比较,最终将转换结果保存在ADC转换结果寄存器中。基本原理:采用逐次比较的方式实现,即给定一个参考电压,这个电压在内部会被分成很多段(10位就是1024段,8位就是256段),将每次采集到的模拟信号的电压通过逐次比较寄存器与内部的电压段进行比较,当比较大小接近或者相等时,即将当次采样的电压值转换成了数字量了。
  1. 单片机内部AD转换使用方法
       将参考电平按最大的转换值量化,再利用输入模拟电平与参考电平的比例来求得输入电平的测量值(V测=V参*(AD量化值/AD转换的最大值))。值得注意的一点就是A/D转换的输入电平必须比参考电平低或相等,不然测试的结果就会有很大的偏差。
  1. 相关寄存器设置
       STC15W4k56S4单片机的A/D转换口在P1口(P1.7-P1.0),有8路10位高速A/D转换器,速度可达到300KHz(30万次/秒)。8路电压输入型A/D,可做温度检测、电池电压检测、按键扫描、频谱检测等。上电复位后P1口为弱上拉型IO口,用户可以通过软件设置将8路中的任何一路设置为A/D转换,不需作为A/D使用的P1口可继续作为IO口使用(建议只作为输入)。需作为A/D使用的口需先将P1ASF特功能寄存器中的相应位置为‘1’,将相应的口设置为模拟功能。
       本任务中STC15W4k64S4单片机ADC模数转换寄存器配置如表3-9所示:
表3-9 ADC模数转换寄存器配置
符号 描述 地址 位地址及其符号
MSB                          LSB
复位值
P1ASF 模拟输入通道功能控制寄存器 9DH PI7ASF|PI6ASF|PI5ASF|PI4ASF|PI3ASF|PI2ASF|PI1ASF|PI0ASF| 0000 0000B
ADC_CONTR ADC控制寄存器 BCH ADC_POWER|SPEED1|SPEED0|ADC_FLAG|ADC_START|CHS2|CHS1|CHS0 0000 0000B
ADC_RES A/D转换结果寄存器 BDH A/D转换结果寄存器 0000 0000B
ADC_RESL A/D转换结果寄存器 BEH A/D转换结果寄存器 0000 0000B
CLK_DIV
(PCON2)
时钟分频寄存器 97H SysCKO_S1|SysCKO_S0|ADRJ|Tx_Rx|SysClKS2|CLKS1|CLKS0 0000 0000B
IE 中断允许控制 A8H EA | ELVD | EADC | ES | ET1 | EX1 | ET0 | EX0 0000 0000H
IP 中断优先级控制 B8H PPCA | PLVD | PADC | PS | PT1 | PX1 | PT0 | PX0 0000 0000H
 
       模拟输入通道功能控制寄存器P1ASF不能位寻址,需采用字节操作。
       P1ASF=| 0x01;          //P1.0作为模拟输入通道
       ADC控制寄存器ADC_CONTR中,ADC_POWER为ADC电源控制位,ADC_POWER=0时。关闭ADC电源,          ADC_POWER=1时,打开ADC电源;SPEED1、SPEED0为ADC转换速度控制位,具体设置如表3-9所示。
       ADC_START为A/D转换启动控制位,ADC_START=1,开始转换,ADC_START=0,不转换,CHS2、CHS1、CHS0为模拟通道选择控制位,其选择情况如表3-10所示。
表3-10  A/D转换速度设置
SPEED1 SPEED0 A/D转换一次所需时间
1 1 90个时钟周期
1 0 180个时钟周期
0 1 360个时钟周期
0 0 540个时钟周期
 
表3-11  模拟输入通道选择
CHS2 CHS1 CHS0 模拟输入通道选择
0 0 0 选择ADC0(P1.0)作为A/D输入
0 0 1 选择ADC1(P1.1)作为A/D输入
0 1 0 选择ADC2(P1.2)作为A/D输入
0 1 1 选择ADC3(P1.3)作为A/D输入
1 0 0 选择ADC4(P1.4)作为A/D输入
1 0 1 选择ADC5(P1.5)作为A/D输入
1 1 0 选择ADC6(P1.6)作为A/D输入
1 1 1 选择ADC7(P1.7)作为A/D输入
 
         特殊功能寄存器ADC_RES、ADC_RESL用于保存A/D转换结果,A/D转换结果的存储格式由CLK_DIV寄存器中B5位ADRJ进行控制。
       CLK_DIV | = 0x20;     //ADC_RES和ADC_RESL存储格式为:ADC_RESL从高位//到低位依次存储ADC _RES7至ADC _RES0,ADC_RES   //的B1和B0分别存储ADC _RES9和ADC _RES8
      CLK_DIV寄存器中B5位ADRJ为默认为0时,ADC_RES从高位到低位依次存储ADC _RES9至ADC _RES2,ADC_RESL的B1和B0分别存储ADC _RES1和ADC _RES0。
  1. 关键代码分析
#include <STC15.h>
#include "intrins.h"
#include "stdio.h"
 
#define FOSC 11059200
#define BAUD 9600
 
typedef unsigned char BYTE;
typedef unsigned int WORD;
 
#define ADC_POWER 0x80 //ADC电源控制位
#define ADC_FLAG 0x10 //ADC完成标志
#define ADC_START 0x08 //ADC起始控制位
#define ADC_SPEEDLL 0x00 //540个时钟
#define ADC_SPEEDL 0x20 //360个时钟
#define ADC_SPEEDH 0x40 //180个时钟
#define ADC_SPEEDHH 0x60 //90个时钟
 
void InitUart();
void SendData(BYTE dat);
void Delay(WORD n);
void InitADC();
void ShowResult(void);
 
BYTEgewei,shifen;//定义电压输出值的个位和小数点后面第一位
BYTE ch = 0; //ADC通道号
WORD adc_result;//定义10位AD采集结果值
 
void main()
{
    InitUart(); //初始化串口
    InitADC(); //初始化ADC
    IE = 0xa0; //使能ADC中断
 
    while (1)
      {
        ShowResult(); //显示通道1
        Delay(150);//延迟
      }
}
/*----------------------------
ADC中断服务程序
----------------------------*/
void adc_isr() interrupt 5 using 1
{
    ADC_CONTR &= !ADC_FLAG; //清除ADC中断标志
    adc_result=ADC_RES*256+ADC_RESL;
    ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;
}
/*----------------------------
初始化ADC
----------------------------*/
void InitADC()
{
    P1ASF = 0x01; //设置P1口为AD口
    CLK_DIV |=0x20;
    ADC_RES = 0; //清除结果寄存器
    ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;
    Delay(2); //ADC上电并延时
}
/*----------------------------
初始化串口
----------------------------*/
void InitUart()
{
    SCON = 0x5a; //设置串口为8位可变波特率
    TMOD = 0x20; //设置定时器1为8位自动重装载模式
    AUXR = 0x40; //定时器1为1T模式
    TH1 = TL1 = 0xDC; //9600 bps(256 - 11059200/32/9600)
    TR1 = 1;
}
/*----------------------------
发送ADC结果到PC    ,例如2.7V
----------------------------*/
void ShowResult(void)
{
    gewei=adc_result%1000%100/10;
    shifen=adc_result%1000%100%10;
    SendData(gewei+0x30); //显示个位的电压数值
    SendData(0x2E); //显示小数点
    SendData(shifen+0x30); //显示十分位位上的电压数值
    SendData(0x56); //显示"V"
    SendData(0x0d); //
    SendData(0x0a); //回车
}
/*----------------------------
发送串口数据
----------------------------*/
void SendData(BYTE dat)
{
    while (!TI); //等待前一个数据发送完成
    TI = 0; //清除发送标志
    SBUF = dat; //发送当前数据
}
/*----------------------------
软件延时
----------------------------*/
void Delay(WORD n)
{
    WORD x;
    while (n--)
    {
    x = 5000;
    while (x--);
    }
}/*----------------------------
软件延时
----------------------------*/
void Delay(WORD n)
{
    WORD x;
    while (n--)
    {
    x = 5000;
    while (x--);
    }
}
 
任务实现
  • 1. 将无线模块插到节点底板上,注意天线朝左。
  • 2. 为节点底板通电
  • 3. 使用Keil软件打开随书资源中”源代码\项目三\任务5\WZ01_CZ_A_V1.0.uvproj”,工程目录如图所示。
  • 4. 在主程序main.c中编辑前面关键代码分析中的源码,完成后保存。
  • 5. 依据本教材项目二中任务二的操作,进行编译选项的设置。
  • 6. 点击编译按钮,成功编译后,在工程目录下output文件夹中生成了”外部信号采集实验.hex”可执行文件。
  • 7. 打开STC-ISP软件,将USB-TTL下载器插上电脑(需要安装驱动),依据本教材项目二中任务三中的操作,选择下载器端口号和刚刚生成的HEX文件。
  • 8. 查看运行结果
  •     程序下载完毕时。打开串口助手,串口根据自己电脑上的串口接口进行调整,波特率设为9600 bit/s,串口助手“接受缓冲区”选择为“文本模式”,点击打开串口,在“接受缓冲区”可直接读取电压值。
运行结果
 
任务小结
本任务主要是利用STC15W4k56S4系列单片机ADC采集电压,串口发送到计算机串口助手中显示,主要讲述了单片机ADC的基本知识及其相关寄存器的功能描述,在学习过程中重点掌握 ADC模数转换寄存器的设置及程序中的书写方式。理解关键代码分析中void InitADC()及void InitUart()函数中的代码功能。

唯众物联网工程应用实训装置带你快速掌握物联网关键技术

唯众物联网实训室工程应用装置
一、产品名称:物联网工程应用实训装置
二、产品型号和技术规格
1.  产品型号:WZ-IOT-ATP
2.  外型尺寸:
桌面式操作台1个操作台底座1个
3.  电压/功率:220V
4.  配套设备
实训台:
温湿度传感器1个
人体红外监测器1个
高频RFID阅读器1个
光照强度检测器1个
可燃气体监测器1个
RGB三色灯执行器1个
LED显示屏2个
智能语音播放设备1个
继电器1个
 
       物联网教学实训主要用于对物联网核心课程的知识点学习,能够服务于相关课程的实验和实训需求。
       核心课程主要针对学科基础技术的培养,掌握物联网概论,传感器和RFID 等感知设备认知和开发,ZigBee/Wi-Fi/蓝牙等无线网络的配置、维护和开发,物联网互联接入及存储,物联网应用层软件开发,物联网产品整合等基本知识。
       核心课程采用全模块化的实验箱教学产品进行实验,具备优良的教学实验特性:全模块化的设计、开放式的硬件接口、开源的实验代码、完整的教学资源、贴心的售后服务。
       基于ARM Cortex-M4核心的通信网关,支持无线节点模块的双向连接及组网,与配套“可视化编辑器”和“可视化控制器”进行配置和控制。物联网关可以管理不同协议的无线节点模块,并能将多个无线节点模块视作不同设备,将无线节点模块的数据转换为TCP网络通信进行传输,网关同无线节点模块可以互通互联,轻松构建物联网络,共同构成物联应用开发平台。通过本物联网平台,可以迅速降低物联网应用的开发成本和开发时间,开发者即便不会编程,也可以在一两天之内,就迅速使用本平台开发搭建出自己的物联网应用。
       通过电脑PC端可直接以“可见即可得”的方式在此工具上生成不同的设备操作界面,支持指示灯、按键、图片集合、变量视窗、图文链接等五种可视化控件。所有控件的动作都可以直接反应到实际的物联设备(即无线节点模块)上。界面生成后,可以直接导入App使用,而不需要重新编译或安装App。
       通过物联网关、可视化控制器、可视化界面生成器编辑器、万纳模组、物联网传感器/执行器以及配套物联网连件连接件,师生不仅可以完成出基于物联网、远程访问、设备联动等功能的物联网实训项目,还可以迅速开发物联网商业产品\项目,如空气监测仪、电气设备在线监测器等等,并随时实现不同设备间的联动,而这些开发过程,基于本系统的可视化开发工具,可以做到零编程实现物联网应用系统。
       支持家庭常用的各种无线协议(红外、射频),兼容市面绝大多数品牌的空调、电视机、灯光、安防、窗帘等等家电设备,因此可以直接当做一套完备的智能家居系统进行使用,并集成了摄像头功能,可以直接在App中使用摄像头。
       平台所有设备采用模块化、集散化、工业化的设计模式,每个模块都为独立工作单元;模块均接近实际应用系统,能够容纳2-3个学生同时实训,可完成工程项目应用开发系统中硬件设备的安装、布线与调试,完成设备间的无线组网,既具有展示型又具有实操性。能够组建具有行业特色的物联网智能家居实训项目,确保学生可利用设备搭建真实工程项目。
 


上一篇:物联网技术区||STC15单片机应用开发之 LED灯亮度控制

下一篇:物联网技术区||传感控制器的应用之温湿度的获取