基于stm32的8路电压表

  • 程序架构
  • 连接阿里云
    • 阿里云
    • wifi
    • mqtt
  • 电压采集
    • ADC
    • 分压电路
  • 声光报警
    • 蜂鸣器及LED
      • 蜂鸣器
      • LED
    • 串口屏
  • 数据存储
    • AT24C02
  • 供电

程序代码及PCB

程序架构

我们使用嵌入式实时系统中的UCOS III作为框架,进行程序的开发。
UCOS III资料:UCOSIII简介

#mermaid-svg-JFP47Vpy5E61rxrp {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-JFP47Vpy5E61rxrp .error-icon{fill:#552222;}#mermaid-svg-JFP47Vpy5E61rxrp .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-JFP47Vpy5E61rxrp .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-JFP47Vpy5E61rxrp .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-JFP47Vpy5E61rxrp .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-JFP47Vpy5E61rxrp .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-JFP47Vpy5E61rxrp .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-JFP47Vpy5E61rxrp .marker{fill:#333333;stroke:#333333;}#mermaid-svg-JFP47Vpy5E61rxrp .marker.cross{stroke:#333333;}#mermaid-svg-JFP47Vpy5E61rxrp svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-JFP47Vpy5E61rxrp .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-JFP47Vpy5E61rxrp text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-JFP47Vpy5E61rxrp .actor-line{stroke:grey;}#mermaid-svg-JFP47Vpy5E61rxrp .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-JFP47Vpy5E61rxrp .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-JFP47Vpy5E61rxrp #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-JFP47Vpy5E61rxrp .sequenceNumber{fill:white;}#mermaid-svg-JFP47Vpy5E61rxrp #sequencenumber{fill:#333;}#mermaid-svg-JFP47Vpy5E61rxrp #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-JFP47Vpy5E61rxrp .messageText{fill:#333;stroke:#333;}#mermaid-svg-JFP47Vpy5E61rxrp .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-JFP47Vpy5E61rxrp .labelText,#mermaid-svg-JFP47Vpy5E61rxrp .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-JFP47Vpy5E61rxrp .loopText,#mermaid-svg-JFP47Vpy5E61rxrp .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-JFP47Vpy5E61rxrp .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-JFP47Vpy5E61rxrp .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-JFP47Vpy5E61rxrp .noteText,#mermaid-svg-JFP47Vpy5E61rxrp .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-JFP47Vpy5E61rxrp .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-JFP47Vpy5E61rxrp .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-JFP47Vpy5E61rxrp .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-JFP47Vpy5E61rxrp .actorPopupMenu{position:absolute;}#mermaid-svg-JFP47Vpy5E61rxrp .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-JFP47Vpy5E61rxrp .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-JFP47Vpy5E61rxrp .actor-man circle,#mermaid-svg-JFP47Vpy5E61rxrp line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-JFP47Vpy5E61rxrp :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}声光报警电压检测串口屏AT24C02阿里云等待电压值更新更新上、下限阻塞等待完成检测完成8个通道检测检测电压范围是否正常完成检测,循环写AT24C02同时,发送数据至串口屏写入低8位,AT24C02需5ms处理写入高8位,AT24C02需5ms处理发布话题至阿里云,从而更新数据进入阻塞,等待下一次检测完成声光报警电压检测串口屏AT24C02阿里云

连接阿里云

阿里云

在本课设中,我们使用的是阿里云的物联网平台。阿里云物联网平台是一个集成了设备管理、数据安全通信和消息订阅等能力的一体化平台。向下支持连接海量设备,采集设备数据上云;向上提供云端API,服务端可通过调用云端API将指令下发至设备端,实现远程控制。
详细介绍:什么是物联网平台

wifi

WiFi模块使用ESP8266,型号为安信可的ESP-12S,使用AT指令配置相关的功能。
esp8266资料:安信可ESP8266简介
ESP8266有三种工作模式:
1.Station (客户端模式)模块相当于一个客户端,可以链接到其他路由器发出的WIFI信号。主要应用在网络通信中。
2.AP (接入点模式)模块本身相当于一个路由器,其他设备可链接到该模块发送的信号,主要应用在主从设备的主机部分。
3.Station+AP (两种模式共存)就是说模块可以当成一个设备(client)连接区域网内的路由,也可以设置成是一个路由(sever),也可以既作为局域网里面的client同时又是其他client的sever。
本课设中使用STA模式,并连接WiFi,AT指令配置如下

AT+CWMODE=1
AT+RST
AT+CWJAP="iQOO Z1x","12345678"

mqtt

