文章目录
前一部分介绍了如何配置ADC和DMA,这一部分介绍在硬件部分如何实现电流检测以及检测到电流后的数据处理。
在半导体上外加与电流方向垂直的磁场,会使得半导体中的电子与空穴受到不同方向的洛伦兹力而在不同方向上聚集,在聚集起来的电子与空穴之间会产生电场,电场力与洛伦兹力产生平衡之后,不再聚集,此时电场将会使后来的电子和空穴受到电场力的作用而平衡掉磁场对其产生的洛伦兹力,使得后来的电子和空穴能顺利通过不会偏移,这个现象称为霍尔效应。而产生的内建电压称为霍尔电压。
CC6902 内部集成了一颗高精度,低噪声的线性霍尔电路和一根低阻抗的主电流导线。当采样电流流经主电流导线,其产生的磁场在霍尔电路上感应出相应的电信号,经过信号处理电路输出电压信号,使得产品更易于使用。线性霍尔电路包含了高灵敏度霍尔传感器,霍尔信号预放大器,高精度的霍尔温度补偿单元,振荡器,动态失调消除电路和放大器输出模块。在无磁场的情况下,静态输出为 50%VCC。

| 名称 | 编号 | 功能 |
|---|---|---|
| IP+ | 1、2 | 采样电流正端 |
| IP- | 3、4 | 样电流负端 |
| GND | 5 | 地 |
| OUT | 6 | 信号输出端 |
| NC | 7 | 未连接 |
| VCC | 8 | 电源电压 |

首先VCC接5V的电压供电,GND脚接地,要检测的电流通过IP+引脚流入电流传感器,从IP-引脚流出,电流大小转化为电压大小从OUT脚输出。经过电阻的分压进入运放,运放起到增强驱动能力以及滤波和隔离的作用,其他电容作用为滤除干扰。最后AD-CUR节点接入单片机GPIO引脚。
这里选择的电流传感器型号为CC6902-30,检测电流的范围为-30~30A,灵敏度为0.067mv/A,静态输出电压为VCC/2(V)。检测电流与输出电压的关系为:VOUT(V) = VCC (V)/ 2 + 0.067 × IP(A)。当检测的电流为20A时,VOUT为3.84V.通过运放前的电阻分压,AD_CUR的电压为1.28V。
在理想情况下,电流值不变,VOUT电压值就不变,但是电路中往往存在各种各样的干扰,使得单片机读到的电压值有波动。这时候我们要多采集几次数据,然后取平均数,这样数据就会更加稳定。
多ADC通道求平均值示例代码如下:
首先定义ADC_ConvertedValue二维数组变量,TIMES为采样次数,AD_CHANNEL 为通道数。
然后在Get_Adc_Average函数中获得某一通道读取ADC值的平均数,Get_Adc_Average函数中变量ch为需要求平均数的通道,变量ADC_CHANNL为总通道数,变量ADCCon_Value为ch通道每一次读到的数值,ADC_Buf存放平均值。
extern volatile uint16_t ADC_ConvertedValue[TIMES][AD_CHANNEL];
void Get_Adc_Average(uint16_t *ADCCon_Value, uint8_t ADC_CHANNL, uint8_t ch, uint16_t *ADC_Buf)
{
uint8_t i, j;
uint8_t times;
uint16_t filter_temp;
uint16_t filter_buf[TIMES];
filter_sum = 0;
//排序
for (i = 0; i < TIMES; i++)
{ //这里获取某一通道每一次检测的ADC数值
filter_buf[i] = *(ADCCon_Value+i*ADC_CHANNL+ch);//这里获取某一通道每一次采样的ADC数值。相当于获取二维数组某一列全部的值。
}
for (j = 0; j < TIMES - 1; j++)
{
for (i = 0; i < TIMES - 1 - j; i++)
{
if (filter_buf[i] > filter_buf[i + 1])
{
filter_temp = filter_buf[i];
filter_buf[i] = filter_buf[i + 1];
filter_buf[i + 1] = filter_temp;
}
}
}
//去掉最大和最小各两个值取平均数
for(times = 2; times < TIMES-2; times++)
{
filter_sum += filter_buf[times];
}
ADC_Buf[ch] = filter_sum / (TIMES-4);
}
可以使用以下代码调用Get_Adc_Average函数
for(ch1 = 0; ch1 < AD_CHANNEL; ch1++)
{
Get_Adc_Average((uint16_t *)ADC_ConvertedValue, AD_CHANNEL, ch1, ADC1_Ave_Val);
}
对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
是否可以在应用程序中包含的gem代码中知道应用程序的Rails文件系统根目录?这是gem来源的示例:moduleMyGemdefself.included(base)putsRails.root#returnnilendendActionController::Base.send:include,MyGem谢谢,抱歉我的英语不好 最佳答案 我发现解决类似问题的解决方案是使用railtie初始化程序包含我的模块。所以,在你的/lib/mygem/railtie.rbmoduleMyGemclassRailtie使用此代码,您的模块将在
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