今天给大家分享一个基于CW32单片机做的软硬件开源项目,其中包括RTOS、GUI、蓝牙、电源管理等众多常用功能。
一 主要功能
这个产品有些功能还没有完善,不过整体还不错,用于学习或者做项目借鉴完全没问题。
图1
主要功能包含:
二 电路设计
设计思路:
根据模块化的设计思路,我们可以在画电路图时更加有条理,也可以在进行PCBLayout时将布局按照模块进行大致区分,以便于进行走线等操作。
图2
我们根据需求对每个部分进行细化设计,来实现既定目标。在下面,将会结合电路图和PCB对我的设计和设计思路进行详细的说明。
图3 电源与电池管理
图4 单片机及外设
图5 模拟前端
三 软件代码和调试
https://gitee.com/multifunction_test_pen/test_pen
文件结构:
1.GUI---LCD驱动和UI
2.FreeRTOS---RTOS系统
3.USER---底层驱动和app
图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 < len; i++)
{
sum += BAT_ADC_ResultBuff[i];
if(BAT_ADC_ResultBuff[i] > max)
{
max = BAT_ADC_ResultBuff[i];
}
if(BAT_ADC_ResultBuff[i] < min)
{
min = BAT_ADC_ResultBuff[i];
}
}
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 */
}
界面显示
界面显示包含了显示内容和功能检测。
图7
为了方便测试,这里还引入了上位机工具,比如使用虚拟仪器软件进行测量:
图8
示波器显示:
图9
https://dwi41yhz703.feishu.cn/docx/HDypdqqapoMlVpxNuH0cdr08nEh?from=from_copylink
https://gitee.com/multifunction_test_pen/test_pen
该开源项目使用CW32国产单片机作为主控,目前原理图、PCB、生产资料,以及源代码都公开,感兴趣的小伙伴也可以自己打样做一套。
文章来源于网络,版权归原作者所有,如有侵权,请联系删除。
关注【一起学嵌入式】,回复“加群”进技术交流群。
觉得文章不错,点击“分享”、“赞”、“在看” 呗!