打印
[复制链接]
288|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-7-10 08:11 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
1. 模拟量于数字量。
模拟量:反应真实世界中的物理量(比如温度,压力,长度)模拟量通常是通过电压,电流等信号来表示。

数字量:通常是0和1来表示某个物理量的变化。



2. ADC(模拟量转成信号量)
1. 分为并联比较,逐次逼近,计数型,双积分型。

1.并联比较型



Vin 大于 Vr 输出1 ,Vin 小于 Vr 输出0. 而Vin可以设置0~8v。每个比较器的Vr通过分压算出来。就可以控制比较器的输出。

上图是输出8位怎么输出三位呢。

利用D触发的当控制端 = 1 ,数据输入等于数据输出。

利用D触发的当控制端 = 0,保持数据输出不变。



如下电路就只输出三位的组合。



2. 逐次逼近型
一次一次接近所需的值。如下未知砝码的重量。先用权重大的。慢慢加砝码。直到两边平衡。



VIN相当于待测量的值.于VDAC去比较。如果大于或者小于就去调整逐次逼近电路。

直到VIN = VDAC。B1,B2.....Bn的值就是模数的转换结果。



3. ADC的计数参数



3. DAC(数字量转成模拟量)





1. DAC的技术参数



4. ADC的框图
GD32的框图



STM32的框图

分为规则通道与注入通道。并且规则通道最多可以16个。注入通道最多4个。规则通道只有一个数据寄存器。而注入每个都有单独的数据寄存器。当EOC标志位1。说明ADC转换完成。并且可以触发中断。要想成功转换还必须设置ADC的触发源。比如:软件触发。

  



1. ADC的通道与序列





2. ADC上电



3. ADC时钟



4. ADC的运行模式
分为单次运行,连续运行,扫描运行,间断运行。

1. 单次模式
单次转换模式:在这种模式下,ADC 仅进行一次转换。一旦转换完成,ADC 将停止工作。这是最基本的模式,适用于只需要一次转换的应用。



2. 连续模式
连续转换模式:在这种模式下,ADC 连续不断地进行转换。每次转换完成后,ADC 会自动启动下一次转换。这种模式适用于需要连续监测的应用,例如连续采集传感器数据。



3. 扫描模式
扫描模式:在这种模式下,ADC 会按照预设的顺序对多个通道进行转换。每次转换完成后,ADC 会继续进行下一次转换,直到完成所有通道的转换。这种模式适用于需要定期监测多个通道的应用。



4. 间断模式
间断运行模式:这种模式下,ADC 会在预定的时间间隔内进行转换。在转换完成后,ADC 会停止工作,直到下一次预定的时间到达。这种模式适用于需要定期进行转换,但转换频率较低的应用。



5. ADC函数的介绍
1.  adc_mode_config



2.  adc_special_function_config



3. adc_data_alignment_config



4. adc_channel_length_config



5. adc_external_trigger_source_config



6. adc_external_trigger_config



7. adc_enable



8. adc_calibration_enable



9. adc_regular_channel_config



10. adc_software_trigger_enable



11. adc_flag_get



12. adc_flag_clear



13. adc_regular_data_read



14. adc_interrupt_flag_get



15. adc_interrupt_flag_clear



16. adc_interrupt_enable



6. ADC的dome
光敏电阻与可调电阻的P7的3,1引脚。获取PA4,PA5的电压。根据分压求出光敏电阻与可调电阻的电阻值。





resister_adc.h

#ifndef _RESISTER_ADC
#define _RESISTER_ADC

#include "gd32f10x.h"
#include "systick.h"

void resister_adc_init(void);
void gpio_config(void);
void adc_config(void);

uint16_t read_adc0_data(uint8_t adc_channel); // 读取ADC0转换的结果
float get_photo_r(void);    //获取光敏电阻的阻值
float get_var_r(void);      //获取可调电阻的阻值

#endif
  resister_adc.c

#include "resister_adc.h"

// 是与电阻相连的adc外设及其channel的初始化
void resister_adc_init(void){
        gpio_config();
        adc_config();
}

/* 初始化IO口为模拟输入模式 */
void gpio_config(){
          rcu_periph_clock_enable(RCU_GPIOA);   // 1.使能rcu时钟
    gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_4 |GPIO_PIN_5);  //2.初始化gpio输入模式
}

/* 初始化adc0 */
void adc_config(){

————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_41328470/article/details/133828486

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1886

主题

15540

帖子

11

粉丝