-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest.html
More file actions
51 lines (51 loc) · 13.2 KB
/
Copy pathtest.html
File metadata and controls
51 lines (51 loc) · 13.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<div style="background-color: #000000; color: #8E8E8E; padding: 20px; border-radius: 8px; font-family: 'Consolas', 'Courier New', monospace; line-height: 1.6; font-size: 14px; overflow-x: auto; border: 1px solid #333;">
<span style="color: #247000;">## Smart Motor Driver Board</span><br>
<span style="color: #247000;">## Every character is now assigned a color for universal visibility</span><br>
<br>
<span style="color: #a8009a;">import</span> <span style="color: #d17a58;">@mcu/st</span> <span style="color: #569CD6;">as</span> <span style="color: #4EC9B0;">STM</span><br>
<span style="color: #a8009a;">import</span> <span style="color: #d17a58;">@power/drivers</span> <span style="color: #569CD6;">as</span> <span style="color: #4EC9B0;">Drivers</span><br>
<br>
<span style="color: #247000;">## 1. BEHAVIORAL DOMAIN</span><br>
<span style="color: #a8009a;">enum</span> <span style="color: #4EC9B0;">MotorState</span><span style="color: #8E8E8E;">:</span><br>
<span style="color: #9CDCFE;">values</span><span style="color: #8E8E8E;">: [</span><span style="color: #4FC1FF;">Coast</span><span style="color: #8E8E8E;">,</span> <span style="color: #4FC1FF;">Forward</span><span style="color: #8E8E8E;">,</span> <span style="color: #4FC1FF;">Reverse</span><span style="color: #8E8E8E;">,</span> <span style="color: #4FC1FF;">Brake</span><span style="color: #8E8E8E;">]</span><br>
<br>
<span style="color: #a8009a;">module</span> <span style="color: #4EC9B0;">PwmGenerator</span><span style="color: #8E8E8E;">:</span><br>
<span style="color: #9CDCFE;">pins</span><span style="color: #8E8E8E;">: [</span><br>
<span style="color: #569CD6;">input</span> <span style="color: #8f8181;">Clk</span><span style="color: #8E8E8E;">,</span><br>
<span style="color: #569CD6;">input</span> <span style="color: #8E8E8E;">Rst</span><span style="color: #8E8E8E;">,</span><br>
<span style="color: #569CD6;">input</span> <span style="color: #8E8E8E;">TargetState</span><span style="color: #8E8E8E;">[</span><span style="color: #B5CEA8;">2</span><span style="color: #8E8E8E;">],</span><br>
<span style="color: #569CD6;">input</span> <span style="color: #8E8E8E;">Speed</span><span style="color: #8E8E8E;">[</span><span style="color: #B5CEA8;">8</span><span style="color: #8E8E8E;">],</span><br>
<span style="color: #569CD6;">output</span> <span style="color: #8E8E8E;">PwmHigh</span><span style="color: #8E8E8E;">,</span><br>
<span style="color: #569CD6;">output</span> <span style="color: #8E8E8E;">PwmLow</span><br>
<span style="color: #8E8E8E;">]</span><br>
<br>
<span style="color: #a8009a;">logic</span><span style="color: #8E8E8E;">:</span><br>
<span style="color: #a8009a;">let</span> <span style="color: #8E8E8E;">state</span> <span style="color: #8E8E8E;">=</span> <span style="color: #DCDCAA;">reg</span><span style="color: #8E8E8E;">(</span><span style="color: #9CDCFE;">clock</span><span style="color: #8E8E8E;">:</span> <span style="color: #8E8E8E;">Clk</span><span style="color: #8E8E8E;">,</span> <span style="color: #9CDCFE;">reset</span><span style="color: #8E8E8E;">:</span> <span style="color: #8E8E8E;">Rst</span><span style="color: #8E8E8E;">,</span> <span style="color: #9CDCFE;">init</span><span style="color: #8E8E8E;">:</span> <span style="color: #4EC9B0;">MotorState</span><span style="color: #8E8E8E;">.</span><span style="color: #4FC1FF;">Coast</span><span style="color: #8E8E8E;">)</span><br>
<span style="color: #a8009a;">let</span> <span style="color: #8E8E8E;">counter</span> <span style="color: #8E8E8E;">=</span> <span style="color: #DCDCAA;">reg</span><span style="color: #8E8E8E;">(</span><span style="color: #9CDCFE;">clock</span><span style="color: #8E8E8E;">:</span> <span style="color: #8E8E8E;">Clk</span><span style="color: #8E8E8E;">,</span> <span style="color: #9CDCFE;">reset</span><span style="color: #8E8E8E;">:</span> <span style="color: #8E8E8E;">Rst</span><span style="color: #8E8E8E;">,</span> <span style="color: #9CDCFE;">init</span><span style="color: #8E8E8E;">:</span> <span style="color: #B5CEA8;">0</span><span style="color: #8E8E8E;">)</span><br>
<br>
<span style="color: #8E8E8E;">state</span><span style="color: #8E8E8E;">.</span><span style="color: #9CDCFE;">next</span> <span style="color: #8E8E8E;">=</span> <span style="color: #8E8E8E;">TargetState</span> <span style="color: #569CD6;">as</span> <span style="color: #4EC9B0;">MotorState</span><br>
<span style="color: #8E8E8E;">counter</span><span style="color: #8E8E8E;">.</span><span style="color: #9CDCFE;">next</span> <span style="color: #8E8E8E;">=</span> <span style="color: #a8009a;">if</span> <span style="color: #8E8E8E;">counter</span> <span style="color: #8E8E8E;">=</span> <span style="color: #B5CEA8;">255</span><span style="color: #8E8E8E;">:</span> <span style="color: #B5CEA8;">0</span> <span style="color: #a8009a;">else</span><span style="color: #8E8E8E;">:</span> <span style="color: #8E8E8E;">counter</span> <span style="color: #8E8E8E;">+</span> <span style="color: #B5CEA8;">1</span><br>
<br>
<span style="color: #a8009a;">let</span> <span style="color: #8E8E8E;">active_duty</span> <span style="color: #8E8E8E;">=</span> <span style="color: #8E8E8E;">(</span><span style="color: #8E8E8E;">counter</span> <span style="color: #8E8E8E;"><</span> <span style="color: #8E8E8E;">Speed</span><span style="color: #8E8E8E;">)</span><br>
<br>
<span style="color: #8E8E8E;">PwmHigh</span> <span style="color: #8E8E8E;">=</span> <span style="color: #a8009a;">if</span> <span style="color: #8E8E8E;">(</span><span style="color: #8E8E8E;">state</span> <span style="color: #8E8E8E;">=</span> <span style="color: #4EC9B0;">MotorState</span><span style="color: #8E8E8E;">.</span><span style="color: #4FC1FF;">Forward</span><span style="color: #8E8E8E;">)</span> <span style="color: #569CD6;">and</span> <span style="color: #8E8E8E;">active_duty</span><span style="color: #8E8E8E;">:</span> <span style="color: #B5CEA8;">1</span> <span style="color: #a8009a;">else</span><span style="color: #8E8E8E;">:</span> <span style="color: #B5CEA8;">0</span><br>
<span style="color: #8E8E8E;">PwmLow</span> <span style="color: #8E8E8E;">=</span> <span style="color: #a8009a;">if</span> <span style="color: #8E8E8E;">(</span><span style="color: #8E8E8E;">state</span> <span style="color: #8E8E8E;">=</span> <span style="color: #4EC9B0;">MotorState</span><span style="color: #8E8E8E;">.</span><span style="color: #4FC1FF;">Reverse</span><span style="color: #8E8E8E;">)</span> <span style="color: #569CD6;">and</span> <span style="color: #8E8E8E;">active_duty</span><span style="color: #8E8E8E;">:</span> <span style="color: #B5CEA8;">1</span> <span style="color: #a8009a;">else</span><span style="color: #8E8E8E;">:</span> <span style="color: #B5CEA8;">0</span><br>
<br>
<span style="color: #247000;">## 2. PHYSICAL DOMAIN</span><br>
<span style="color: #a8009a;">space</span> <span style="color: #4EC9B0;">MotorDriverBoard</span><span style="color: #8E8E8E;">:</span><br>
<span style="color: #9CDCFE;">dimensions</span><span style="color: #8E8E8E;">:</span> <span style="color: #B5CEA8;">50</span><span style="color: #4FC1FF;">mm</span> <span style="color: #569CD6;">by</span> <span style="color: #B5CEA8;">40</span><span style="color: #4FC1FF;">mm</span> <span style="color: #569CD6;">by</span> <span style="color: #B5CEA8;">1.6</span><span style="color: #4FC1FF;">mm</span><br>
<span style="color: #9CDCFE;">grid</span><span style="color: #8E8E8E;">:</span> <span style="color: #B5CEA8;">5000</span> <span style="color: #569CD6;">by</span> <span style="color: #B5CEA8;">4000</span> <span style="color: #569CD6;">by</span> <span style="color: #B5CEA8;">4</span><br>
<span style="color: #9CDCFE;">origin</span><span style="color: #8E8E8E;">:</span> <span style="color: #4FC1FF;">tl</span> <span style="color: #569CD6;">by</span> <span style="color: #4FC1FF;">t</span><br>
<br>
<span style="color: #a8009a;">add</span> <span style="color: #4EC9B0;">STM.STM32G0</span> <span style="color: #569CD6;">named</span> <span style="color: #8E8E8E;">MCU</span> <span style="color: #569CD6;">at</span> <span style="color: #8E8E8E;">[</span><span style="color: #9CDCFE;">x</span><span style="color: #8E8E8E;">:</span> <span style="color: #B5CEA8;">50</span><span style="color: #4FC1FF;">%</span><span style="color: #8E8E8E;">,</span> <span style="color: #9CDCFE;">y</span><span style="color: #8E8E8E;">:</span> <span style="color: #B5CEA8;">15</span><span style="color: #4FC1FF;">mm</span><span style="color: #8E8E8E;">,</span> <span style="color: #9CDCFE;">z</span><span style="color: #8E8E8E;">:</span> <span style="color: #B5CEA8;">1</span><span style="color: #8E8E8E;">]</span><br>
<span style="color: #a8009a;">add</span> <span style="color: #4EC9B0;">Drivers.L298N</span> <span style="color: #569CD6;">named</span> <span style="color: #8E8E8E;">MotorDriver</span> <span style="color: #569CD6;">at</span> <span style="color: #8E8E8E;">[</span><span style="color: #9CDCFE;">x</span><span style="color: #8E8E8E;">:</span> <span style="color: #B5CEA8;">50</span><span style="color: #4FC1FF;">%</span><span style="color: #8E8E8E;">,</span> <span style="color: #9CDCFE;">y</span><span style="color: #8E8E8E;">:</span> <span style="color: #B5CEA8;">32</span><span style="color: #4FC1FF;">mm</span><span style="color: #8E8E8E;">,</span> <span style="color: #9CDCFE;">z</span><span style="color: #8E8E8E;">:</span> <span style="color: #B5CEA8;">1</span><span style="color: #8E8E8E;">]</span><br>
<br>
<span style="color: #a8009a;">add</span> <span style="color: #4EC9B0;">PwmGenerator</span> <span style="color: #569CD6;">named</span> <span style="color: #8E8E8E;">LogicCore</span> <span style="color: #569CD6;">at</span> <span style="color: #8E8E8E;">[</span><span style="color: #9CDCFE;">x</span><span style="color: #8E8E8E;">:</span> <span style="color: #B5CEA8;">10</span><span style="color: #4FC1FF;">mm</span><span style="color: #8E8E8E;">,</span> <span style="color: #9CDCFE;">y</span><span style="color: #8E8E8E;">:</span> <span style="color: #B5CEA8;">15</span><span style="color: #4FC1FF;">mm</span><span style="color: #8E8E8E;">,</span> <span style="color: #9CDCFE;">z</span><span style="color: #8E8E8E;">:</span> <span style="color: #B5CEA8;">1</span><span style="color: #8E8E8E;">]</span><br>
<br>
<span style="color: #a8009a;">route</span> <span style="color: #8E8E8E;">MCU</span><span style="color: #8E8E8E;">.</span><span style="color: #9CDCFE;">Clk</span> <span style="color: #569CD6;">to</span> <span style="color: #8E8E8E;">LogicCore</span><span style="color: #8E8E8E;">.</span><span style="color: #9CDCFE;">Clk</span><br>
<span style="color: #a8009a;">route</span> <span style="color: #8E8E8E;">MCU</span><span style="color: #8E8E8E;">.</span><span style="color: #9CDCFE;">GPIO</span><span style="color: #8E8E8E;">[</span><span style="color: #B5CEA8;">0</span><span style="color: #8E8E8E;">..</span><span style="color: #B5CEA8;">1</span><span style="color: #8E8E8E;">]</span> <span style="color: #569CD6;">to</span> <span style="color: #8E8E8E;">LogicCore</span><span style="color: #8E8E8E;">.</span><span style="color: #9CDCFE;">TargetState</span><br>
<span style="color: #a8009a;">route</span> <span style="color: #8E8E8E;">MCU</span><span style="color: #8E8E8E;">.</span><span style="color: #9CDCFE;">GPIO</span><span style="color: #8E8E8E;">[</span><span style="color: #B5CEA8;">2</span><span style="color: #8E8E8E;">..</span><span style="color: #B5CEA8;">9</span><span style="color: #8E8E8E;">]</span> <span style="color: #569CD6;">to</span> <span style="color: #8E8E8E;">LogicCore</span><span style="color: #8E8E8E;">.</span><span style="color: #9CDCFE;">Speed</span><br>
<br>
<span style="color: #a8009a;">route</span> <span style="color: #8E8E8E;">LogicCore</span><span style="color: #8E8E8E;">.</span><span style="color: #9CDCFE;">PwmHigh</span> <span style="color: #569CD6;">to</span> <span style="color: #8E8E8E;">MotorDriver</span><span style="color: #8E8E8E;">.</span><span style="color: #9CDCFE;">In1</span><br>
<span style="color: #a8009a;">route</span> <span style="color: #8E8E8E;">LogicCore</span><span style="color: #8E8E8E;">.</span><span style="color: #9CDCFE;">PwmLow</span> <span style="color: #569CD6;">to</span> <span style="color: #8E8E8E;">MotorDriver</span><span style="color: #8E8E8E;">.</span><span style="color: #9CDCFE;">In2</span><br>
</div>