在原来的函数发生器基础上增加了ADC功能。依然使用DMA 传送,每次传送16个数据完成后进中断, 标记ADC_Ok 然后

main中进行一个简单的软件滤波,最后送液晶显示,完成后要重新开启DMA 。

R2 我这次用的是10K 的 电压范围是可以从0 开始的 而公式是Vo=1.25(1+ R2/R1) 。感觉这是因为只要给ADJ一个参考电压便可以使LM317有值输出的。保证R1≥0.83KΩ,R2≤23.74KΩ 便可维持一个最小工作电流,当317稳压块的输出电流小于其最小稳定工作电流时,317稳压块就不能正常工作最小稳定工作电流的值一般为1.5mA。

#include "stm32f10x.h"
#include "HAL.H"

#define ADC1_DR_Address ((uint32_t)0x4001244C)
/* Private variables ---------------------------------------------------------*/
DMA_InitTypeDef DMA_InitStructure;
u16 ADCConvertedValue[16];
volatile bool ADC_Ok;
void ADC_Configuration()
{

ADC_InitTypeDef ADC_InitStructure;

/* ADCCLK = PCLK2/4 */
RCC_ADCCLKConfig(RCC_PCLK2_Div4);
/* Enable DMA1 clock */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
/* Enable ADC1 clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 , ENABLE);
/* DMA1 channel1 configuration ----------------------------------------------*/
DMA_DeInit(DMA1_Channel1);
DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&ADCConvertedValue;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize = 16;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; //普通模式 完成后就会停止
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel1, &DMA_InitStructure);

DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE); //DMA通道1传输完成中断
/* Enable DMA1 channel1 */
DMA_Cmd(DMA1_Channel1, ENABLE);

/* ADC1 configuration ------------------------------------------------------*/
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);

/* ADC1 regular channel14 configuration 就是PC4脚 为模拟量输入 注意下边转换周期间隔 周期越长 输入ADC的阻抗越大,最大239的话大约370KΩ 而最小的周期时只有 1KΩ多,输入阻抗太小在后边的分压电路变不好设计了,这点要注意*/
ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 1, ADC_SampleTime_239Cycles5);

/* Enable ADC1 DMA */
ADC_DMACmd(ADC1, ENABLE);

/* Enable ADC1 */
ADC_Cmd(ADC1, ENABLE);

/* Enable ADC1 reset calibaration register 下边进行校准ADC*/
ADC_ResetCalibration(ADC1);
/* Check the end of ADC1 reset calibration register */
while(ADC_GetResetCalibrationStatus(ADC1));

/* Start ADC1 calibaration */
ADC_StartCalibration(ADC1);
/* Check the end of ADC1 calibration */
while(ADC_GetCalibrationStatus(ADC1));

/* Start ADC1 Software Conversion */
ADC_SoftwareStartConvCmd(ADC1, ENABLE);

}

/**************************************************************
** 函数名:ADC_DigitFilter
** 功能:软件滤波
** 注意事项:取NO的2/5作为头尾忽略值,注意N要大于5,否则不会去头尾
***************************************************************/
u16 ADC_DigitFilter(u16* buf,u8 no)
{
u8 i,j;
u16 tmp;
u8 cut_no=0;
//冒泡法排序
for(i=0;i<no;i++)
{
for(j=0;j<no-i-1;j++)
{

if(buf[j]>buf[j+1])
{
/*tmp=buf[j];
buf[j]=buf[j+1];
buf[j+1]=tmp;*/
buf[j]=buf[j]^buf[j+1];
buf[j+1]=buf[j]^buf[j+1];
buf[j]=buf[j]^buf[j+1];
}
}
}
if(no>5)
{
cut_no=no/5;
}

//求平均
tmp=0;
for(i=cut_no;i<no-cut_no;i++) //只取中间n-2*cut_no个求平均
tmp+=buf[i];
return(tmp/(no-2*cut_no));
}

//重新允许DMA,
void DMAReConfig(void)
{
DMA_DeInit(DMA1_Channel1);
DMA_Init(DMA1_Channel1, &DMA_InitStructure);
DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE);
DMA_Cmd(DMA1_Channel1, ENABLE);
}

下边的便是分压小板

void DMA1_Channel1_IRQHandler(void)
{
if(DMA_GetITStatus(DMA1_IT_TC1))
{
DMA_ClearITPendingBit(DMA1_IT_GL1); //清除全部中断标志
ADC_Ok=TRUE;// DMA_Cmd(DMA1_Channel1, DISABLE);
}
}

