| **银杏科技有限公司旗下技术文档发布平台** |||| |技术支持电话|**0379-69926675-801**||| |技术支持邮件|Gingko@vip.163.com||| ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | V1.0 | 2020-06-20 | gingko | 初次建立 | ===== 例程十七:【MicroPython】ADC实验 ===== ==== 一、实验目的 ==== 使用MicroPython ADC获取iCore3电压值、电流值,并通过串口发送给电脑。 ==== 二、实验设备及平台 ==== - iCore3双核心板[[https://item.taobao.com/item.htm?id=524229438677|点击购买]] - Micro USB线 - 电脑 ==== 三、实验原理 ==== STM32内部集成三个12位ADC,iCore电源经过分压电阻或者直接接入STM32的ADC通道,输入电流经过高端电流检测芯片ZXCT1009F输入到ADC的输入通道内,从而实现电源监控功能。 电压监控硬件连接示意图如下所示: {{ :icore3:icore3_micropython_17_1.png?direct |电压监控硬件连接}} 电压计算公式为: VCC = (1 + R1 / R2) * ADC_IN 将R1=49.9K、R2=10K代入得: VCC = (1 + 49.9K / 10K) * ADC_IN = 6 * ADC_IN 电流监控硬件连接示意图如下所示: {{ :icore3:icore3_micropython_17_2.png?direct |电流监控硬件连接}} 由ZXCT1009F原理可知: ADC_IN = 0.01 * (VCC - LOAD) * R2 通过R1的电流: I = 100 * ADC_IN / R1 / R2 将R1=0.02、R2=10K代入得: I = ADC_IN / 2 ==== 四、实验步骤 ==== - 用数据线将iCore3的USB-OTG口与电脑相连; - 打开PYBFLASH磁盘,将代码包中的main.py文件替换到PYBFLASH的main.py,弹出磁盘; - 用数据线将iCore3的USB-UART口与电脑相连,将供电跳帽选择为UART供电,将iCore3重新上电,代码运行; - 打开串口调试器,选择端口号COM8(具体请在此电脑右击->管理->设备管理器中查看),波特率9600,数据位8,停止位1,校验位None。点击打开串口进行连接; ==== 五、实验现象 ==== 串口调试器接收到iCore3发送来的电压、电流数据。 {{ :icore3:icore3_micropython_17_3.png?direct |串口接收数据}} ==== 六、实验程序 ==== # main.py -- put your code here! from pyb import ADC, Pin, UART, delay #导入库 #定义串口4对象,波特率9600 U4 = UART(4,9600) #创建AD电压监控对象 adcV = ADC(Pin('C4')) #创建AD电流监控对象 adcI = ADC(Pin('C5')) #求平均值函数,传入列表,返回平均值 def av(l): num = 0 for i in l: num += i return(num/len(l)) #循环采集AD并通过串口发送 while True: V = [] #创建列表 I = [] for i in range(2000): #采样2000次,取平均值,减少数值波动幅度 V.append(adcV.read()) I.append(adcI.read()) delay(1) #每2s发送一次数据 U4.write('\r\nHello! I am iCore3!\r\n') #iCore3的基准电压为2.48V,精度为12位4096,数值保留两位小数 U4.write('ADV:'+str(round(av(V)*2.5/4096*6,2))+'V\r\n') #发送电压值 U4.write('ADI:'+str(round(av(I)*2.5/4096/2*1000,2))+'mA\r\n') #发送电流值