ad转换就是模数转换。顾名思义,就是把模拟信号转换成数字信号。主要包括积分型、逐次逼近型、并行比较型/串并行型、σ-δ调制型、电容阵列逐次比较型及压频变换型。a/d转换器是用来通过一定的电路将模拟量转变为数字量。模拟量可以是电压、电流等电信号,也可以是压力、温度、湿度、位移、声音等非电信号。但在a/d转换前,输入到a/d转换器的输入信号必须经各种传感器把各种物理量转换成电压信号。
pic单片机如何表示电压
pic用十位二进制位的数来表示电压,也就是数值0~1023来表示电压。那比如现在这个数值是400那这代表多少的电压?这就要根据参考电压来确定了。
比如我们设置正参考电压为3.3v ,当输入的电压为0时,数值就为0。当输入的电压为3.3v时,数值就是1023. 那如果输入的电压是1.2v代表多少电压。
首先,先算出一个数值代表多少的电压 3.3v除以1023 约等于 0.003v 。
然后,1.2v除以0.003v 等于400. 这就得出了400代表的是1.2v。
见下图我们可以看an0~an7.这些都是可以配置成模拟输入的端口。只有这些引脚才能做为ad转换的端口。
实例讲解
例如:下面的原理图,从ra0/an0脚输入个模拟量如果电压大于1.2v则led亮否则led灭。
ad的设置步骤
1,设置端口
将ra0口设置为输入 trisa = 0x01;
将ra0口设置为模拟 ansela = 0x01;
2, 配置adc模块
选择adc的转换时钟。
如何选择转换时钟呢 要根据现在的时钟频率进行选择。可以根据数据手册中的表格进行选择 。
我们设置单片机的时钟频率为32mhz ,选择adc周期关键不要选择阴影部分,在32mhz 这一列 我们随意选择了adc时钟周期1us,对应的时钟源为fosc/32.,ad控制寄存器1 adcon1的adcs《2:0》=010注:adcs《2:0》代表的意思就是 adcs的0到2位。
配置参考电压
我们这里选择右对齐,所以ad控制寄存器1 adcon1的 adfm=1
上面将有关adcon1寄存器的配置说完了。下面来讲解adcon0
选择adc输入通道
ad转换模块只有一个,而ad输入通道有8个an0~an7.所以不可能同时进行ad转换,那个需要用我们就分配给那个,根据硬件我们将ad转换模块分配给an0.
所以 adcon0 的chs《4:0》=0000;
开启adc模块
adc模块开启,adcon0的adon=1,只是单纯的启用adc模块。并不开始ad转换。如果不用adc模块时候建议关闭。可以省点电哦!!!
开始ad转换
adcon0的go/done=1开启ad转换。
4 等待ad转换结束
5 读取结果
一般情况下我们并不取一次的ad转换的值。而是取多次之后算平均值。这样来确保转换的准确性。 配置adc模块,有许多地方并没有讲解为什么这么配置,因为许多配置其实是比较随意的。并不是那么的绝对的。一定非要选择哪一个。当然实际的配置还是要根据你项目需求。
//开发环境mplab x ide ,单片机pic16lf1823.
#include 《pic.h》
__config(fosc_intosc&wdte_off&pwrte_on&mclre_off&cp_on&cpd_off&boren_on
&clkouten_off&ieso_on&fcmen_on);//这个要放到上一行去
__config(pllen_off&lvp_off) ;
#define adc_num 8 //转换的次数
#define led lata1
void init_gpio(void)
{
trisa = 0x01;//端口设置为输入
ansela = 0x01;//设置为模拟输入
porta = 0x00;
lata = 0x00;
}
void init_fosc(void)
{
osccon = 0xf0;//32mhz
}
void init_ad(void)
{
adcon1= 0xa0;//右对齐,ad时钟为fosc/32,参考电压为电源电压,
adcon0= 0x00;//选择通道an0
adcon0bits.adon = 1;//开启模块
}
unsigned int adc_bat_one(void)//转换一次
{
unsigned int value;
value=0;
adcon0bits.chs =0;//选择通道an0
adcon0bits.adgo=1;//开始转换
while(adcon0bits.go==1);//等待转换结束
value=(unsigned int)adresh;//强制类型转换,因为adresh是字符型的只能表示8位二进制。所以必须转换成可以容纳10位二进制的整型。
value= value《《8;// 将高两位左移8位
value += adresl;//低八位加入adresl的值。
return value;
}
unsigned int adc_bat_contiue(void)
{
unsigned int adv_mcu[adc_num],adv_cnt,adv_all;
adv_all=0;
for(adv_cnt=0;adv_cnt《adc_num;adv_cnt++)//进行多次ad转换
{
adv_mcu[adv_cnt]=adc_bat_one();
}
for(adv_cnt=0;adv_cnt《adc_num;adv_cnt++)//计算多次ad转换的平均值
{
adv_all += adv_mcu[adv_cnt];
}
adv_all= adv_all/adc_num;
return adv_all;//得到结果返回
}
/*
*
*/
int main(int argc, char** argv) {
init_fosc();//设置时钟
init_gpio();//设置i/o口
init_ad();//设置ad
while(1)
{
if( adc_bat_contiue()》400)//判断输入电压是否大于1.2v
{
led=1;//灯亮
}
else
{
led=0;//灯灭
}
}
}
锡膏保存及使用注意事项
基于STM32、FreeRTOS 实现硬件看门狗+软件看门狗监测多任务的方法
现代化羽毛球场馆智能照明控制系统羽毛球场馆灯光设计
华为nova2什么时候上市?华为nova2最新消息:华为Nova2要用麒麟659?跑分与骁龙626相当
日置模拟兆欧表IR4000系列和3490的使用指南
pic单片机的ad转换(实例解析)
富士康将扩大在印度产能以减轻郑州厂疫情影响
怎样将mp3播放器添加直接输入到您的汽车立体声
德勤咨询发布人工智能与风险管理报告
单结晶体管触发电路原理图
苹果发布隐私宣传视频:iPhone Face ID 数据、Apple Pay 购买记录不会共享
是德科技为 IMS-SIP 网络仿真器软件添加增强型语音服务编解码器
深度解析国内3D打印技术市场应用前景
无人机续航新突破 太阳能无人机发电
国科均豪完成千万元Pre-A轮融资,国仟创投领投
IPC铜箔拉力试验方法
EPSON机器人如何与视觉上位机实现TCP通信
气象站风向监测设备是什么,它有哪些技术特点
NANK南卡降噪耳机和VIVO耳机哪个好?蓝牙耳机怎么选?
这是AI触手可及的时代