STM32 数字电压表 LM317 可调电源相关推荐

  1. STM32课程设计--数字时钟+数字电压表+扩展功能--从零开始

    STM32课程设计–数字时钟+数字电压表+扩展功能–从零开始 目录 STM32课程设计--数字时钟+数字电压表+扩展功能--从零开始 准备 建立工程 下载工程模板 添加项目所需文件 下载 加入工程 加 ...

  2. 基于STM32的自动量程转换数字电压表设计--开发笔记

    提示:本文仅阐述了关于嵌入式项目开发的学习思路,用于记录项目经历和分享学习,不涉及具体实现!学习思路仅供参考学习. 一.选题 老师给了5个题目,选题阶段大概有一个月的时间.选取题目时一定要根据自身基础 ...

  3. 7135制作自动量程电压切换_基于STM32和ICL7135的数字电压表设计

    李海 [摘要]    本文以STM32F103ZE为主控芯片,用ICL7135双积分A/D转换芯片对被测电压进行模数转换,设计了一个电压档量程可切换,满量程为2V数字电压表.电压显示格式和精度可通过软 ...

  4. 电源学习(1):stm32单片机buck电路可调电源设计介绍

    最近,搞了一块stm32单片机的降压电路板,效果还不错分享分享给大家. 首先上图看效果! 下图 输入电压在20v不变,效果如图所示. 然后我又测了几组数据供大家参考一下,具体电路后续在写了 可见负载调 ...

  5. 基于STM32的ICL7135数字电压表的设计

    因为最近课程设计的需要,所以利用ICL7135双积分AD芯片制作了一个数字电压表,相关参数如下: (1)测量范围:直流电压 -200V ~ 200V,分4挡,200mV.2V.20V.200V. (2 ...

  6. 可调电源LM317 的内部原理 - 特殊的电压跟随器

    之前一直没想过这类LDO 内部是怎么整的,它似乎是用一个分压电路采集它输出的电压作为参考,然后却能把输出电压稳定下来,颇有种左脚踩右脚上天的意思.典型的LM317 电路如下: 如果是个普通的电压跟随器 ...

  7. stm32之PVD可编程电压监测器(掉电保存数据)

    前言:stm32系列提供了可编程电压检测器PVD,它是实时检测VDD的电压,当检测到电压低于或者高于PVD设置的阈值时,会想内核产生一个PVD中断(EXTI线中断)以使内核在复位前进行紧急处理.该电压 ...

  8. stm32之电源管理(实现低功耗)

    目录 1.硬件原理 2.低功耗模式 3.睡眠模式实验 4.停止模式实验 5.待机模式实验 前言:STM32F10xxx系列产品都有电源管理模块,芯片功耗会影响到一个产品的续航能力:比如在一些终端传感器 ...

  9. 【毕业设计】单片机和stm32设计选题,proteues仿真、程序完整资料-转发分享

    题目:1854 基于单片机智能充电器系统设计仿真 程序 论文 摘要 在我们的日常生活中,手机已经变得越来越重要了.我们经常需要使用手机,打电话.发短信.上网.看电影.听歌.玩游戏等等.随着大屏幕和高主 ...

最新文章

  1. 磁珠 磁环 双向二极管 TVS二极管
  2. TMG标准版轻松升级到企业版---TMG 2010 系列之四
  3. 用 openSSL 生成 公钥 私钥
  4. jpa tutorials
  5. 扒一扒我遇见过哪些厌恶的技术面试官
  6. 快速 Get 面试题中:线程池七个参数和工作原理问题,理解万岁
  7. Deep Residual Learning for Image Recognition个人有感
  8. leetcode-9-回文数
  9. Java类加载器(一)——类加载器层次与模型
  10. 安装kickstart失败
  11. Vertica DBD 分析优化设计
  12. set类型 php,常用php操作redis命令整理(四)SET类型详解
  13. PyTorch 1.0 中文文档:torchvision.utils
  14. tablayout 动态改变标题_描点法画函数图像的动态演示——动态数学软件GeoGebra制作教程...
  15. html组合标题,如何组合标题关键词(影响标题的5个因素)
  16. ajax php投票记录功能,PHP 实例 AJAX 投票 | 菜鸟教程
  17. 短信通知接口json报文开发设计总结
  18. jsp mysql问卷调查_课内资源 - 基于JSP的在线调查问卷系统
  19. 期货资管分仓软件——期货子账户软件的构成架构以及实现的功能
  20. 关于注册Github不能通过验证的解决方法(easy,一定过)

热门文章

  1. Python实现优校园自动检测跳页
  2. 压力测试总共需要几个步骤?思路总结篇
  3. Cisco更改(修改)启动分辨率
  4. 04【通货膨胀和投资陷阱】 货币贬值
  5. MATLAB/simulink小电流系统单相接地故障选线仿真模型 有中性点不接地,中性点经消弧线圈接地,中性点经小电阻接地
  6. 第46篇 WebRTC及点阵笔及PHP研究(九)
  7. 使用scp指令往远程Ubuntu服务器传文件出现不识别本地磁盘的错误
  8. 实证研究的步骤_新著速递蒋建忠:国际关系实证研究方法
  9. 数字后端基本概念介绍Fence
  10. python进阶版《植物大战僵尸》