目录
记录一些我在工作和学习过程中遇到的问题
NTC:在淘宝随便买的
单片机型号:STM32G030C8T6
目的:用单片机采集NTC温度
本文主要是介绍关于NTC激励电压的选择
热敏电阻NTC(Negative Temperature Coefficient),直译过来就是负温度系数,表示其阻值随着温度的升高而呈指数下降。热敏电阻是无源器件,自身不能产生电气输出,需要激励电压或者激励电流来测量传感器的电阻,也就是用一个小电流流过传感器以产生电压,单片机ADC采集这个电压计算出此时NTC的阻值进而推出其温度值。

用单片机和NTC热敏电阻测量温度的推荐电路,这是相对简单的电路,如果要考虑稳定性和抗干扰的问题最好加一个射级跟随器,我这里用运放完成,参考电路如下:

在PCB布局的时候,NTC的信号是模拟信号,要注意布局的时候与数字信号隔离开。
以上电路设计出来,还要考虑一个问题就是激励电压Vcc的选择,这在之前是我一直忽略的一个问题,经过我经理的讲解才知道,要想单片机采集的温度更精确,激励电压是不能随便选择的。
首先我的单片机是12位ADC,但是在实际应用中,相信很多和我一样在电子行业经验不足的,设计出来的产品是很难匹配这个数值的,不论是器件本身的误差还是来自其他电路的干扰以及信号耦合的问题,都会导致单片机最终采集到的模拟信号存在误差。经理的意思是12位ADC就看成8位来计算,但是考虑到电路比较简单相对能出现干扰的部分不多所以我还是按照10位ADC来计算。
关于精度的计算:假设单片机ADC的参考电压是0~3.3v,那么其采样范围也是0~3.3v,10位ADC分辨率为2^10 = 1024,我们可以理解成0~3.3v的电压分布在这1024个数字上,每一个数字变化的电压就表示他的精度,计算公式:3.3/2^10 = 0.003。
我简单拉了一个表格,懒得算的可以参考:(注:计算的时候要注意你设计的单片机参考电压范围)
| 参考电压 | 位数 | 分辨率 | 精度 |
| 3.3 | 6 | 64 | 0.0515625 |
| 3.3 | 7 | 128 | 0.02578125 |
| 3.3 | 8 | 256 | 0.012890625 |
| 3.3 | 9 | 512 | 0.006445313 |
| 3.3 | 10 | 1024 | 0.003222656 |
| 3.3 | 11 | 2048 | 0.001611328 |
| 3.3 | 12 | 4096 | 0.000805664 |
通过简单的构思,我们不难分析出,要想NTC精度提高,我们电压变化的极值在满足单片机ADC采样范围的条件下,还要尽量靠近这个值。也就是说如果你测量的环境温度变化范围在0~99℃,那么你需要计算0℃和99℃时,其分别表示的电压在相减得出极值,看是否和单片机的ADC采样范围匹配。
先用Vcc=5v电压来计算,不同型号的NTC在不同温度情况下其电阻是不一样的,具体的RT表格可以向你买的NTC厂家要,我的型号在0℃时电阻是33k,99℃时电阻是0.5k,可以得出其电压极值为:5*33/(10+33) - 5*0.5(10+0.5) = 3.6v,这个值是不满足单片机的采样范围的,所以5v及其以上电压我不能考虑。
再来看4.096v电压,同理计算极值4.096*33/(10+33) - 4.096*0.5(10+0.5) = 2.94,满足条件可以选择。
极值满足我们还要看ADC的精度是否能达到要求,首先在电压4.096v的情况下得出的极值为2.94v,那么其0.1℃的精度为 2.94/1000 = 0.00294,参照上表单片机的精度表格,与10位ADC可以比较匹配,综合考虑下是可以选择4.096的作为Vcc激励电压的。
懒得算的,我也简单拉了一个表格,仅供参考:
| 激励电压 | 电阻最小值(99℃) | 电阻最大值(0℃) | 上拉电阻 | 99℃电压 | 0℃电压 | 变化极值 | 1℃变化 | 0.1℃变化 |
| 2.5 | 0.5 | 33 | 10 | 0.119047619 | 1.918604651 | 1.799557032 | 0.01799557 | 0.001799557 |
| 3.3 | 0.5 | 33 | 10 | 0.157142857 | 2.53255814 | 2.375415282 | 0.023754153 | 0.002375415 |
| 4.096 | 0.5 | 33 | 10 | 0.195047619 | 3.14344186 | 2.948394241 | 0.029483942 | 0.002948394 |
| 5 | 0.5 | 33 | 10 | 0.238095238 | 3.837209302 | 3.599114064 | 0.035991141 | 0.003599114 |
这就是关于用单片机和NTC采集温度的设计过程,如果有不对的地方欢迎纠正!
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数
文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,
说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU
我在我的项目中有一个用户和一个管理员角色。我使用Devise创建了身份验证。在我的管理员角色中,我没有任何确认。在我的用户模型中,我有以下内容:devise:database_authenticatable,:confirmable,:recoverable,:rememberable,:trackable,:validatable,:timeoutable,:registerable#Setupaccessible(orprotected)attributesforyourmodelattr_accessible:email,:username,:prename,:surname,:
我正在尝试创建密码规则来设计可恢复的密码更改。我通过passwords_controller.rb做了一个父类(superclass),但我需要在应用规则之前检查用户角色,但我所拥有的只是reset_password_token。 最佳答案 假设您的模型是用户:User.with_reset_password_token(your_token_here)Source 关于ruby-on-rails-设计通过reset_password_token获取用户,我们在StackOverflow
我已经使用Apartment设置了一个Rails5应用程序(1.2.0)和Devise(4.2.0)。由于某些DDNS问题,应用只能在app.myapp.com下访问(请注意子域app)。myapp.com重定向到app.myapp.com。我的用例是每个注册该应用的用户(租户)都应该通过他们的子域(例如tenant.myapp.com)访问他们的特定数据。用户不应限定在其子域内。基本上应该可以从任何子域登录。重定向到租户的正确子域由ApplicationController处理。根据Devise标准,登录页面位于app.myapp.com/users/sign_in。这就是问题开始的
我在关注RyanbatesRailsCast的devise和omniauth(第235集-devise-and-omniauth-revised)。当我尝试使用Twitter登录时,标题中不断出现错误。defself.new_with_session(params,session)ifsession["devise.user_attributes"]new(session["devise.user_attributes"],without_protection:true)do|user|user.attributes=paramsuser.valid?end完整跟踪:C:/Ruby20