MQTT(消息队列遥测传输) 是基于 TCP/IP 协议栈而构建的支持在各方之间异步通信的消息协议。MQTT在空间和时间上将消息发送者与接收者分离,因此可以在不可靠的网络环境中进行扩展。虽然叫做消息队列遥测传输,但它与消息队列毫无关系,而是使用了发布和订阅(Pub/Sub)的模型。
MQTT 是一种轻量级的、灵活的网络协议,致力于为 IoT 开发人员实现适当的平衡:

  1. 这个轻量级协议可在严重受限的设备硬件和高延迟/带宽有限的网络上实现。
  2. 它的灵活性使得为 IoT 设备和服务的多样化应用场景提供支持成为可能。

详细介绍:MQTT 入门介绍
使用AT指令连接阿里云
连接指令参考

AT+CIPSNTPCFG=1,8,"ntp1.aliyun.com"
AT+MQTTUSERCFG=0,1,"","","",0,0,""
AT+MQTTUSERNAME=0,"voltmeter&a1LF9tJmi7L"
AT+MQTTPASSWORD=0,"00D54361109FD2F1F4537F928C0CBB6EEA81E253"
AT+MQTTCLIENTID=0,"12345|securemode=3\,signmethod=hmacsha1\,timestamp=789|"
AT+MQTTCONN=0,"a1LF9tJmi7L.iot-as-mqtt.cn-shanghai.aliyuncs.com",1883,1

使用AT指令对阿里云发布话题

AT+MQTTPUB=0,"/sys/a1LF9tJmi7L/voltmeter/thing/event/property/post","{\"method\":\"thing.service.property.set\"\,\"id\":\"2012934115\"\,\"params\":{\"ch2\":4.7231}\,\"version\":\"1.0.0\"}",1,0

电压采集

ADC

我们所使用的stm32f411拥有1个ADC,12通道,其拥有12位的分辨率,对于3.3v,可以达到约0.00081v的精度。我们在程序中配置通道0-8进行测量,配置采样速率25MHz,每个规则序列中只包含一个通道,并配置连续扫描。
每次采样时会采集10个值,经过冒泡法排序后,去除最小、最大值,并计算平均值从而达到滤波的效果。

