From 6b8c87df52173d261db563ca0d146994c118c631 Mon Sep 17 00:00:00 2001 From: Valentin Boutrouche Date: Thu, 26 Sep 2024 14:43:59 -0400 Subject: [PATCH] Modify README.md and README.mlx --- README.md | 59 +++++++++++++++++++++++++++++------------------------ README.mlx | Bin 231832 -> 231748 bytes 2 files changed, 32 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 06fddbb..d25826c 100644 --- a/README.md +++ b/README.md @@ -10,14 +10,14 @@ _Created with R2024a. Compatible with R2024a and later releases._ -# Information +# Information -This curriculum module contains interactive [MATLAB® live scripts](https://www.mathworks.com/products/matlab/live-editor.html) that contains learning material covering fundamental concept and terminology of battery systems. There is a focus on designing and modeling battery system using different tools (MATLAB, Simulink and Simscape). +This curriculum module contains interactive [ MATLAB® live scripts](https://www.mathworks.com/products/matlab/live-editor.html) that contain learning material covering the fundamental concepts and terminology of battery systems. The focus is on designing and modeling battery systems using different tools (MATLAB, Simulink, and Simscape). ## Background -You can use these live scripts as demonstrations in lectures, class activities, or interactive assignments outside class. This module covers basic battery pack design, battery cell modeling (electrical and thermal) and the basic of battery management system. It also includes examples of modeling using different approach (MATLAB, Simulink and Simscape) and State of Charge (SoC) estimation. +You can use these live scripts as demonstrations in lectures, class activities, or interactive assignments outside class. This module covers basic battery pack design, battery cell modeling (electrical and thermal), and the basics of battery management systems. It also includes examples of modeling using different approaches (MATLAB, Simulink, and Simscape) and State of Charge (SoC) estimation. The instructions inside the live scripts will guide you through the exercises and activities. Get started with each live script by running it one section at a time. To stop running the script or a section midway (for example, when an animation is in progress), use the EndIcon.png Stop button in the **RUN** section of the **Live Editor** tab in the MATLAB Toolstrip. @@ -29,7 +29,7 @@ Solutions are available upon instructor request. Contact the [MathWorks teaching ## Prerequisites -This module assumes knowledge of electrical circuit as discussed in [DC Circuit Analysis](https://github.com/MathWorks-Teaching-Resources/DC-Circuit-Analysis). There is minimal MATLAB knowledge required for these scripts, but you could use [MATLAB Onramp](https://matlabacademy.mathworks.com/details/matlab-onramp/gettingstarted) as a resources to acquire familiarity with live scripts and MATLAB syntax. Depending on your learning path through the module, you might want to add [Simulink Onramp](https://matlabacademy.mathworks.com/details/simulink-onramp/simulink) or [Simscape Onramp](https://matlabacademy.mathworks.com/details/simscape-onramp/simscape) to gain familiarity with these tools. +This module assumes knowledge of electrical circuits as discussed in [DC Circuit Analysis](https://github.com/MathWorks-Teaching-Resources/DC-Circuit-Analysis). There is minimal MATLAB knowledge required for these scripts, but you could use [MATLAB Onramp](https://matlabacademy.mathworks.com/details/matlab-onramp/gettingstarted) as a resource to acquire familiarity with live scripts and MATLAB syntax. Depending on your learning path through the module, you might want to add [Simulink Onramp](https://matlabacademy.mathworks.com/details/simulink-onramp/simulink) or [Simscape Onramp](https://matlabacademy.mathworks.com/details/simscape-onramp/simscape) to gain familiarity with these tools. ## Getting Started ### Accessing the Module @@ -39,7 +39,7 @@ Use the [OpenInMO.png](https:/ ### **On Desktop:** -Download or clone this repository. Open MATLAB, navigate to the folder containing these scripts and double\-click on [BatterySystem.prj](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Battery-Systems&project=BatterySystem.prj). It will add the appropriate files to your MATLAB path and open an app that asks you where you would like to start. +Download or clone this repository. Open MATLAB, navigate to the folder containing these scripts, and double\-click [BatterySystem.prj](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Battery-Systems&project=BatterySystem.prj). It will add the appropriate files to your MATLAB path and open an app that asks you where you would like to start. Ensure you have all the required products (listed below) installed. If you need to include a product, add it using the Add\-On Explorer. To install an add\-on, go to the **Home** tab and select AddOnsIcon.png **Add-Ons** > **Get Add-Ons**. @@ -47,48 +47,54 @@ Ensure you have all the required products (listed below) installed. If you need ## Products -This module uses all of following products: +This module uses all of the following products: - MATLAB® - Simulink® - Simscape™ +- Simscape Battery™ +- Simscape Electrical™ - Symbolic Math Toolbox™ +- Curve Fitting Toolbox™ +- Statistics and Machine Learning Toolbox™ # Scripts - - *If you are viewing this in a version of MATLAB prior to R2023b, you can view the learning outcomes for each script* [*here*](https://www.mathworks.com/matlabcentral/fileexchange/Battery-Systems) - -## [HowDoBatteryWork.mlx](Scripts/HowDoBatteryWork.mlx) -| | | +## [**HowDoBatteryWork.mlx**](Scripts/HowDoBatteryWork.mlx) +| | | | :-- | :-- | -| image_3.svg | **In this script, students will...**
- Learn about the different components of a battery.
- Learn how batteries work.
- Build a functional model of a battery.
| +| image_3.svg
| **In this script, students will...**
$\bullet$ Learn about the different components of a battery.
$\bullet$ Learn how batteries work.
$\bullet$ Build a functional model of a battery.
| +| | | - -## [EVBatteryDesign.mlx](Scripts/EVBatteryDesign.mlx) -| | | +## [**EVBatteryDesign.mlx**](Scripts/EVBatteryDesign.mlx) +| | | | :-- | :-- | -| image_4.svg | **In this script, students will...**
- Be able to understand battery configuration (parallel, series).
- Determine power and energy requirement for a battery pack.
- Validate their design through simulation.
| +| image_4.svg
| **In this script, students will...**
$\bullet$ Be able to understand battery configuration (parallel, series).
$\bullet$ Determine power and energy requirements for a battery pack.
$\bullet$ Validate their design through simulation.
| +| | | -## [BatteryModeling.mlx](FunctionLibrary/BatteryModeling.mlx) -| | | +## [**BatteryModeling.mlx**](FunctionLibrary/BatteryModeling.mlx) +| | | | :-- | :-- | -| energy-storage.svg
| **In this script, students will...**
- Learn about battery modeling principles.
- Conduct experimental observations and data analysis.
- Develop and calibrate an equivalent circuit model for a battery cell.
| +| energy-storage.svg
| **In this script, students will...**
$\bullet$ Learn about battery modeling principles.
$\bullet$ Conduct experimental observations and data analysis.
$\bullet$ Develop and calibrate an equivalent circuit model for a battery cell.
| +| | | -## [ThermalModeling.mlx](Scripts/ThermalModeling.mlx) -| | | +## [**ThermalModeling.mlx**](Scripts/ThermalModeling.mlx) +| | | | :-- | :-- | -| Thermal.svg
| **In this script, students will...**
- Learn about battery thermal modeling principles.
- Develop computation model of battery heating and cooling.
- Compare different heating and cooling scenario.
| +| Thermal.svg
| **In this script, students will...**
$\bullet$ Learn about battery thermal modeling principles.
$\bullet$ Develop a computation model of battery heating and cooling.
$\bullet$ Compare different heating and cooling scenarios.
| +| | | -## [BatteryManagementSystem.mlx](FunctionLibrary/BatteryManagementSystem.mlx) -| | | +## [**BatteryManagementSystem.mlx**](FunctionLibrary/BatteryManagementSystem.mlx) +| | | | :-- | :-- | -| SoC.png
| **In this script, students will...**
- Learn about constant voltage and constant current charging.
- Develop algorithms to estimate a battery state of charge (SoC).
| +| SoC.png
| **In this script, students will...**
$\bullet$ Learn about constant voltage and constant current charging.
$\bullet$ Develop algorithms to estimate a battery state of charge (SoC).
| +| | | # Related Courseware Modules ## [ DC Circuit Analysis](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/DC-Circuit-Analysis&project=DCCircuitAnalysis.prj) -| | | +| | | | :-- | :-- | | image_8.png
| **Available on:**
[OpenInFX.png](https://www.mathworks.com/matlabcentral/fileexchange/103375-dc-circuit-analysis)
[OpenInMO.png](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/DC-Circuit-Analysis&project=DCCircuitAnalysis.prj)
[GitHub](https://github.com/MathWorks-Teaching-Resources/DC-Circuit-Analysis)
| +| | | Or feel free to explore our other [modular courseware content](https://www.mathworks.com/matlabcentral/fileexchange/?q=tag%3A%22courseware+module%22&sort=downloads_desc_30d). @@ -104,4 +110,3 @@ Looking for more? Find an issue? Have a suggestion? Please contact the [MathWork *©* Copyright 2024 The MathWorks™, Inc - diff --git a/README.mlx b/README.mlx index 67e41c22fbf298d72f9d16ae308dc1eeaf3902ae..e2eb38090075b6b98f637796860dbb21a257d73a 100644 GIT binary patch delta 5222 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 M$W8!`1m2$FcM+sl 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