概述
CSDN话题挑战赛第2期
???? 个人主页:???? 长夜慢慢想学习 ????
???? 本文收录专栏:???? ARM学习之路 ????
???? 其他专栏:???? C语言学习之路 ????
???? 学习格言:路漫漫其修远兮,吾将上下而求索
???? 欢迎点赞、关注、收藏( •̀ ω •́ )✧ 一起努力,一起学习!
目录
前言
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 startn");
adc_init();
int V;
while(1)
{
V = get_adc();
printf("V is %dn",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 startn");
pwm_init();
delay();
PWM.TCON &= ~1;
while(1);
return 0;
}
3.8、蜂鸣器实验结果
- 此时蜂鸣器工作起来了,工作一定延时就自动停止工作。
---------------------------本篇到此结束啦,欢迎点赞关注-------------------------
最后
以上就是冷酷羊为你收集整理的[ARM]ADC电压采集与蜂鸣器实现——第七篇前言1、ADC电压采集实验2、ADC资料查询3、蜂鸣器实验的全部内容,希望文章能够帮你解决[ARM]ADC电压采集与蜂鸣器实现——第七篇前言1、ADC电压采集实验2、ADC资料查询3、蜂鸣器实验所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复