文章目录
前言
💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗
👇🏻 精彩专栏 推荐订阅👇🏻
单片机设计精品实战案例✅
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
资料获取
文章底部名片,详细资料联系我。
设计介绍
基于STM32的铅酸蓄电池内阻测试仪系统设计是一个结合了现代微控制器技术和电子测量技术的综合性项目。该系统旨在实现对铅酸蓄电池内阻的精准、快速测量,从而为蓄电池的状态监测、健康评估及维护提供有力支持。以下是该系统设计的主要组成部分和工作流程介绍:
系统组成
STM32微控制器:
作为系统的核心控制单元,负责整体的数据采集、处理与通信功能。STM32微控制器具备高性能、低功耗的特点,能够确保系统的稳定运行和长时间工作。
功能介绍
测量电池内阻时,通过单片机IO口给一个PWM,控制恒流源以一定的频率工作,电路相当于以一定的频率改变负载值,会有一个很小幅度的方波(方波与输出波形相位差180度,因为恒流源工作,mos管导通,相当于电路中多了一条电流支路,mos管管断,只有一条电池电流流过的支路,不需要分电流,自然输出为方波的最大值),通过放大器与后面的采集电路,通过换算可以得出方波的差值,再除以设定的电流值便可以得出电池的内阻值。
本方案采用可编程运放PGA113,结合高精度AD芯片,采集数据,完成电池内阻的实时高精度检测。档案包括源码、PCB、原理图等详细文件。
设计程序
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "oled.h"
#include "adc.h"
#include "pwm.h"
#include "key.h"
#include "beep.h"
#include "PGA.h"
int main(void)
{
float R; //表示内阻
u16 adcx,adcx1,adcx2,adcx3;
u32 result;
double temp,temp1,temp2,temp3;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(21); //初始化延时函数
uart_init(115200); //初始化串口波特率为115200
LED_Init(); //初始化LED
OLED_Init(); //初始化OLED
Adc_Init(); //初始化ADC
KEY_Init();
BEEP_Init();
OLED_ShowGBK(20,0,0,12,1); //肺
OLED_ShowGBK(34,0,1,12,1); //活
OLED_ShowGBK(48,0,2,12,1); //量
OLED_ShowGBK(62,0,3,12,1); //测
OLED_ShowGBK(76,0,4,12,1); //试
OLED_ShowGBK(90,0,5,12,1); //仪
OLED_ShowGBK(04,18,6,12,1); //及
OLED_ShowGBK(18,18,7,12,1); //格
OLED_ShowGBK(38,18,9,12,1); //男
OLED_ShowNum(52,18,3500,4,12);
OLED_ShowGBK(82,18,10,12,1); //女
OLED_ShowNum(98,18,2600,4,12);
OLED_ShowGBK(16,40,14,12,1); //女
OLED_ShowGBK(30,40,15,12,1); //女
OLED_ShowGBK(44,40,16,12,1); //女
OLED_ShowGBK(58,40,17,12,1); //女
OLED_ShowGBK(72,40,18,12,1); //女
OLED_ShowGBK(86,40,19,12,1); //女
OLED_ShowGBK(100,40,20,12,1); //女
// OLED_ShowString(0,20," Voltage:",12);
// OLED_ShowString(0,33," Current:",12);
// OLED_ShowString(0,46," Mode:",12);
// OLED_ShowString(40,46,"N1 r0 ",12);
// OLED_ShowString(55,46,"<<",12);
// OLED_ShowString(92,18,".",16);
// OLED_ShowString(120,20,"V",12);
// OLED_ShowString(96,32,"200m",12);
// OLED_ShowString(120,32,"A",12);
OLED_Refresh_Gram();//更新显示到OLED
//
// TIM14_PWM_Init(A1-1,A2-1); //84M/84=1Mhz的计数频率,重装载值500,所以PWM频率为 1M/500=2Khz.
// result=84000/A1/A2; //10KHz
while(1)
{
// //按键扫描,切换界面与调节功能
// key=KEY_Scan(0);
// if(key)
// {
// switch(key)
// {
// case WKUP_PRES:
// flag++;
// break;
// case KEY0_PRES:
// {
// if(flag%2)
// move++;
// break;
//}
// case KEY1_PRES:
// N++;
// break;
// case KEY2_PRES:
// N--;
// break;
// }
// if(N>7) N=0;
// else if(N<0) N=7;
// }
//
}
}
具体实现截图
设计获取
文章下方名片联系我即可~
精彩专栏推荐订阅:在下方专栏👇🏻
收藏关注不迷路!!
🌟文末获取设计🌟