STM32采集4-20mA传感器,以及ADC+DMA出现的问题及解决

STM32只能采集0-3.3V的数据,如果需要采集0-5V和4-20mA的数据需要在电路中进行相关设计:

0-5V采集电路

4-20mA采集电路

本文主要讲述4-20mA采集电路采集

电路输入4-20mA,作用在120欧姆电路(后面面是电压跟随电路,并联),对应输入电压0.48~2.4V

STM32103ZET6为例,内部ADC采集12bit,0-3.3V对应采集到12bit的0-4095数值,则采集的电流对应大约为0.48/3.3*4059~2.4/3.3*4095-->595~2978数值

假如我们是采集的0-6Mpa的压力,那么简单的换算为:

(采集的数值-595)*6000000/(2978-595)=采集的压力(pa)

代码如下:代码需要将GPIO和ADC和DMA根据自己的电路接口简单配置即可

ADC.c代码,两个函数分别是ADC+DMA初始化代码和ADC采集一次代码
#include "stm32f10x.h"                  
### 使用 Vue3 和 Element Plus 构建后台管理系统 #### 项目初始化与环境搭建 为了创建一个基于 Vue3 和 Element Plus 的后台管理系统,首先需要安装必要的依赖项并设置开发环境。这可以通过 Vue CLI 或 Vite 来快速完成。 ```bash npm init vite@latest my-vue-app --template vue cd my-vue-app npm install element-plus pinia axios ``` 上述命令会建立一个新的 Vue 应用程序,并安装 `element-plus` 组件库以及用于状态管理和 HTTP 请求的工具包[^2]。 #### 引入 Element Plus 及配置 为了让整个应用程序能够访问到 Element Plus 提供的各种 UI 控件,在项目的入口文件 main.js 中全局注册该插件: ```javascript import { createApp } from 'vue' import App from './App.vue' import ElementPlus from 'element-plus' import 'element-plus/dist/index.css' const app = createApp(App) app.use(ElementPlus) app.mount('#app') ``` 这样就完成了对 Element Plus 的基本集成工作。 #### 创建布局组件 Layouts 一个好的后台管理平台通常会有固定的顶部导航栏、侧边菜单区和主要内容区域。可以新建几个基础性的 layout 文件夹来组织这些部分的内容结构。 - **Header.vue**: 负责显示网站Logo及用户信息等; - **Sidebar.vue**: 展现左侧的功能列表链接; - **MainContent.vue**: 动态渲染各个页面视图的位置; 通过组合以上三个子组件形成完整的页面框架[^3]。 #### 实现 Tab 页面切换功能 针对多标签页浏览的需求场景,可以在路由守卫里监听路径变化事件,从而控制是否重新加载当前激活选项卡的数据还是仅更新 URL 地址而不触发服务端交互行为。 ```javascript // router/index.js router.beforeEach((to, from, next) => { const toFullPath = to.fullPath; let openTabs = JSON.parse(sessionStorage.getItem('openTabs')) || []; if (!openTabs.find(item => item.path === toFullPath)) { openTabs.push({ title: to.meta.title, path: toFullPath }); sessionStorage.setItem('openTabs', JSON.stringify(openTabs)); } store.commit('SET_CURRENT_TAB', toFullPath); next(); }); ``` 这段逻辑实现了当用户点击不同的菜单项时自动保存已打开过的标签记录至浏览器本地存储中,并同步更新选中的Tab索引位置。 #### 数据缓存机制 为了避免频繁发起网络请求造成资源浪费,对于那些不会经常变动的信息(如字典表),可以选择将其暂存在内存变量或是 Local Storage 内部一段时间内重复利用。 ```javascript async function fetchDictionaryData() { try { const cachedData = localStorage.getItem('dictionary'); if (cachedData && Date.now() - parseInt(localStorage.getItem('cacheTime'), 10) < CACHE_EXPIRATION_TIME) { return JSON.parse(cachedData); } const response = await api.get('/api/dictionary'); localStorage.setItem('dictionary', JSON.stringify(response.data)); localStorage.setItem('cacheTime', String(Date.now())); return response.data; } catch(error){ console.error("Failed to load dictionary data", error); } } ``` 这里展示了如何判断是否存在有效期内的有效副本,若有则直接返回之;反之才向服务器获取最新的版本并写回持久化层以便下次调用。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值