Skip to content

Commit

Permalink
Update pcb assembly readme and BOM for v2.0.3 version (#448)
Browse files Browse the repository at this point in the history
  • Loading branch information
apollokit authored Apr 11, 2024
1 parent 9f0a03f commit 79aec55
Show file tree
Hide file tree
Showing 7 changed files with 136 additions and 57 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,5 @@ _site
*.out
*.toc
.DS_Store

*.code-workspace
80 changes: 23 additions & 57 deletions electrical/pcb/README.md
Original file line number Diff line number Diff line change
@@ -1,63 +1,29 @@
# PCB Assembly, v2.0.3
# Control Board Assembly, v2.0.3

TODO: update these instructions for v2.0.2 or v2.0.3
TODO: renumber images and sections as necessary
TODO: make a note that some of the images are from my v2.0.1 assembly, but the instructions are for v2.0.3
The overall Control Board consists of a Motor Board with a Brain Board mounted on top. These are the instructions to assemble these two separate pcbs and mount them together as the unified control board.

<img src="../../images/pcb_assembly/v2_0_1/assembly/assembled/IMG_0848.jpeg" width="50%">

This document goes through the process of assembling and testing the custom
Printed Circuit Boards for the project.

<!-- TODO is this still valid ? -->
<!-- One thing you might notice is the boards have reference designators on them that do not match the reference designators
used in the parts lists. The board components mapping between these can be found
below:
## 1. Control Board References
| **Component** | **Parts list Ref** | **Schematic Ref** |
| --------------------------------- | ------------------ | ----------------- |
| Terminal block 6 pos top entry | E4 | J1-5 |
| Terminal block 6 pos side entry | E3 | J17-26 |
| Term block 2p side entry (5.08mm) | E12 | J13,15,16 |
| Connector Header pin 40P 40x1 | E15 | J8,9,11 |
| Connector Header pin 6P 6x1 | E14 | J10 |
| Connector Header socket 5P 5x1 | E6 | RC1-5 |
| Connector Header socket 40P 2x20 | E13 | J6,7 |
| Connector Header socket 20 2x10 | E5 | RC1-5 |
| Capacitor 100nF | E11 | C1-17 |
| Resistor 4.7K 1/4 Watt | E7 | R1 |
| Resistor 10K 1/4 Watt | E8 | R4,6,8,10 |
| Resistor 22K 1/4 Watt | E9 | R3,5,7,9 |
| Resistor 10K 1/2 Watt | E10 | R2 |
| LM358 Op Amp | E25 | U1,2 |
| DIP IC socket 8 Pos | E33 | U1,2 |
| Power Diode | E17 | D1 |
| 10A Fuse | E16 | F1 |
| USB A Connector | E34 | J12,14 | -->

<!-- ## 2. Arduino Board References
| **Component** | **Parts list Ref** | **Schematic Ref** |
| ----------------------------- | ------------------ | ----------------- |
| Term block 2P side entry | E16 | J6 |
| Connector Header pin 40P 40x1 | E15 | J2,3,4 |
| Connector Header 16P 2x8 | E30 | J1 |
| Connector Header 6P 6x1 | E14 | J5 | -->
Note that the images in these instructions are taken from an assembly of the v2.0.1 board. There are minimal differences between v2.0.1 and v2.0.3 - such that it wasn't worth doing another photoshoot for v2.0.3. Make sure to follow the written instructions when in doubt.

## 3. Motor Board Assembly
## 1. Part References

Check out the [BOM documents](control_board/BOM/v2.0.3)

All parts referenced in these instructions use the schematic "reference designator" from the silk screen on the pcbs. E.g. "C1", "J2", and "R28". You should look up the details of these parts within the [v2.0.3 BOM the board ref parts spreadsheet](control_board/BOM/v2.0.3/bom_v2.0.3_board_ref_parts.csv) or the [v2.0.3 BOM other parts spreadsheet](control_board/BOM/v2.0.3/bom_v2.0.3_other_parts.csv). This will tell you the unique ID of the part that we use for ordering from Digikey + elsewhere, and will also link to pictures of the part on the relevant website.

Generally these instructions have enough images to clearly show and identify the parts, but whenever in doubt the best thing to do is to look up the reference in the BOM spreadsheet.

## 2. Schematic and Layout Documentation

TODO: add versions for v2.0.3

<!-- ### 3.1 Motor & RoboClaw Connectors -->
There's documentation of both the schematics (how all the electrical parts logically connect to one another) and the layout (how the parts are physically placed on the boards) in the [control_board/documentation](control_board/documentation) directory

<!-- TODO update this table -->
<!-- | **Item** | **Ref** | **Qty** | **Image** | **Item** | **Ref** | **Qty** | **Image** |
| --------------------- | ------- | ------- | -------------------------------------------------------------------- | --------------------- | ------- | ------- | --------------------------------------------------------------------|
| OSR Motor Board | E1 | 1 | <img src="../../images/pcb_assembly/v2_0_1/assembly/bare_board.png" width="100"> | 10 Pos Header Socket | E5 | 5 | <img src="../../images/components/electronics/E5.png" width="100"> |
| 6 Pos Side Term Block | E3 | 10 | <img src="../../images/components/electronics/E3.png" width="100"> | 5 Pos Header Socket | E6 | 5 | <img src="../../images/components/electronics/E6.png" width="100"> |
| 6 Pos Top Term Block | E4 | 5 | <img src="../../images/components/electronics/E4.png" width="100"> | Soldering Iron | N/A | | | -->
## 3. Motor Board Assembly

| <img src="../../images/pcb_assembly/v2_0_1/assembly/IMG_1493.jpeg" height="300"> <img src="../../images/pcb_assembly/v2_0_1/assembly/IMG_1494.jpeg" height="300"> |
|:-:|
Expand Down Expand Up @@ -293,6 +259,7 @@ You **may** use larger headers to fill all the holes in the U2 footprint, but it
You will need to attach male headers to the PCA9685 daughter board, as shown in figure 3.23. Also, 5v power is provided to the PCA9685 through the two holes at the top of the U2 header. To connect these, I soldered 2 small wire leads on the PCA9685 daughter board, and then soldered them on to the motor board once I installed the PCA9685.

TODO: update instructions with alternative to janky wire leads for PCA9685

TODO: figure 3.28 is not very good

| <img src="../../images/pcb_assembly/v2_0_1/assembly/PXL_20230418_053133239.jpg" height="300"> |
Expand Down Expand Up @@ -372,7 +339,8 @@ Make sure to orient the connector in the proper direction, as indicated in the i
First, wire the 6pos terminal block headers to the roboclaw boards, as indicated in figure 3.36.

TODO: update the below and make sure it's correct
FOR v2.0.3, you should wire the pins in the J16,J17,J18 headers directly to the pins on the corresponding side of the roboclaw - it is a direct 1-to-1 mapping all the way down, with no wires crossed.

For v2.0.3, you should wire the pins in the J16,J17,J18 headers directly to the pins on the corresponding side of the roboclaw - it is a direct 1-to-1 mapping all the way down, with no wires crossed.

Do this for all three roboclaws.

Expand Down Expand Up @@ -408,7 +376,7 @@ Make sure to align the slightly "chipped"/beveled corner of the LED array with t
|:-:|
| Figure 3.40: LED array U5 installed |

### 3.20 Install drive motor headers J8,J9,J10,J11,J13,J14
### 3.21 Install drive motor headers J8,J9,J10,J11,J13,J14

| <img src="../../images/pcb_assembly/v2_0_1/assembly/IMG_0827.jpeg" height="300"> |
|:-:|
Expand Down Expand Up @@ -516,7 +484,7 @@ And now you're done with the assembly! Finally, we'll move on to testing and con
|:-:|
| Figure 4.8: Completed control board |

## 6. Testing the PCB and wiring for the drive motos
## 6. Testing the PCB and wiring for the drive motors

Before we insert the wiring and PCBs into the mechanical assemblies, we'll test and configure the drive motors, wiring, and PCB. This allows us to fix these critical parts if something doesn't look right and allows us to move to running the software as soon as the rover is assembled.

Expand Down Expand Up @@ -566,11 +534,11 @@ In the `General Settings` tab:

Next, we'll check the correct direction and calibrate velocity before we repeat the process for the other roboclaws and motors.

#### Prepare PWM signal
#### 6.3 Prepare PWM signal

Click on the PWM tab. We will now send a PWM signal to the motor and test that connections are all made correctly to the motor and encoder. Start by selecting the `Enable Space Bar Stop All` button in the bottom left which allows you to set velocity to zero when you hit the space bar.

#### Vary PWM signal
#### 6.4 Vary PWM signal

Slowly move the slider bar for the corresponding motor output channel. Verify that the right motor is spinning and that the encoder value is also changing.

Expand All @@ -579,7 +547,6 @@ Slowly move the slider bar for the corresponding motor output channel. Verify th
- If all your connections are correct, you may have to test your solder contact between the components on the board itself.

> **Note**: When troubleshooting electrical connections, always remove power to the PCB to prevent shorting and injury.
Switch direction of the slide bar and verify that it spins the other direction and the encoder value does the opposite of previous as well.

Once you've verified this, we'll focus on the direction. We want the motor to spin as in the diagram below when we send a positive PWM:
Expand All @@ -589,5 +556,4 @@ Once you've verified this, we'll focus on the direction. We want the motor to sp
For both motors check that the direction matches the diagram. If it doesn't, for that motor in the `General Settings` tab, select `M1 Reverse`. Check again to verify it matches. Now verify that the encoder value increases when you send a positive PWM for each motor. If it doesn't, select the `invert` checkbox in `General Settings` and verify again.

> **Important**: Make sure to save these settings to each Roboclaw's non-volatile memory by clicking on the `Device` menu > `Write Settings`.
Repeat starting from Section [6.1](6.1-RoboClaw-Testing-and-Verification) for the other two roboclaws.
Repeat starting from Section [6.1](6.1-RoboClaw-Testing-and-Verification) for the other two roboclaws.
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
UID,Reference,Name,Quantity,Number to Order,Value,Digi-Key Part,URL,Availability,Notes,Footprint,Datasheet
A1,C2 C4 C9 C10 C13 C14 C15 C16 C17 C18 C20 C21 C33 C34,,14,20,10nf,399-9865-1-ND,https://www.digikey.com/en/products/detail/kemet/C317C103K5R5TA7301/3726019,,,Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal,~
A2,C19 C25 C27 C28,,4,10,100uF,399-18272-1-ND,https://www.digikey.com/en/products/detail/kemet/ESK107M050AG3EA/9448269,,,Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal,~
A3,C1 C3 C5 C6 C32,,5,10,100nf,399-14065-1-ND,https://www.digikey.com/en/products/detail/kemet/C322C104K5R5TA7317/6562476,,,Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal,~
A4,C7,,1,3,10uf,399-ESK106M050AC3DACT-ND,https://www.digikey.com/en/products/detail/kemet/ESK106M050AC3DA/13176616,,,Capacitor_THT:CP_Radial_D8.0mm_P3.80mm,
A5,D1,motor power return diode,1,2,,497-2738-5-ND,https://www.digikey.com/en/products/detail/stmicroelectronics/STPS10L25D/603763?s=N4IgTCBcDaICwE4DsBaMSDMAOFBWFAcgCIgC6AvkA,,,JPL Robotics:497-2738-5-ND,~
A6,D8 D9,led diode,2,10,1N4148,1655-1N4148CT-ND,https://www.digikey.com/en/products/detail/smc-diode-solutions/1N4148/6022448,,,Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal,https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf
A7,F1,fuse holder,1,1,Fuse Holder,732-11376-ND,https://www.digikey.com/en/products/detail/würth-elektronik/696108003002/7244560?s=N4IgTCBcDaIGwE44EYAMAOVqDMWIF0BfIA,,,JPL Robotics:696108003002_5x20_fuseholder,~
A8,J1 J5,male power header,2,"1 pack (J1,J5,J3,J4)",XT30-M,n/a,https://www.amazon.com/gp/product/B0875MBLNH/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1,,"needs mate, see other page",JPL Robotics:AMASS_XT30U-M_1x02_P5.0mm_Vertical,
A9,J16 J17 J18,phoenix contact header,3,3,WM25701-ND,WM25701-ND,https://www.digikey.com/en/products/detail/molex/0395016006/2735254,,"needs mate, see other page

alternative suppliers:
- https://www.arrow.com/en/products/5452096/phoenix-contact
- https://www.digikey.com/en/products/detail/phoenix-contact/5452096/5186808?s=N4IgTCBcDa4OxwLQEZkBYAMbEDkAiIAugL5A",JPL Robotics:277-11404-ND,
A10,J7 J12 J15 J19,pwm header,3,4,TSW-104-07-F-T,TSW-104-07-F-T,https://www.digikey.com/en/products/detail/samtec-inc/TSW-104-07-F-T/6691937,,,JPL Robotics:SSW-104-01-F-T,
A11,J20 J30,test pin header,2,4,PEC08SAAN,S1012E-08-ND,https://www.digikey.com/en/products/detail/sullins-connector-solutions/PEC08SAAN/859161?s=N4IgTCBcDaIAoFEDCAGAHAZQIJYHIgF0BfIA,,,Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Vertical,
A12,J21,interconnect header,1,1,PPTC102LFBN-RC,PPTC102LFBN-RC,https://www.digikey.com/en/products/detail/sullins-connector-solutions/PPTC102LFBN-RC/810216?s=N4IgTCBcDaIApwCoGECMAGMAZAYgIQDkBaAJWRAF0BfIA,,,JPL Robotics:PPTC102LFBN-RC,
A13,J22 J23,rpi header,2,2,S9175-ND_rpi_breakout,S9175-ND,https://www.digikey.com/en/products/detail/sullins-connector-solutions/SBH11-PBPC-D20-ST-BK/1990068?s=N4IgTCBcDaIMoE4CMB2ArAWgHIBEQF0BfIA,,,JPL Robotics:S9175-ND,
A14,J24,arduino header,1,2,6posheader,455-1708-ND,https://www.digikey.com/en/products/detail/jst-sales-america-inc/B6B-PH-K-S-LF-SN/926615?s=N4IgTCBcDaICwFYEFoCMB2ADADmQOQBEQBdAXyA,,,JPL Robotics:455-1708-ND,
A15,J25,rpi i2c header,1,0,SSW-104-01-F-T,SSW-104-01-F-T-ND,https://www.digikey.com/en/products/detail/samtec-inc/SSW-104-01-F-T/7873826?s=N4IgTCBcDaIMpwOoFoCMAGALM9rkDFkAVEAXQF8g,,Added +1 of TSW-104-07-F-T. Needs cleanup in kicad files,JPL Robotics:SSW-104-01-F-T,
A16,J26,"board interconnect header, brain board side",1,1,kk ,WM6548-ND,https://www.digikey.com/en/products/detail/molex/0702462001/760170?s=N4IgTCBcDaIOoFkBsBWALADgLQDkAiIAugL5A,,,JPL Robotics:WM6548-ND,
A17,J27 J28 J29,brain board other breakout header,3,5,PPTC021LFBN-RC,S7000-ND,https://www.digikey.com/en/products/detail/sullins-connector-solutions/PPTC021LFBN-RC/810142?s=N4IgTCBcDaIApwCoGEAMYCMAZAYgIQDkBaAJWRAF0BfIA,,,JPL Robotics:PPTC021LFBN-RC,
A18,J3 J4,female power header,2,"1 pack (J1,J5,J3,J4)",XT30-F,n/a,https://www.amazon.com/gp/product/B0875MBLNH/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1,,"needs mate, see other page",JPL Robotics:AMASS_XT30U-F_1x02_P5.0mm_Vertical,
A19,J2 J6,power breakout terminal block,2,2,ED2580-ND,ED2580-ND,https://www.digikey.com/en/products/detail/on-shore-technology-inc/OSTTA024163/614529?s=N4IgTCBcDaIKIBEwFYAcAGAtAOQSAugL5A,,,JPL Robotics:ED2580-ND,
A20,J8 J9 J10 J11 J13 J14,drive motor header,6,6,Molex_172675-0613,172675-0613,https://www.digikey.com/en/products/detail/molex/1726750613/5116933?s=N4IgTCBcDaIIwHYwDYEFYC0AGZcDMIAugL5A,,"needs mate, see other page",JPL Robotics:Molex_172675-0613,
A21,Q1 Q2 Q3 Q4 Q5 Q6,led bjt transistor,6,10,2N3906,2N3906TAFSCT-ND,https://www.digikey.com/en/products/detail/onsemi/2N3906TA/975255,,,Package_TO_SOT_THT:TO-92_Inline,https://www.onsemi.com/pub/Collateral/2N3906-D.PDF
A22,R10,,1,10,100,CF14JT100RCT-ND,https://www.digikey.com/en/products/detail/stackpole-electronics-inc/CF14JT100R/1741261?s=N4IgjCBcoExaBjKAzAhgGwM4FMA0IB7KAbXADYBWAFgGYQBdfABwBcoQBlFgJwEsA7AOYgAvvjrQQSSGix5CJEDAoAGOoxCt2XPkNH4wAdirwpKDDnxFIpGjEp2GzNpE48BwseACcADm%2Bm0rKWCjYgKgxeMCq%2BFIHmclaKYCoqAAQA8gAWALaYTpouIACq-LwsGcgAstiomACu3Nj6IAC0cJLSPPXy1qRx9F6tEJ0JIX0ghjS%2BkfitJqMyFr2KNN5%2BkSIiQA,,,Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal,~
A23,R15 R16 R17 R36 R37 R38,,6,10,10k,CF14JT10K0CT-ND,https://www.digikey.com/en/products/detail/stackpole-electronics-inc/CF14JT10K0/1741265,,,Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal,~
A24,R2 R3 R4 R5 R11 R12 R13 R14 R31 R32 R33 R34 R35,,13,25,4.7k,CF14JT4K70CT-ND,https://www.digikey.com/en/products/detail/stackpole-electronics-inc/CF14JT4K70/1741428?s=N4IgjCBcoExaBjKAzAhgGwM4FMA0IB7KAbXADYBWAFgGYQBdfABwBcoQBlFgJwEsA7AOYgAvvjrQQSSGix5CJEDAoAGOoxCt2XPkNH4wATgAch%2BFJQYc%2BIpFIqGYpSuMVz02dYV2QVAHQA7AAEANYA8gAWALaYDMxskCAAqvy8LGHIALLYqJgArtzY%2BiAAtBCSHlbytqQBNMaO%2BCVU7pZyNoo0hiaNpW4VbV41So4iIkA,,,Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal,~
A25,R21 R30,,2,10,0,CD14ZT0R00CT-ND,https://www.digikey.com/en/products/detail/stackpole-electronics-inc/CD14ZT0R00/1741230,,,Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal,
A26,R18 R19 R20 R22 R23 R24,,6,10,68,CF14JT68R0CT-ND,https://www.digikey.com/en/products/detail/stackpole-electronics-inc/CF14JT68R0/1741487,,,Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal,
A27,R25 R26 R27 R28 R29,,5,10,82,CF14JT82R0CT-ND,https://www.digikey.com/en/products/detail/stackpole-electronics-inc/CF14JT82R0/1741513,,,Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal,
A28,R1 R6 R7,,3,10,1k,CF14JT1K00CT-ND,https://www.digikey.com/en/products/detail/stackpole-electronics-inc/CF14JT1K00/1741314,,,Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal,~
A29,R8,,1,10,680,CF14JT680RCT-ND,https://www.digikey.com/en/products/detail/stackpole-electronics-inc/CF14JT680R/1741489?s=N4IgjCBcoExaBjKAzAhgGwM4FMA0IB7KAbXADYBWAFgGYQBdfABwBcoQBlFgJwEsA7AOYgAvvjrQQSSGix5CJEDAoAGOoxCt2XPkNH4wZeFJQYc%2BIpFI0wAdjABOFQ2ZtInHgOFilKgBwUxtKy5gpWIGR%2BKgAEALYA8gAWsZgg%2BJExSSkumm4gAKr8vCzxyACy2KiYAK7c2PogALQQksFm8paktjR%2BDD6NVEGmchaKNA4OvfT9ga3DoZ1KfSIiQA,,,Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal,
A30,R9,,1,10,220,CF14JT220RCT-ND,https://www.digikey.com/en/products/detail/stackpole-electronics-inc/CF14JT220R/1741346,,,Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal,
A31,RC1 RC2 RC3,roboclaw,3,3,RoboClaw,n/a,https://www.basicmicro.com/Roboclaw-2x7A-Motor-Controller_p_55.html,Available,appears to be sold out everywhere but basicmicro,JPL Robotics:roboclaw_mount,
A32,SW1,estop switches,1,1,CT206124-ND,CT206124-ND,https://www.digikey.com/en/products/detail/cts-electrocomponents/206-124/20816?s=N4IgTCBcDaIMIBUwAYBsBGMAWAtAOQBEQBdAXyA,Available,,JPL Robotics:CTS-206-124,
A33,U1,ina260 power measurement unit,1,1,INA260,1528-2955-ND,https://www.digikey.com/en/products/detail/adafruit-industries-llc/4226/10130492,Not available. Use bypass resistor or build breakout board yourself.,"Appears to be sold out everywhere right now.

Can bypass on the motor board using 0 ohm resistor (R30)

Alternative is to buy the TI chip itself and assemble the adafruit breakout board separately yourself. EagleCAD files here",JPL Robotics:INA260,
A34,U2,pca9685 corner motor driver,1,1,PCA9685,n/a,https://www.mouser.com/ProductDetail/Adafruit/815?qs=GURawfaeGuCGKbWyy9179Q%3D%3D,Available,"Alternative sellers:
- rs-online
- https://www.digikey.com/en/products/detail/adafruit-industries-llc/815/4990757 ",JPL Robotics:PCA9685_servo_controller,
A35,U3,12v regulator,1,1,D24V22F12,n/a,https://www.pololu.com/product/2855,Available,,JPL Robotics:D24V22Fx_regulator,
A36,U4,5v regulator,1,1,D24V150F5,2183-2881-ND,https://www.pololu.com/product/2881,Limited availability. Look for other suppliers if you can't find.,"Alternative sellers:
- https://www.digikey.com/en/products/detail/pololu-corporation/2881/10451196
- https://opencircuit.shop/product/5v-15a-step-down-voltage-regulator-d24v150f5
- https://www.solarbotics.com/product/51017/ ",JPL Robotics:D24V150Fx,
A37,U5 U6,LED array,2,2,DC10CGKWA,DC7G3HWA,https://www.digikey.com/en/products/detail/kingbright/DC10CGKWA/4098422?lang=en&s=N4IgTCBcDaICIGECMAGBBxA0gdQIIgF0BfIA&site=US,Available,Used DC7G3HWA originally for v2.0.1 . That's obsolete now.,JPL Robotics:DC7G3HWA_led_array,
A38,U7,3.3v regulator,1,2,MIC2937A-3.3WT,576-2235-ND,https://www.digikey.com/en/products/detail/microchip-technology/MIC2937A-3-3WT/1029168,Available,,Package_TO_SOT_THT:TO-220-3_Vertical,
Loading

0 comments on commit 79aec55

Please sign in to comment.