自然界当中的讯号几乎为连续的,也就是我们常说的类比讯号,而对於单晶片或着电脑来说,我们能够接收的不外乎就是0与1,因此就有了ADC的诞生,ADC全名为Analog-To-Digital Converter,类比转数位转换器,透过短时间重复采样,将连续寻号转换为离散的。可以想像如果我们采集的频率越高,越能完整的描述这个连续的讯号,这也就是取样率的概念
而另一个重要的概念就是解析度,如果我们能够将固定的范围切的更细,那麽我们也就能更好的描述这个类比讯号。
还记得以前在Arduino使用analogRead他回传的值为0~1023也就是切成1024等分,我们将其称为10位元解析度的A/D转换器(1024为2的10次方)。而STM32为12的解析度高达12位元,输出为0~4095,分成4096等分。不过要注意的是Arduino是将0~5V切成1024等分,而STM32是将0~3.3V分成4096等分。稍微计算一下可以发现3.3/4096=0.000806,一个等分约为0.806mV。
STM32F429ZI单晶片总共有3个ADC转换器(ADC1~ADC3),而每个转换器有高达19个通道。
是不是完全听不懂一下3个、一下19个、又通道...。我们可以想像ADC转换器就是一台机器,可以将类比讯号转换为数位讯号,而这台机器有19个开口来接收类比讯号(当然一次还是只能接收一个啦),但这台机器运作的速度非常快(根据我简单的测量,转换一次的时间约为11微秒左右),因此就算你19个通道全部都在输入,那也只需要11X19=209微秒就可以测量完所有的通道,相当的快。
底下为每个ADC转换器各个通道所对应到的脚位
首先我们先来看单通道的转换
HAL_ADC_Start(ADC_HandleTypeDef* hadc)
HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout)
HAL_ADC_GetValue(ADC_HandleTypeDef* hadc)
我们依序来介绍。
第一个函式的功能就是启用ADC转换器,就像你要使用一台机器前要先把开关打开的道理相同。
第二个函式的功能是等待转换完成後再继续执行程序。不要忘了这台机器转换是需要时间的,虽然很快(~11us),因此这个函式就是等待转换完成後再继续执行。但如果这台机器出错,转换失败呢?整个程序就一直卡在这里那还得了,因此Timeout这个参数就是告诉这台机器最多要等多久,单位是ms。
第三个函式看名字就知道,它会回传转换的结果。
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,1);
value = HAL_ADC_GetValue(&hadc1);
}
记得在全域宣告一个整数变数value
每次转换前都要将ADC转换器启用(只要转换完成就会关掉,因此要放在while回圈)。
执行後我们就可以用现场表达是来监看转换完成的value啦
我的目的 学习图像辨识,顺便拯救专题,再顺便参加铁人赛,一鱼三吃,真香。 图像辨识的原理 简单说就是...
使用绝对定位 / 相对定位 设计版型 https://ithelp.ithome.com.tw/up...
Docker及Laravel为以後每个专案都会用到的搭配,所以这种时候就将它做成一个类似模板的环境并...
Hola,我是Charlie! 在Day08当中,我们完成了後端的JWT机制还有修改个人资料,在今天...
今天我们来用 electron-forge 打包程序。 新增 electron-forge 到专案 ...