
学习主题: 设计一个以STM32F103C8T6为主控的小型多功能电子负载,程序使用uCOS嵌入式操作系统开发。 电子负载具有电源输出功能,能够模拟锂电池以测试充电器,并能测试各种电池的放电曲线。 希望通过此次设计来学习提高 STM32F103系列的编程应用能力。 小组宣言:兴趣是提高自我的动力! 学习计划: 本 周——硬件电路设计(原理图) 第二周——硬件电路设计(PCB) 第三周——硬件电路调试 & 底层硬件驱动程序调试(STM32F103 各种资源的学习与应用) 第四周——底层硬件驱动程序编写(STM32F103 各种资源的学习与应用) 后 期——完成总体程序编写工作, 产品调试、装配与测试 小组现有成员: xiao5333(负责硬件电路设计和STM32程序编写) 飘雨(负责部分底层硬件驱动程序编写) gdgly(负载上位机软件与通信协议编写) cmz871627(负责部分底层硬件驱动程序编写) 队员在招人数:2~5人(请想参加的童鞋加QQ讨论群61070251) 招募条件——有STM32F系列使用基础,能够使用uCOS编写程序 或 能够使用C++或C#编写PC端软件 招募待遇——所有小组成员免费赠送该制作的打样电路板一块(空板),有突出贡献者免费赠送成品电路板或STM32开发板 学习进度: 5月30日 方案制定完成(xiao5333) 6月1日 完成电子负载原理图设计(xiao5333) 6月5日 完成PCB图绘制,并外协加工 6月13日 电路调试完成 6月14日 ADC底层硬件驱动 6月15日 底层硬件驱动编写完成 6月25日 完成总体程序编写工作 6月25日 完成样机安装测试(实现初步功能) 至此完成阶段性学习目标……^_^ 以后逐步完善细节和上位机通信功能。 ![]() /******************************************************************************************************************************************************/ ![]() 前言: 现在的生活工作和各种电池、电源接触的机会是越来越多,可不靠谱的事情时有发生。 如我前个月买个安卓智能手机,配的电池标称1800mAh,可用不了一天就没电了。使用公司的程控电池测试仪测试只有1300mAh,肯定是无良的奸商把原装电池换走了。要是手边有个小型便携的电子负载,当时就能测出容量大小,不用等公司的仪器空闲。哎…… 趁现在工作不是很忙,设计一个小型多功能的电子负载吧! 可以电源输出调试电路,恒压恒流输出给锂电池充电,可以恒流负载测试电池、源出式恒压负载测试充电器(本设计的重点特色功能) 正好STM32社区有这个活动,希望能有一些志同道合和朋友一起完善这个小制作(当然不能亏待大家)。开始吧…… 系统详细任务需求 主要功能: 电源恒压、恒流输出模式; 恒压、恒流负载输入模式; 恒压输出+恒压输入 充电器测试模式; 过压、过流、过功率、过热保护; LCD1602显示; 根据温度变化,智能风扇系统; 硬件设计规格: 输入 1.功率 50W 2.电流 0-5A 3.电压 1.5-30V 输出 1.功率 20W 2.电流 0-1A 3.电压 1.5-30V 尺寸重量 体积能够装入普通废旧光驱壳内,重量小于1kg 硬件设计需求: 主要实现输入输出的恒压、恒流控制,能够使用STM32设置参数 STM32底层软件设计需求: 1.ADC采样反馈电压(主回路电压、电流、基准等) 2.DAC使用PWM输出,通过占空比调节 3.键盘任务(STM32定时器自带编码器接口和普通按键) 4.LCD1602字符型液晶屏显示 5.LED和蜂鸣器控制 6.继电器控制 7.1-Wire总线温度传感器通讯 8.PID控制散热风扇 9.USB、串口通讯 由于系统较为复杂,采样uCOS嵌入式操作系统简化任务控制 |
请问楼主,本帖的工程文件还能否找到?能不能给我一份?2197746204@qq.com 感谢~@xiao5333
楼主的资料还有吗?发我一份751821725@qq.com
回复:【ST学习小组】STM32 多功能电子负载兴趣小组
电源电路:
需要提供+12V/800mA(继电器和风扇),+5V/100mA(运放),+3.3V/100mA(STM32)3种电源电压。
开关电源芯片选用Ti的TPS5430输出大电流+12V电压,+5V和+3.3V要求电源纹波噪声尽量小,使用传统7805和1117稳压芯片提供。
恒流/恒压 反馈电路:
U4 将PWM-电流基准电压 (PWM_A)与U5的测量电流(ADC1)进行对比。如果PWM基准电压高于测量电流,则放大器输出为高,导通Q4。如果基准电压较低,则放大器输出为低,关断Q4。实现硬件输出恒流功能。
同理, 输出恒压与输入恒流、恒压电路实现方式一样。
电压基准:
由于要求不是很高,使用较为廉价的TL431输出2.5V电压基准。
STM32主控:
一句话,物尽其用啊!基本上这颗主控的资源都用到了,IO接口、ADC模数转换、PWM输出、定时器编码器接口、串口、USB等等。
STM32F103C8T6主控的资源分解图如下:
原理图:
PCB画好了,今天发厂家做了……
收到板子了,硬件调试已经完成,有2个小bug,呵呵……
调试小结:
这个板子硬件有2个小bug:
BUG_01:
问题描述:Q2 MOSFET 的D、S极封装画反(^_^)
BUG_02:
问题描述:电池模拟负载模式下,输出恒压值有可能比输入负载恒压值偏高,导致上电后负载MOSFET直接导通。
解决办法:降低输入负载恒压值,R26到U4C网络并一个1M电阻到GND(需要飞线)。
功率三极管和MOSFET必须用粗线从焊盘引出到散热器进行散热,注意绝缘。
调整参数如下:
1.R45不焊(VREF网络与PV断开);
2.C18不焊,C27换成474,R27 10k换成100R(避免负载恒压震荡);
3.R1 10k换成100k;
4.R14 2K换成1.5K;(VIN * 0.13 = VFB)
功能测试及外观图:
恒流负载,16V/3A。 电源显示电压和负载显示电压差为线上的压降。
恒压负载 7.8V/2A
内部图片
背面图片,引出串口和RST/BOOT引脚,方便以后升级
回复:【ST学习小组】STM32 多功能电子负载兴趣小组
01. 学习新建工程文件,编译器配置,如何使用外部有源晶振主时钟;
02. ADC硬件驱动函数:
有4个通道的模拟电压需要采样,分别是电压基准、输出/输入电压、输出电流、输入电流。
STM32F103C8T6没有vref引脚,所以电压基准必须采样,用来换算VCC的电压。输出和输入电流值通过精密电流传感放大器转化为电压值,1A对应0.5V。多通道电压值通过DMA连续采样,减轻主控负担。
ADC硬件驱动函数,分解为ADC初始化函数、DMA初始化函数、电压基准测量换算函数、平均值滤波函数。
03. LED/蜂鸣器等IO硬件驱动函数:
这个就不解释了,注意部分IO需要屏蔽SWJ调试接口(SWJ配置失能,必须同时开启功能复用 IO 时钟)
04. DS18B20温度传感器1-Wire硬件驱动函数:
按照单总线协议写就行。
05. PWM-TIM3 硬件驱动函数:
占空比可调,调节分辨率为665
06. LCD1602 字符型液晶屏硬件驱动函数:
07. 增量型旋转编码器硬件驱动函数:
不得不说STM32的这个定时器扩展功能非常好用,配置好了基本上不占用主控资源
好了,至此本“STM32 多功能电子负载”的底层硬件驱动函数均已发布并测试通过,各位童鞋们可以直接在uCOS中调用。
如有不明白的地方欢迎在交流群中讨论,讨论的内容将汇总成学习记录。
下周将正式使用uCOS搭建系统功能,敬请期待,谢谢~~~
uCOS任务分析:
首先申明本人也是初次使用uCOS编写程序,如有不妥之处敬请谅解。
我编写了5个任务来完成设备的功能:
任务0:初始化任务,本任务完成一些硬件初始化和邮箱创建、其它任务创建工作,完成后任务自我删除。
void Task_Start(void *p_arg)
{
(void)p_arg; // 'p_arg' 并没有用到,防止编译器提示警告
SysTick_init();
OSTimeDlyHMSM(0, 0,1,0); //延时1s,等待电压基准稳定
Vref_Read(); //读取Vref
Keybox = OSMboxCreate((void * )0); //创建消息邮箱
OSTaskCreate(Task_SELECT,(void *)0, //创建按键任务
&task_select_stk[TASK_SELECT_STK_SIZE-1], TASK_SELECT_PRIO);
OSTaskCreate(Task_MODE,(void *)0, //创建任务 模式切换任务
&task_mode_stk[TASK_MODE_STK_SIZE-1], TASK_MODE_PRIO);
OSTaskDel(OS_PRIO_SELF); //删除本任务
}
任务1:按键读取任务,取得按键值发送到邮箱
void Task_SELECT(void *p_arg)
{
uint8_t key_tem = 0;
(void)p_arg;
while (1)
{
OSTimeDlyHMSM(0, 0,0,50); //延时20ms
key_tem = KEY_GetChar(); //取得按键值
if(key_tem)
{
OSMboxPost(Keybox, (void *)&key_tem); //发送消息
}
}
}
任务2:设置界面任务,本任务完成设置功能,进入输出显示任务后,自我删除。
void Task_MODE(void *p_arg)
{
uint8_t err;
uint8_t key_dsp = 0, mode = 0;
char adc_v[]="";
char adc_a[]="";
int8_t mode_set = 0;
int16_t counter = 0;
uint16_t i_pulse = 0, v_pulse = 0;
(void)p_arg;
/* 默认恒流负载模式 */
GPIO_ResetBits(GPIOB, IO_K1_Pin);
GPIO_ResetBits(GPIOB, IO_K2_Pin);
GPIO_SetBits(GPIOB, IO_LOAD_Pin);
lcd_gotoxy(1,1);
lcd_puts("LCC");
lcd_gotoxy(5,1);
lcd_puts("SET");
sprintf(adc_a, "%5.2f", ((float)i_tem / 10)); //变量转化为字符串
lcd_gotoxy(10,2);
lcd_puts(adc_a); //显示字符串 电流值
lcd_puts("A ");
while (1)
{
key_dsp = *(uint8_t *)OSMboxPend(Keybox, 200, &err); //等待消息 200个节拍(200ms)后进入就绪状态
// printf("DSP = %d\r\n", key_dsp);
switch (key_dsp)
{
case 1: //KEY_OUTPUT
{
Output(1); //输出使能
lcd_gotoxy(5,1);
lcd_puts("OUT");
User_Led_On(3);
GPIO_SetBits(GPIOB, IO_BR_Pin); //蜂鸣器开
OSTimeDlyHMSM(0, 0,0,100); //延时100ms
GPIO_ResetBits(GPIOB, IO_BR_Pin); //蜂鸣器关
OSTaskCreate(Task_OUTPUT,(void *)0, //创建任务 输出显示任务
&task_output_stk[TASK_OUTPUT_STK_SIZE-1], TASK_OUTPUT_PRIO);
OSTaskCreate(Task_ENC,(void *)0, //创建任务 输出设置任务
&task_enc_stk[TASK_ENC_STK_SIZE-1], TASK_ENC_PRIO);
OSTaskDel(OS_PRIO_SELF); //删除本任务
break;
}
case 2: //KEY_ENC
{
if(mode) //电流,或其它调节模式
{
mode = 0; //电压调节模式
}
else mode = 1; //电流调节模式
break;
}
case 3: //KEY_ENC_LONG
{
mode = 2; //系统模式调节
break;
}
}
counter = ENC_GetCounter(); //取得ENC变量
ENC_CounterInit(); //计数初始化
if(mode == 0) //电压调节模式
{
v_tem += counter;
if(v_tem
RE:【ST学习小组】STM32 多功能电子负载兴趣小组
本人有2年的STM32F103系列的编程系列,一般用Keil编译器,没玩过uCOS,可以向你请教吗?
回复:【ST学习小组】STM32 多功能电子负载兴趣小组
哈哈,这个我有兴趣,可以加入吗?
本人有2年的STM32F103系列的编程系列,一般用Keil编译器,没玩过uCOS,可以向你请教吗?
没问题,同意加入,一起学习。
回复:【ST学习小组】STM32 多功能电子负载兴趣小组
本人有多年单片机编程经验,并熟悉上位机VC++程序开发。
RE:【ST学习小组】STM32 多功能电子负载兴趣小组
本人QQ:1058925707
回复:【ST学习小组】STM32 多功能电子负载兴趣小组
报名! qq:78730460
本人有多年单片机编程经验,并熟悉上位机VC++程序开发。
感谢你的加入。
回复:【ST学习小组】STM32 多功能电子负载兴趣小组
版主你好! 我接触M3才半年,目前在做电力方面这块 。对于你这个主题很是感兴趣,不过本人对系统和和上位机这方面没怎么接触过,一直以来做的就是硬件的驱动控制和一些数据处理。不知能否加入进来。
本人QQ:1058925707
同意加入,一起学习
RE:【ST学习小组】STM32 多功能电子负载兴趣小组
RE:【ST学习小组】STM32 多功能电子负载兴趣小组
RE:【ST学习小组】STM32 多功能电子负载兴趣小组
RE:【ST学习小组】STM32 多功能电子负载兴趣小组
回复:【ST学习小组】STM32 多功能电子负载兴趣小组
楼主你好,本人多年VC开发经验,可以完成上位机功能的开发,STM32 F103正在学习中,不知道小组还需要人手吗?
欢迎!
回复:【ST学习小组】STM32 多功能电子负载兴趣小组
希望看到你们更多的更新和进步!