电子产业一站式赋能平台

PCB联盟网

搜索
查看: 429|回复: 0
收起左侧

一个很酷的软硬件开源项目!

[复制链接]

483

主题

483

帖子

3042

积分

四级会员

Rank: 4

积分
3042
发表于 2024-4-8 11:50:00 | 显示全部楼层 |阅读模式

rxiysd4fhaw64014895247.gif

rxiysd4fhaw64014895247.gif

排版 | 嵌入式应用研究院素材来源 |CW32生态社区
今天就再给大家分享一个基于CW32单片机做的软硬件开源项目,其中包括RTOS、GUI、蓝牙、电源管理等众多常用功能。

一 主要功能

这个产品我收到一个实物,也用了一段时间,但有些功能还没有完善,不过整体还不错,用于学习或者做项目借鉴完全没问题。

ldozhhfiurp64014895347.png

ldozhhfiurp64014895347.png

图1

主要功能包含

1.电压测量+阈值判断,阈值电平可以根据需求自行设定满足不同逻辑电平的场景,并且保留“简易逻辑电平测试笔“好用的红绿灯提示功能;
2.通断测量,且阈值电阻可以根据需求调整;
3.二极管测量,点亮一颗二极管(注意!不是三极管!!!);
4.PWM输出,方便在一些场景下提供一个已知量对系统进行测试,也可以对无源蜂鸣器等进行测试;
5.PWM输入,可以对频率进行测量(甚至是对串口等数据进行简单的解码显示等功能,不过目前技术有限还没有实现);
6.直流输出,模拟出一个需要的直流电平进行测试;
7.可以连接扩展板进行配合测量。

二 电路设计

设计思路

在对测试笔进行设计时,我把整体分为了五个部分:模拟前端、电源与电池管理、单片机及外设、显示屏、用户控制。根据模块化的设计思路,我们可以在画电路图时更加有条理,也可以在进行PCBlayout时将布局按照模块进行大致区分,以便于进行走线等操作。

iiqf4vmncj464014895447.png

iiqf4vmncj464014895447.png

图2

我们根据需求对每个部分进行细化设计,来实现既定目标。在下面,将会结合电路图和PCB对我的设计和设计思路进行详细的说明。

cgkhxnzz0tw64014895547.png

cgkhxnzz0tw64014895547.png

图3 电源与电池管理

xerlx2yqgmf64014895647.png

xerlx2yqgmf64014895647.png

y2va33h42un64014895748.png

y2va33h42un64014895748.png

m2ghtr43tpv64014895848.png

m2ghtr43tpv64014895848.png

图4 单片机及外设

qb2cgkdubw464014895948.png

qb2cgkdubw464014895948.png

buyouaswh4r64014896048.png

buyouaswh4r64014896048.png

puso3ow1pmn64014896148.png

puso3ow1pmn64014896148.png

图5 模拟前端

三 软件代码和调试

该项目开源地址:
https://gitee.com/multifunction_test_pen/test_pen

文件结构:

1.GUI---LCD驱动和UI
2.FreeRTOS---RTOS系统
3.USER---底层驱动和app

vlgdqsk0fux64014896254.png

vlgdqsk0fux64014896254.png

图6

这里面包括单片机常见外设及应用代码,下面给大家看一些代码。

电池电量测量


BAT_ADC_ResultBuff数组存储的是电池采集的ADC值。

1.计算BAT_ADC_ResultBuff数组的平均值,去掉最大最小值,防止数据突变。
2.将计算的平均值。

  • uint16_t get_bat_val(void){    uint32_t sum = 0;    uint16_t bat_val;    uint32_t len = sizeof(BAT_ADC_ResultBuff) / 2;    uint16_t max = 0;    uint16_t min = 0xffff;    int i;    for ( i = 0; i     {        sum += BAT_ADC_ResultBuff;        if(BAT_ADC_ResultBuff > max)        {            max = BAT_ADC_ResultBuff;        }        if(BAT_ADC_ResultBuff         {            min = BAT_ADC_ResultBuff;        }    }    sum -= max + min;    sum = sum / (len - 2);    sum = dynamic_mean(bat_cahe,sum,len_cahe);    // sum -= 30;    bat_val = sum * 2500 * 2 /4095;    return bat_val;}

    占空比调节

    占空比修改在PWM中断里面修改,只需要改变PosWidth值。

  • void GTIM1_IRQHandler(void) {     static uint16_t TimeCnt = 0;     GTIM_ClearITPendingBit(CW_GTIM1, GTIM_IT_OV);     if (TimeCnt++ >= 100)     {         TimeCnt = 0;         GTIM_SetCompare1(CW_GTIM1, PosWidth);     }     /* USER CODE END */ }
    界面显示


    界面显示包含了显示内容和功能检测。

    4fogwyklfen64014896354.png

    4fogwyklfen64014896354.png

    图7

    为了方便测试,这里还引入了上位机工具,比如使用虚拟仪器软件进行测量:

    z23hhlzugw564014896455.png

    z23hhlzugw564014896455.png

    图8

    示波器显示:

    saa4sxnste364014896555.png

    saa4sxnste364014896555.png

    图9

    更多相关描述,大家可以参看:
    https://dwi41yhz703.feishu.cn/docx/HDypdqqapoMlVpxNuH0cdr08nEh?from=from_copylink

    更多源代码,可以参看:
    https://gitee.com/multifunction_test_pen/test_pen

    该开源项目使用CW32国产单片机作为主控,目前原理图、PCB、生产资料,以及源代码都公开,感兴趣的小伙伴也可以自己打样做一套。

    精彩内容:嵌入式中,日志调试法的一些规则!
    嵌入式开发调试利器 | Sanitizer检测器
    汇总嵌入式中一些实用的辅助工具!
    易懂 | 手把手教你编写你的第一个上位机
    来了解一下较受欢迎的Git可视化工具!
    轻如羽翼,超轻量的嵌入式数据库!
    推荐一个好用的嵌入式静态代码扫描工具!
    嵌入式中,升级时涉及的协议兼容性问题?
    嵌入式,可测试性软件设计!几个备受推崇的C语言项目,你了解几个?
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条


    联系客服 关注微信 下载APP 返回顶部 返回列表