IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> [ARM]ADC电压采集与蜂鸣器实现——第七篇 -> 正文阅读

[嵌入式][ARM]ADC电压采集与蜂鸣器实现——第七篇

CSDN话题挑战赛第2期

目录

前言

1、ADC电压采集实验

1.1、ADC控制器

1.2、ADC类型

1.3、如何获取电压值?

2、ADC资料查询

2.1、ADC转换寄存器

2.2、ADCCON控制寄存器

2.3、ADCMUX通道选择寄存器

2.4、ADC数据寄存器

2.5、ADC实现程序代码

2.6、ADC实验结果

3、蜂鸣器实验

3.1、蜂鸣器种类

3.2、蜂鸣器连接原理图

3.2、PWM时钟配置

3.3、TCFG0

3.4、TCFG1

3.5、TCON

3.6、GPD0CON

3.7、PWM实现程序代码

3.8、蜂鸣器实验结果

?


前言

? ? ? ? 本篇是学习ADC模数转换与PWM控制输出得的实现,本篇共讲述了ADC和PWM两个实验,本篇难度不高,主要是熟悉电路结构和资料的查询,整理此篇学习内容与大家共赏!希望与大家共同进步,一起加油!?

????????除了本篇内容,还有其他ARM学习内容收纳于 🎈ARM学习之路🎈里,欢迎大家查看!

1、ADC电压采集实验

1.1、ADC控制器

????????模数转换器:把模拟信号转为数字信号,把连续变化的模拟量转换为离散数字量(用数字量来表示模拟量)。

1.2、ADC类型

  • 逐次逼近型:速度一般,精度一般,体积小,成本低

  • 积分微分型:速度慢,精度高,体积大,成本低

  • 直接比较型:速度快,精度低,体积中,成本高

1.3、如何获取电压值?

芯片会通过电路中滑动变阻器来获取对应的电压值,将获取的电压值进行模数转换,转换成0、1这样的数字信号值。

(1)电路原理图

(2)与芯片连接的引脚图

2、ADC资料查询

2.1、ADC转换寄存器

  • ADCCON(控制寄存器):使能adc进行功能

  • ADCDAT(数据寄存器):转换之后的数字量存储到寄存器中

  • ADCMUX:要转换的输入通道选择

2.2、ADCCON控制寄存器

  • 转换精度选择:0-----10bit,1 -----12bit

  • 只读:1-----标志转换完成,0-----标志正在转换

  • 使能预分频:0-----关闭预分频,1-----开启预分频

  • 工作模式选择: 0-----普通模式

2.3、ADCMUX通道选择寄存器

输入通道选择:

  • 0x0----通道0

  • 0x1----通道1

  • 0x2----通道2

  • 0x3----通道3

2.4、ADC数据寄存器

  • 数据寄存器,存储转换完成之后的电压值,0bit—11bit就是对应的电压值。

  • 使用ADC控制器,采集电压,得到数字量电压值

2.5、ADC实现程序代码

#include "exynos_4412.h"
#include "uart.h"
?
void adc_init()
{
    //adc初始化
    //精度设置 12bit
    ADCCON |= 1<<16;
    
    //使能分频
    ADCCON |= 1<<14;
    
    //设置预分频
    ADCCON  = ADCCON & ~(0xff<<6) | 255;
    
    //普通模式
    ADCCON &= ~(1<<2);
    
    //不进行连续转换
    ADCCON &= ~(1<<1);
?
    //通道选择
    ADCMUX = 0x3;
}
?
int get_adc()
{
?
    //启动转换,设置为[0]:1开启转换
    ADCCON |= 1;
?
    while( (ADCCON & 1<<15) == 0 );
    
    //ADCDAT & 0xfff ----实际电压值(数字量)
    return 1.8 * 1000 / 4096 * (ADCDAT & 0xfff);
?
}
?
int main()
{
    //串口初始化
    uart_init();
    
    printf("program is start\n");
    adc_init();
    int V;
    while(1)
    {
        V = get_adc();
        printf("V is %d\n",V);//打印对应电压值
    }
    return 0;
}
?

2.6、ADC实验结果

  • ?循环显示电压值

3、蜂鸣器实验

3.1、蜂鸣器种类

  • 无源蜂鸣器:内部无发声源,需要外部加载发声源

  • 有源蜂鸣器:内部有发生源,不需要外部加载发声源

3.2、蜂鸣器连接原理图

  • PWM可以设置输出可调节的高电平时间、低电平时间的波形

  • 芯片输出高低电平进行切换可以让蜂鸣器发声

3.2、PWM时钟配置

  • PWM控制器实现输出脉宽波形,对应引脚就有脉宽波形

3.3、TCFG0

3.4、TCFG1

  • 设置timer0、pwm0固定分频

3.5、TCON

  • 设置自动重载寄存器进行重载

3.6、GPD0CON

  • GPD0CON[0] [3:0]-------0x2(GPIO设置为PWM输出)

3.7、PWM实现程序代码

#include "exynos_4412.h"
#include "uart.h"
?
?
void pwm_init()
{
?
    //GPIO
    GPD0.CON = GPD0.CON & ~(0xf) | 0x2;
    
    //pwm初始化
    
    //设置自动重载值
    PWM.TCNTB0 = 1000;
    
    //设置比较寄存器值
    PWM.TCMPB0 = 500;
?
    //设置预分频 500 Khz
    PWM.TCFG0 = PWM.TCFG0 & ~(0xff) | 199;
    
    //设置固定分频
    PWM.TCFG1 &= ~(0xf);
    
    //进入定时的频率为 500k hz
    //每一个周期时间为1/500k
    //最大能够计数 1000
    //一个pwm波形(高低)时间1/500,输出的pwm波形频率为500hz
?
    PWM.TCON |= 1<<3;
    
 ?  //设置使能输出 TOUT0输出
    PWM.TCON |= 1<<2;
    
    //设置更新自动装载,和比较寄存器
    PWM.TCON |= 1<<1;
    
    //关闭更新自动装载和比较寄存器
    PWM.TCON &= ~(1<<1);
    
    //开启pwm
    PWM.TCON |= 1;
}
?
void delay()//延时函数
{
    int i,j;
    for(i = 0;i < 1000;i++)
    {
        for(j=0;j< 1000;j++);
    }
}
?
int main()
{
?
    uart_init();
    printf("program is start\n");
    pwm_init();
    delay();
    PWM.TCON &= ~1;
    while(1);
?
    return 0;
}

3.8、蜂鸣器实验结果


?

  • ?????????此时蜂鸣器工作起来了,工作一定延时就自动停止工作。

---------------------------本篇到此结束啦,欢迎点赞关注-------------------------

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-09-30 01:07:48  更:2022-09-30 01:08:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:54:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码