//排序
void my_sort(u16 *buf,u8 num)
{u8 i,j,flag=1;u16 k;
for(i=0;i<9;i++){for(j=0;j<9-i;j++){flag = 0;    //在内循环中设这个标记,如果没有发生互换,就设为0if(buf[j]>buf[j+1]){k = buf[j];buf[j] = buf[j+1];buf[j+1] = k;   flag = 1;  //发生互换就设为1          }               }       if(flag==0)//最后利用一个分支来始没有交换的时候跳出,这样可以减少计算次数{break;}}
}
//adc采集任务
static  void  ADC_task  ( void * p_arg )
{u16 buf[10];u8 i=0;OS_ERR err;while(1){OSSemPend(&STAER_ADC_SEM,0,OS_OPT_PEND_BLOCKING,0,&err); //请求ADC开始信号量              for(i=0;i<9;i++)//采集9个通道电压{Get_Adc(channel_list[i].ADC_channels,buf);my_sort(buf,10);channel_list[i].current=my_average(buf,1,8)/4096*3.3*10000;//转化为3.3V电压值if(i!=8)bouns_light(&channel_list[i]);}OSSemPost(&END_ADC_SEM,OS_OPT_POST_1,&err);//发送信号量       OSTimeDlyHMSM(0, 0, 0, 5, 0, &err);}
}

同时我们使用优质的LDO芯片XC6203为stm32及adc供电,保证了其基准电压的稳定。
stm32的adc详细介绍:STM32—ADC详解

分压电路

由于stm32的ADC只能测量0-3.3v电压,我们使用精密电阻(精度0.1%)进行分压,并且增加了一个100nf的电容稳定电压,从使8个通道的特性相差较小。分压电阻为1.2M和1M,经过分压,stm32可以测量0-6.05V电压

声光报警

蜂鸣器及LED

蜂鸣器

我们使用5V的有源蜂鸣器,保证了声音足够大。但是stm32无法输出5V电压,于是我们将IO口配置为开漏输出,通过上拉电阻实现5v输出。

void BEEP_init(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;GPIO_InitStructure.GPIO_Mode =GPIO_Mode_OUT;//蜂鸣器配置开漏输出,使用上拉电阻输出5VGPIO_InitStructure.GPIO_OType = GPIO_OType_OD;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOB, &GPIO_InitStructure);BEEP_OFF();}

LED

我们通过相关的电路设计,实现通过stm321的一个IO口控制两个LED的亮灭。正常时,stm32的IO配置为高阻态,此时红灯、绿灯都不亮;超过上限,IO口配置为推挽输出、低电平,此时红灯亮;低于下限,IO配置为推挽输出、高电平,此时绿灯亮。

void LED_set(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pinx,unsigned char state)
{GPIO_InitTypeDef GPIO_InitStructure;if(state==0)//两个灯都不亮{GPIO_InitStructure.GPIO_Pin = GPIO_Pinx;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//输入模式GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;//高阻态GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_Init(GPIOx, &GPIO_InitStructure);}else if(state==1)//下侧亮{GPIO_InitStructure.GPIO_Pin = GPIO_Pinx;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;GPIO_Init(GPIOx, &GPIO_InitStructure);  GPIO_SetBits(GPIOx,GPIO_Pinx);//置为高电平}else if(state==2)//下侧亮{GPIO_InitStructure.GPIO_Pin = GPIO_Pinx;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;GPIO_Init(GPIOx, &GPIO_InitStructure); GPIO_ResetBits(GPIOx,GPIO_Pinx);//置为低电平}}

串口屏

电压值的显示及上、下限的设置,我们使用串口屏,通过上位机制作其显示的界面并烧录。通过串口屏,我们可以设置相关的上下限、查看当前值及掉电保存的值。并且通过串口于stm32通讯

数据存储

AT24C02

尽管stm32用于内部flash,当时由于其读写寿命只有1万次左右。而我们的课设中以10Hz的速度更新9个通道值,每个电压值对应的存储块每秒读写就有10次,一分钟就有600次,所以我们选择EEPROM作为存储介质,AT24C02拥有30万次的读写寿命,再通过均衡读写,就可以实现课设的要求。
详细介绍:AT24C02
存储器FLASH,EEPROM介绍:FLASH和EEPROM的区别


static  void  AT24C02_task  ( void * p_arg )
{OS_ERR err;u16 temp=0;u8 i=0;while(1){OSSemPend(&END_ADC_SEM,0,OS_OPT_PEND_BLOCKING,0,&err); //请求信号量     for(i=0;i<9;i++){temp=channel_list[i].current;screen_send_value(channel_list[i].screen_name_current,temp);AT24CXX_WriteOneByte(channel_list[i].AT24C02_Palce,temp%256);//写入低字节OSTimeDlyHMSM(0, 0, 0, 5, 0, &err);AT24CXX_WriteOneByte(channel_list[i].AT24C02_Palce+1,temp/256);//写入高字节OSTimeDlyHMSM(0, 0, 0, 5, 0, &err);}if(ch>0){temp=channel_list[ch-1].current;screen_send_value("chnael.x0.val",temp);  }       OSSemPost(&STAER_ADC_SEM,OS_OPT_POST_1,&err);//发送信号量    }
}

供电

供电一开始我们选择使用AMS117,将12V降至5v,但压差过大,AMS117发热较大,无法正常使用。或许可以考虑使用7805或LM2956进行压降。不过我们后来想了一下,不如直接用5V供电。至于stm32的3.3v供电,我们使用了LDO芯片XC6204

课设 stm32的8路电压表采集系统相关推荐

  1. 基于STM32的智能温室控制系统仿真电路设计(温控补光)-基于STM32的智能蓝牙温控风扇控制系统设计-基于STM32的无线蓝牙心电监护仪系统设计【毕设课设分享】

    1609 基于STM32的智能蓝牙温控风扇控制系统设计-毕设课设 1.LCD1602液晶显示当前温度,温度上下限值,风扇等级,自动手动模式: 2.设置有4个按键,按键1可以设置自动和手动2种模式切换: ...

  2. 基于STM32的光敏传感器数据采集系统-嵌入式系统与设计课程设计

    目录 1 项目概述 1.1 项目介绍 1.2 项目开发环境 1.3 小组人员及分工 2 需求分析 2.1 系统需求分析 2.2 可行性分析 2.3 项目实施安排 3 系统硬件设计 3.1 系统整体硬件 ...

  3. 5.3学习计划 ADC课设思路

    你要特别努力地生活,但也别忘了快乐!     1.任务计划     (1)课设选题开题     (2)做负反馈放大电路的实验     2.计划完成度     (1)这学期的课设,我选择的题目是模数转换 ...

  4. sr锁存器 数电_数电课设其实也没那么难2.1

    1 引言 如上就是 课题二.数字式抢答器 课题三.多路彩灯控制器 相比天天在路口见的红绿灯 这俩题可能抽象了一点 我自己是课题三 做的时候发现 这题还真不是最简单的一个... 一步一步来吧 数电并不是 ...

  5. stm32采集脉冲信号_基于STM32+FPGA的数据采集系统的设计与实现

    引言 由于火控系统工作环境特殊,所需采集信号复杂多样,传统的以微控制器或PC为主的采集系统往往难以胜任.针对上述问题,提出了一种基于STM32+FPGA的数据采集系统的设计方案,该方案不仅能够完成对多 ...

  6. linux嵌入式红绿灯,嵌入式上机课设(红绿灯)..doc

    嵌入式上机课设(红绿灯). 成绩 _______ 指导教师评定成绩: 审定成绩: 重 庆 邮 电 大 学 移 通 学 院 课程设计报告 设计题目: 学 校: 重庆邮电大学移通学院 学 生 姓 名: 专 ...

  7. 2021年数据库课设该怎么做?一个超市管理系统,简单的前后端分离项目,带你从概要设计走到项目发布!(Vue.js+SpringBoot+MybatisPlus)

    由于本文格式原来是word,所以文中有些格式不太对.如果这篇文章对你有帮助,麻烦点赞评论一下谢谢!源码和word文档可私聊领取~ 目录 一.相关技术介绍 1.1 RDBMS: 1.2应用程序开发环境: ...

  8. 研讨班管理系统的设计与实现【数据库课设】

    觉得好请点个赞,谢谢!笔者用ProcessOn作的图 一.绪论 随着计算机技术的发展和数据库技术的广泛应用,各种以数据库为核心,以高级程序语言搭建用户软件的管理系统应运而生,不仅实现了自动化办公大大提 ...

  9. 基于单片机波形发生器PCB原理图报告设计资料-基于单片机比赛计时计分电路仿真设计-基于单片机报警器与旋转灯设计-基于单片机八路数据电压采集报警控制系统-基于单片机病房呼叫系统控制系统设计【毕设课设资】

    1302基于单片机波形发生器PCB原理图报告设计资料-毕设课设原理图程序资料 设计一个信号发生器,能在单片机的基础上控制并产生三角波.方波.正弦波和矩形波,且频率幅度和波形可以通过按键改变. #inc ...

  10. 数据结构课设_网页形式的景区导游

    一.前言 欢迎大家来到这里~~ 1.这次数据结构课设,笔者的题目是网页形式的导航系统. 2.数据结构方面应用了链表存储商品信息.图来存储景点和路径信息.在图的广度优先中还用到了队列: 3.具体的算法有 ...

最新文章

  1. python hmac
  2. 八个最好的开源机器学习框架和库
  3. vue项目 一行js代码搞定点击图片放大缩小
  4. Scrapy-Item Loaders(项目加载器)
  5. linux切换到字符界面stemctl,CentOS7两种模式
  6. 计算机应用基础的客观题,计算机应用基础专题库客观题参考答案11
  7. [今日白学]组件的基础的基础的基础
  8. POJ3750 小孩报数问题【模拟】
  9. python缩写转换成全拼_Python中文转拼音代码(支持全拼和首字母缩写)
  10. SQL 四舍五入 同时取规定小数位的数值
  11. 软件基本功:不要给代码加系数
  12. 编译的html帮助文件(.chm)打不开,chm文件无法打开怎么办
  13. 读书笔记 | 财务会计理论(第7版 William R.Scott)(上)
  14. PMP考试 工作绩效数据 工作绩效信息 工作绩效报告 区别与联系
  15. Aidlux实践-快速实现街道人流量统计系统
  16. 游戏本地文件乱码问题
  17. 极客日报第83期:百度92年程序员因“篡改数据”被抓;运营商辟谣首批 5G 用户被抛弃;特斯拉回应上海工厂摄像头被入侵
  18. Python+Selenium2(上)
  19. [激光原理与应用-62]:激光器 - 光学 - 怎样测量光斑和光束质量?
  20. 哈佛大学搞出声波传数据芯片,抗干扰能力更强,适用于量子计算等新兴领域...

热门文章

  1. 1500_1763 全球统一 伊比利亚 俄罗斯 西欧
  2. SVN(三)利用 IntelliJ IDEA 进行代码对比的方法
  3. CBoard框架使用总结一
  4. Mysql Mac版下载安装教程
  5. 细胞自动机 通用计算机,细胞自动机论
  6. 禁忌搜索算法-关键操作与原则
  7. python画正切函数图像_python的pygal模块绘制反正切函数图像方法
  8. IDEA如何安装使用阿里代码规范插件
  9. 【转】otool 与dylib
  10. 17个机器学习的常用算法