adc

基于STC12C5A60S2的内嵌A/D和内嵌PWM的PID参数整定

非 Y 不嫁゛ 提交于 2019-12-10 15:55:42
控制对象传递函数:Gp=20/(s(0.1s+1)(0.2s+1) 第一个实验主要是出现等幅震荡的波形(纯比例控制): #include <STC12C5A60S2.H> #include <absacc.h> typedef unsigned char u8; //无符号字符型变量新表示方法定义 typedef unsigned int u16; //无符号整型变量新表示方法定义 //#define AD0 XBYTE [0xF0FF] //给定量外部AD通道0的端口地址 //#define AD1 XBYTE [0xF1FF] //反馈量外部AD通道1的端口地址 //#define DA XBYTE [0xEFFF] //外部DA转换数据输入端口地址 #define D_port XBYTE [0x7FFF] //数码管段码锁存器端口地址 #define B_port XBYTE [0xBFFF] //数码管位码锁存器端口地址 #define A0_r -9.27 //实验五的4通道数据 #define Am_r 10.24 //实验五的4通道数据 #define N0_r 0x20 //实验五的4通道数据 #define Nm_r 0xe0 //实验五的4通道数据 #define A0_m -9.32 //实验五的5通道数据 #define Am_m 9.91 /

ADC single conversion on STM32

青春壹個敷衍的年華 提交于 2019-12-10 09:33:07
问题 I'm studying ADC programming on STM32 F103x and starting with the simplest case - single conversion. The internal temperature sensor (connected to ADC1) value is measured and sending it to COM port by using USART. A target seems clear but when I try to download source code to flash, it doesn't send any data to COM port. USART function works well, I guess the problems come from ADC configuration part because I'm being hung in loop of waiting complete conversion: while(ADC_GetFlagStatus(ADC1,

ADC参数详解

≯℡__Kan透↙ 提交于 2019-12-09 16:16:49
特性或指标总述 本文将从以下特性进行简单的叙述。结合了《ADC设计基础》和TI的一些教学视频。 分辨率 转换误差 转换速度 采样率 奈奎斯特采样准则 混叠和抗混叠滤波器 DNL INL 热噪声 谐波失真 THD SNR ENOB SFDR IMD 孔径抖动 孔径延迟 奈奎斯特区 补充 分辨率 一般ADC都说注明是8bit,16bit或者是24bit。这里的数值也就是分辨率的意思。分辨率是衡量ADC精度一个非常重要的指标。比如采集的电压范围是0-5V,那么8bit的ADC的最小刻度就是5/2^8 =0.0195V,16bit的ADC的最小刻度是5/2^16=0.000195V.从这两个数值来看,我们就知道16bit的ADC可以采集到更小的电压。所以这里的分辨率表征的ADC的最小刻度的指标。同时分辨率也只能算是间接衡量ADC采样准确的变量。直接衡量ADC采集准确性的是精度。 转换误差 也可以称之为精度。精度是在ADC最小刻度基础上叠加各种误差的参数。是可以直接衡量ADC采样精准的指标。通常ADC的精度=N*LSB+Vc_sample+Vshift+Vnoise+Vref+… N一般在ADC的数据手册中体现,表征ADC的集散误差。Vc_sample是ADC内部的采样电容引起的误差。Vshift一般是外围电路带来的偏置,Vnoise是综合前端的驱动电路和ADC得出的噪声电压

Trying to read an ADC with Cython on an RPi 2 b+ via SPI (MCP3304, MCP3204, or MCP3008)?

此生再无相见时 提交于 2019-12-08 11:54:42
问题 I'd like to read differential voltage values from an MCP3304 (5v VDD, 3.3v Vref, main channel = 7, diff channel = 6) connected to an RPi 2 b+ as close as possible to the MCP3304's max sample rate of 100ksps. Preferably, I'd get > 1 sample per 100µs (> 10 ksps). A kind user recently suggested I try porting my code to C for some speed gains. I'm VERY new to C, so thought I'd give Cython a shot, but can't seem to figure out how to tap into the C-based speed gains. My guess is that I need to

STM32CubeMX+ADC数据采集

杀马特。学长 韩版系。学妹 提交于 2019-12-06 08:39:28
设计对电池电压进行检测的应用程序 STM32理解: https://blog.csdn.net/u010893262/article/details/68942710 一、ADC(Analog-to-Digital Converter)模数转换器 模拟信号----->数字信号 二、ADC外设的工作参数配置 二、ADC外设的工作参数配置 三、配置USART外设的工作参数 四、生成代码 在main.c文件中设置所需变量 /* USER CODE BEGIN PV */ // ADC转换值存放 uint16_t adc_value = 0; // 电压值 float voltage = 0.0; // 电压值结果显示 char voltString[50] = {0}; /* USER CODE END PV */ 在while循环里 while (1) { // 启动ADC转换 HAL_ADC_Start(&hadc1); // 等待转换完成,第二个参数表示超时时间,单位ms HAL_ADC_PollForConversion(&hadc1, 100); // 为换取ADC状态 adc_value = HAL_ADC_GetValue(&hadc1); // 采取的右对齐除以2的12次方,参考电压为3.3V voltage = (float)adc_value / 4096 * 3.3

STM32F104ZET6之ucosⅢ下adc

孤人 提交于 2019-12-06 02:56:45
//5.配置ADC1 //resolution:分辨率,设置ADC的分辨率为12位 ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; //单通道,多个通道就使能 ADC_InitStructure.ADC_ScanConvMode = DISABLE; //注意,这里没设置外部触发,但是也把值填上,有可能出问题 //比如:这一行注释掉,明明设置的数据右对齐,结果读出来,变成了左对齐 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; //不需要外部触发,ADC照样可以工作 ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; //关闭连续转换模式 ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //输出结果右对齐存储 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //告诉ADC有多少个通道需要转换,当前是1个通道 //branch:分支 ADC_InitStructure.ADC_NbrOfConversion = 1;

ADC single conversion on STM32

跟風遠走 提交于 2019-12-05 16:22:52
I'm studying ADC programming on STM32 F103x and starting with the simplest case - single conversion. The internal temperature sensor (connected to ADC1) value is measured and sending it to COM port by using USART. A target seems clear but when I try to download source code to flash, it doesn't send any data to COM port. USART function works well, I guess the problems come from ADC configuration part because I'm being hung in loop of waiting complete conversion: while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET); //Wail for conversion complete Here is my source code so far. /* Includes -----

ADC

时光总嘲笑我的痴心妄想 提交于 2019-12-05 07:41:38
SPS(sample per sencond,每秒采样次数),是衡量数模转换(ADC)时采样速率的单位。注意采样速率和转换速率的区别,数模转换是先采样再转换,采样速率小于等于转换速率的采样才是有意义的。类似的单位有KSPS(每秒采样多少千次)、MSPS(每秒采样多少兆次)等。 https://www.sohu.com/a/248691629_783247 来源: https://www.cnblogs.com/wy9264/p/11914679.html

STM32_ADC

女生的网名这么多〃 提交于 2019-12-04 22:03:56
裸机--ADC 简介 STM32f103 系列有 3 个 ADC,精度为 12 位,每个 ADC 最多有 16 个外部通道。 其中ADC1 和 ADC2 都有 16 个外部通道,ADC3 根据 CPU 引脚的不同通道数也不同,一般都有8 个外部通道。 功能 电压输入范围: ADC 输入范围为:VREF- ≤ VIN ≤ VREF+。由 VREF-、VREF+ 、VDDA 、VSSA、这四个外部引脚决定. 一般把 VSSA 和 VREF-接地,把 VREF+和 VDDA 接 3V3,得到ADC 的输入电压范围为:0~3.3V。 电压范围变宽 外部电压转换为0-3.3V. 输入通道 外部通道(最多16道) ADCx_IN0~~ADCx_IN15 内部通道 ADC1 的通道 16 连接到了芯片内部的温度传感器,Vrefint 连接到了通道 17。 ADC2 的模拟通道 16 和 17 连接到了内部的 VSS。 ADC3 的模拟通道 9、14、15、16 和 17 连接到了内部的 VSS。 规则通道 注入通道 触发源 ADC控制写0/1 定时器触发 外部IO触发 转换时间 时钟 ADC 输入时钟 ADC_CLK 由 PCLK2 经过分频产生,最大是 14M, 采样时间 采样周期最小1.5个周期 Tconv = 采样时间 +12.5 个周期。当 ADCLK = 14MHZ (最高)

STM32L15x——ADC使用DMA数据只接收一次(已解决)

自作多情 提交于 2019-12-04 16:22:36
前提:我用的芯片是STM32L系列,可能对其它STM32系列不完全适用,仅供参考! 一、问题描述 我在使用DMA方式读取单ADC单通道采集的数据时,发现只能正确的采集一次数据,后来的就一直与第一次的相同。 配置DMA时,用于保存转换数据的16位变量的地址和ADC_DR寄存器的地址都没问题,DMA模式是DMA_Mode_Circular(循环模式),存储器地址自增也关闭了,一切我能查到的都配置好了,但是还是不行。 二、发现问题 按理说配置出问题应该先去查手册,但是无奈手册只有英文,我在网上找不到解决方案就只能硬着头皮看手册了,最后把STM32L151xx的参考手册ADC章节关于DMA的部分给翻译了一遍,才找到了问题的解决方案。 手册原文(P286): 翻译过来大体意思: 所以问题就出来,因为我只需要将每一个AD转换的值保存在一个16位的变量中,所以将DMA_BufferSize=1,这就导致我传输一次就结束了,而ADC_CR2的DDS位也没配置,默认是0,即传输完一次后就不会在接受新的DMA请求了。 三、解决问题 了解了原因所在后,解决方法就很简单了,你可以直接在ADC初始化的直接给ADC_CR2的DDS位置1,当然我也在标准库中找到了一个函数: ADC_DMARequestAfterLastTransferCmd(ADC1,ENABLE); 其实内部也是对DDS位操作的