基于STEP Pico的学习平台实现电压表显示
1.STEP Pico的嵌入式系统学习平台简介 2.使用Pico学习平台制作可显示的电压表
标签
嵌入式系统
显示
Titan
更新2023-03-30
422

.项目介绍  

1.基于Step Pico的嵌入式系统学习平台:

这个新的学习平台采用了Step Pico开发板,Step Pico开发板主控采用RP2040:双核Arm Cortex M0+内核,主频133MHz (200MHz Max.),264KB内存。这个开发板相比老的树莓派Pico,增加了4个WS2812可编程彩灯,1个复位按键,USB接口也换成了最新的type-c类型。

以Step Pico开发板为核心,硬禾学堂再开发出一款学习平台,集成了更多功能,比如:2个按键输入,4个单色LED,12个WS2812B RGB三色灯,1个姿态传感器,1个128*64 OLED显示屏,1个蜂鸣器,1个可调电位计(用于电压表),1路音频信号输入(用于示波器),8位R-2R电阻网络构成的DAC(用于DDS信号发生器),这些组件,对于我这样刚开始学习嵌入式系统的小白来说,非常友好,再加上配套的micropython课程,简直完美。

下面是学习平台和Step Pico开发板的外观图,原理框图可以看硬禾的链接(核心板线路图)(STEP Pico学习平台线路图)。

Fj0hZQL3U5-8W_oau8HRHfiH7Hx0FgTH28pLI80kAVQXu161Fx1wotU9

 

2.IDE: 

在上次参加硬禾学堂寒假练时,第一次使用Micropython+Thonny,但因为当时对Micropython了解实在太少,经过一番学习和试错,最后只能放弃,在群里大佬帮助下,最终选用了Arduino IDE,这次,结合上次经验,和这次配套的Micropython课程,把一些示例基本做了一下,终于有一些理解,能进行简单的使用了。

Thonny编辑器的设定使用比较简单,可参照树莓派的官网设定(需要一些英文基础,点击前面链接即可)如果感觉不够本土化,硬禾学堂的免费课也有关于Pico的环境搭建课程。

有一些踩过的坑:

1.Thonny安装前,一定要先把Python安装好,认真看教程很重要。

2.Thonny在右下角有个设定,在设定中选好了树莓派选项。

Fgj3458jVPuijvtKyc8TkotavyJt

3.正常到货的学习平台板中,已经有预烧录得程序了,接上电脑后,在Thonny内点击左上角控制栏STOP后,会重新开始链接树莓派,这时候在左下角的目录栏中可以看到树莓派中的预烧录程序

Fv8C45TEFbD-gZu3dWVDXmDazyBF

如果没有,那很可能还要按住STEP PICO控制板的BOOT按键,这时候再重新连接电脑,在我的电脑中出现下面这个存储设备,再往里面传入FW文件

FpHtBUk3ZnNmQCZRgyDglfIhpo2-

4.最后记住要在Thonny的工具栏中,选“工具”-->“设置”,出现下面这个界面,然后选Mypython(Pico)版本,另外,前面3提到的FW文件,在这个界面右下角的“Install or update firmware”可以下载。

Fsh56PZucb1oW5MQ4u73fLQP5Kev

.任务完成思路和实现过程  

此次活动我选取了任务8:制作一个电压表,因为时间关系,做的很仓促,其他任务也很有意思。在后续抽时间还是做一遍

以下对本次任务进行分解:

第一步:读取板上电位计的电压数据

电位计在学习平台的板子上,本质上是一颗滑动电阻,其中,Pin2连接到GPIO28_ADC2,这样,当Pin2在电阻上滑动时,会因为分压出现不同的电压,从而在通过GPIO28_ADC2进行AD转换,得到需要的值。

FvTRJOExT8ui7lqQz6UzoiOG6V_SFicVZxB_rxPqVzTt2VuDfPKoptQQFloU6xw1QgUYLAl8qspsSQGX8NpK

当需要读取RV1的值时,需要先读取,通过以下指令来读取

potentiometer = machine.ADC(28)

再用以下指令来转换为实际电压值

conversion_factor = 3.3/(65535)
...
voltage = potentiometer.read_u16() * conversion_factor

其中,65535的取值,因为当我们直接读取ADC28的值时,最大会输出65535的值,但实际我们需要看电压值,所以需要用3.3V实际供电来进行均分。

在这里,我们会注意到,所用电位计是线性的,才能用均分的方式来转换数据,如果用非线性的电位计,需要根据实际情况来看。

第二步:显示采样的电压信息。

1.显示部分,是在学习平台上,采用是128*64的一块OLED屏幕,采用SSD1306驱动,SSD1306是非常通用的一款OLED驱动,128*64的OLED屏幕使用也很广泛,在很多小家电,小型的设备上都能用到,而且关键很便宜。

在micropython使用SSD1306,有现成的库,只需要在开头进行调用即可,不过需要注意,同时要把SSD1306的驱动文件(SSD1306.py)一起放在RP2040的存储里

from machine import Pin, SPI
from ssd1306 import SSD1306_SPI
...
spi = SPI(1, 100000, mosi=Pin(pin_cfg.spi1_mosi), sck=Pin(pin_cfg.spi1_sck))
oled = SSD1306_SPI(128, 64, spi, Pin(pin_cfg.spi1_dc),Pin(pin_cfg.spi1_rstn), Pin(pin_cfg.spi1_cs))
oled.rotate(1)

在这里要说明的是,在载入SSD1306的库时,因为micropython的规则,需要先载入machine库,另外,SSD1306在此处使用的是SPI模式,所以此时需要定义SPI的端口

Fkx5ItS0pxxuRbaHXGkKN32d0awo

 

第三步:实现和调试(完整代码详见附件)

最终程序中需要先载入的库或驱动如下:

from machine import Pin, SPI
from ssd1306 import SSD1306_SPI
import utime
from time import sleep
from utime import sleep_ms
from board import pin_cfg

需要调试的部分:

主要是显示:在显示时,预计好大概显示的内容和图形,多次尝试位置,直到达到自己满意的效果即可,显示部分代码如下:

            oled.fill(0)
            oled.show()
    
            voltage1 = voltage / 0.1
            print(int(voltage1) / 10 )

            oled.text("RV1 Voltage:", 5, 5)
            oled.text(str(voltage) +" V", 5, 20)
            oled.hline(1,44,105,1)
            oled.hline(1,45,105,1)
            oled.hline(1,46,105,1)
            oled.vline(3*int(voltage1) + 1,36,20,1)

 

第四步:演示效果  

贴上演示效果如下:

Fimn6jQtP-c1uGZZFrritzX78vPT

 

.活动总结,一些感想

本次活动是在参加学校模拟电子的活动之余,再另外参加的寒假练活动,因为上次参加寒假练活动,对micropython还学习的不够,趁这次活动还有在线课程,加深一点micropython的知识,学习到了更多的使用规则,也算补上一点遗憾,同时发现micropython对新手确实很友好,后续还会继续学习。

感谢硬禾学堂在2022年的活动,虽然有一个Funpack活动因为时间和对C不懂得原因,没能如期完成,总体来说,认识硬禾学堂这几年,学到了很多,也认识了很多大佬,以后,还会一如既往的支持活动。

 

附件下载
源代码.zip
团队介绍
个人
团队成员
Titan
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号