Engineering Project Journal for Shubo Xie

>
Week 15:
Total Work Time: 8 hours
Description of design efforts:
This week, I was helping our software lead on debugging the delay audio effect for our device and preparing the final presentation.

Date Reported: 04/16/2024
Start Time: 1 pm
Work Time: 4 hours
Delay Effect Debugging

Date Reported: 04/17/2024
Start Time: 12:30 pm
Work Time: 4 hours
Audio Effect Demo

Week 14:
Total Work Time: 12 hours
Description of design efforts:
This week, I was helping with the codec integrating problem on PCB, and I am also working on the stretched goal of sending audio data to PC.

Date Reported: 04/12/2024
Start Time: 5 pm
Work Time: 3 hours
USB Data Transfer Through STM32
Right now, I am going to set up the usb data transfering on our stm32.
usb1"
First of all I am selecting the USB in DEVICE only MODE, as shown above.
usb2"
In the USB DEVICE, select the class as Communication Device Class (Virtual Port Com) and leave everything to default.
usb3"
Finally the clock is set to maximum here. As you can see above, the USB clock is automatically adjusted to 48 MHz.
Now I am going to write code for the usb transferring.

Date Reported: 04/11/2024
Start Time: 7 pm
Work Time: 3 hours
USB Data Transfer Research
The picture below shows the architecture of USB protocol. The USB (Universal Serial Bus) protocol is a standardized communication protocol used for connecting various devices to a host computer. It's designed to facilitate communication and data transfer between devices in a plug-and-play manner.
usb_pro"

The Host computer in this picture will be the PC or laptop in the lab, and our microphone interface will be the I/O devices.

The figure below is the message format of USB. When the usb is sending data, the data format will be like this. There are mainly four types of USB packets Token, Data, Handshake & Start of the Frame. Every packet is designed from various field types which are shown in the following message format diagram.
usb_mes"
Date Reported: 04/10/2024
Start Time: 12:30 pm
Work Time: 3 hours
Codec PCB Layout Checking
When we are running code on the nucleo board to test out running multiple filters simultaneously and we noticed that we were getting the I2C error for the codec initialization on the nucleo as well. we thought it could be an issue with the clocks since we changed their configuration for the PCB MCU since we got hard faults, so we changed them back see if it would stop getting the error. we noticed it was still experiencing I2C errors but the codec got initialized and there was output from it.
code_dev"

After that, I start to check the PCB layout of codec, and the picture below is the PCB layout of codec.
pcb_code"

After checking every line in the PCB board, I found out no issues on PCB board.

Date Reported: 04/08/2024
Start Time: 1:30 pm
Work Time: 3 hours
Codec Problem Research
Since our codec works on prototyping, we are looking for the reason why it does not work on our PCB. I start to check the problem may appear on schematic diagram.
The figure below is the schematic we referred to, and it is the schematic diagram for the codec development board.
code_p"

The figure below is the schematic diagram we draw for the codec.
sch_code"

By comparing this two figures, I found out no issues with the schematic diagram, and I think we can check with PCB to avoid some routing error.

Week 13:
Total Work Time: 8 hours
Description of design efforts:
This week, I work on integrating two rotary encoders and one push button to MCU, codec and LCD, and I have done that job. Next, I will move to helping Jacob to do the LCD interface.

Date Reported: 04/05/2024
Start Time: 12:30 pm
Work Time: 2 hours
Research on LCD
Since we already have the driver for controlling LCD. I need to know how to implement the display function. Develop functions to control the display, such as writing characters or strings, positioning the cursor, clearing the screen, and controlling the backlight. These functions will typically involve sending commands and data to the LCD module over the configured communication interface.
driver"
The picture above shows all the driver we are going to use for the LCD display.

Date Reported: 04/04/2024
Start Time: 12:30 pm
Work Time: 3 hours
Integrating Push Button
The schematic diagram below shows the push button I am going to integrate. We will connect PF12 to push button as GPIO input.
button"
The code below is the testing code for push button. whenever you press the button, the connected LED will blink. The HAL_GPIO_ReadPin() takes in two parameters: the pin connected with the push button port and the push button GPIO pin which is pin9 in our case. This function will be responsible for reading the state of the push button pin. Next the HAL_GPIO_WritePin() function takes in three parameters: the LED port, the LED pin and the state of the pin. This function will be responsible for setting the LED pin ether HIGH or LOW.
button_code"
The picture below shows the PCB layout of push button, and we will add ESD protection to each push button to protect our components.
buttonPCB"

Date Reported: 04/03/2024
Start Time: 12:30 pm
Work Time: 3 hours
Integrating Second Encoder
The schematic diagram below shows the rotary encoder I am going to integrate. I will be using 2 10k resistors as voltage load, and one LED will be used as testing LED. The rotary encoder will control the frequency of LED. Other teammate can better understand the variable I used to read the impulse from rotary encoder.
encoder2"
The PCB layout below shows the rotary encoder I am going to integrate.
encoder22"
The code I wrote for the rotary encoder is shown below. I need to set up the timer in encoder mode. For the TIME4 configuration, we need to select combined channel in encoder mode. I set the timer 5 as PWM generation which will blink the LED when rotary encoder is working.
code_en"

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Week 10 & 11:
Total Work Time: 8 hours
Description of design efforts:
This week, I was focusing on integrating rotary encoders with microcontroller and codec.

Date Reported: 03/22/2024
Start Time: 12:30 pm
Work Time: 3 hours
Research about Encoder and Codec
Since our codec is using I2S interface to input signal into MCU, I am thinking about if we need to stroe the input signals and make effect to them. The stm32 will be in master mode, it controls the input and output. When I use rotary encoder to update the parameter of the function we apply to the input signal, it may have delay. Right now, when we are connecting the LCD screen and codec together, the playback function will have big delay so we are thinking about using DMA to fix the problem.

The list below shows the function we have for our project. wm8732 is the codec driver, and ili9341 is the lcd driver. filters is the signal effect driver.
li"

Date Reported: 03/20/2024
Start Time: 12:30 pm
Work Time: 5 hours
Integrating Encoder with MCU
I am integrating the rotary encoder with MCU according to the schematic diagram. The schematic diagram and implementation are shown below.
en_sch"
encoder"

The pin I am using are PE11 and PE9, and I set PE9 as TIME1 CHANNEL1 and PE11 as TIME1 CHANNEL2.
pin"

Also, I need to set up the time in encoder mode. For the TIME1 configuration, we need to select combined channel in encoder mode. I se the counter period as 65532, and the auto-reload preload is enabled. The input filter is set as 10 to reduce any noise on the input pins.
conf"

In order to test the counter and clik function of rotary encoder, I will use terminal to print out the number of tick of encoder.

The code below should be wrote into main file. We will first enable and start the timer in the following lines. Firstly, call MX_TIM2_Init() function to initialize Timer2 on the set Prescaler, Preload, and Clock frequency values. Then call HAL_TIM_Encoder_Start() to start the TIM encoder interface.
code1"

Inside the while() loop, the encoder ticks is read and transmitted via UART2 to the serial terminal using HAL_UART_Transmit() after a delay of one second. We use an if-else statement to check if the switch is pressed or released.
code2"

I should get this information in terminal when I turn the rotary encoder.
res"

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Week 8 & 9:
Total Work Time: 8 hours
Description of design efforts:
This week, I was focusing on editing the PCB layout and debugging the gerber file of our board, and we are going to order it by this week.

Date Reported: 03/07/2024
Start Time: 8:30 pm
Work Time: 3 hours
PCB Layout Edition
After getting feedback from Joe, we need to change all the vias to 0.8mm and 0.3mm. We need to route traces to GND and EXT. We need to add some breakout to extra STM32 I/O pins.
Firstly, we changed all the vias to 0.8mm and 0.4mm.
vias"

After changing all the vias on our board, I adjust all the route to avoid violation of minimum clearance.

We add several breakout for our extra I/O pins which used to debug in future. The picture below is the schematic for the breakout.
io"

Our fixed pcb is below.
pcb"

Date Reported: 03/06/2024
Start Time: 12:30 pm
Work Time: 2 hours
Gerber File View
I signed up an account in JLC PCB for furture ordering. I export the gerber file of our PCB and upload it to the JLCPCB Gerber viewer. It looks like this in Gerber viewer.
gerber"

The picture below shows all the gerber files I include for PCB.
file"

Date Reported: 03/05/2024
Start Time: 7:00 pm
Work Time: 3 hours
PCB Layout Edition
By having the feedback from mid-term review, we made a lot of changes to our PCB layout. We used to have a signal layer in the inner layer while a ground layer on the outer layer. Now, we change the outer layer to signal layer, which is easier for debugging.
layer"

Also, we change the mounting hole to normal mounting hole instead of connecting ground.
hole"

We put our decoupling capacitors of mcu to the back of board, which saved a lot of room for other components.
capa"

We reroute our board to decrease unnecesarry long route.
line"

We change our LCD connector from right to top for better routing.
connector"

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Week 7:
Total Work Time: 8 hours
Description of design efforts:
This week, I spent a long time figuring out errors on schematic diagrams, and I assigned footprints to each component for making a PCB outline. Also, I placed each major component on a proper position of the PCB board.

Date Reported: 02/22/2024
Start Time: 7:00 pm
Work Time: 3 hours
Footprint Assignment & Placement
Before converting the schematic into PCB board, I need to assign footprint to each component including all the resistors, capacitors and other major components. By pressing the option on the top of the bar, we can assign footprint.
fp

Kicad has its own library which contains all general footprints but we still need to import some footprint from other websites. By using the footprint editor, we can import external footprints.
fe

There are six footprints we need to import from Digikey. They are usb micro, codec, lcd, regulator, micro and rotary encoders. On their product website, we can download their footprints. The link of those components are listed below.
Source: https://www.digikey.com/en/models/2785388
Source: https://www.digikey.com/en/models/4499665
Source: https://www.digikey.com/en/models/2001204

After assigning all of the footprints, we can click the update option in the tools menu to update our schematic to PCB.
up"

Then, I can get a rough PCB outline of our schematic but it is still far away from a formal PCB design.
pcb1"

After having all the footprints in PCB, the first thing is to place them on the right place. The picture above is the PCB I already adapted to proper position but we may need to change them later. Before placing the footprints, I need to make a proper edge cut which is the size of the PCB board, and you can draw the edge cut by cliking the edge cuts option on the right.
edge

Date Reported: 02/21/2024
Start Time: 12:30 pm
Work Time: 2 hours
Schematic Error Fixing
I added LED to the output of regulator as the power flag, whenever the usb is plugged in, the LED will blink to notice user that the power is in. For the decoupling capacitor, I used 13 0.1uF and 1 4.7uF of them for VDD power supply, which means each VDD pin will have one decoupling capacitor.
pwrcir"

Date Reported: 02/19/2024
Start Time: 1:30 pm
Work Time: 3 hours
Power circuit Research
By referring to the diagram found in datasheet, I can know that The STM32F746ZG typically operates from a supply voltage in the range of 1.7V to 3.6V. I'll need to provide a stable power supply within this range. Also, I need to Place decoupling capacitors close to the power pins of the MCU. These capacitors help to filter high-frequency noise and ensure stable voltage supply to the MCU, especially during sudden load changes or switching activities.
32pwr"

For our device, we do not need VDDA pin and VREF+ since our components are operating at digital power.

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Week 6:
Total Work Time: 6 hours
Description of design efforts:
This week, I spent most of my time drawing the schematic diagram of our product, and I was learning PCB design for the rest of time. I take charge of power circuit, ESD protection, decoupling capacitors and boost circuit of schematic diagram.

Date Reported: 02/16/2024
Start Time: 8:00 pm
Work Time: 2 hours
ESD Protection

Date Reported: 02/15/2024
Start Time: 10:00 am
Work Time: 2 hours
Decoupling Capacitor Research

Date Reported: 02/14/2024
Start Time: 12:30 pm
Work Time: 2 hours
Power Circuit Schematic

The picture below is the schematic diagram of the initial power circuit and it will convert 5V to 3.3V.
pwr_sch

Boot & Rst Pin Research
When the STM32 is powered up for the first time (and the reset line is released), the internal boot code (bootloader) will first start and check if the flash memory is blank. If the flash is empty, the bootloader will enable and listen to some peripherals (some UART/I2C/SPI/USB) to communicate with the outside world as a means of downloading and flashing the device. If the flash memory is not empty, the user code in the flash memory will start. If boot0 is connected high, the bootloader will assume the flash memory is blank.

The NRST is the reset pin on STM32 MCUs. It is active low (hence the "N") so for normal operation it needs to be pulled up to VCC. The STM32 MCUs have an internal pull up resistor so if unused it is acceptable to leave this pin dangling.

The picture below is the reference picture for Reset and Boot mode circuit.
rst_bot

Source: https://stm32world.com/wiki/Boot0#google_vignette

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Week 5:
Total Work Time: 11 hours
Description of design efforts:
This week, I mainly focused on interfacing the LCD screen with STM32F407G development board, and I successfully made the 2.2 TFT SPI screen work with the selected library at the end of this week. Beside that, I also draw the schematic diagram of the power regulator and implement it on board.

Date Reported: 02/08/2024
Start Time: 10:30 am
Work Time: 4 hours
2.2 TFT Screen Testing
Instead of finding a proper library for the touch screen, I changed the touch screen to a normal screen for testing. The screen I was using is the 2.2 TFT SPI 240x320 LCD screen. This time, the library worked with the new screen, and the testing shape appeared in the screen. The test video is in the link below.

Source: https://youtu.be/O3YjdZmBKlk?si=rPKYG0Eq3llWD6aX

The picture below is the on board implementation of new screen and STM32F4. screen_cir

In conclusion, the new library only works for screen without touch function, and I did not figure out the reasons behind it.

Date Reported: 02/07/2024
Start Time: 12:30 pm
Work Time: 4 hours
New Library for Touch Screen
The new library I found for ILI9341 is in the link below, and I try to implement it with the Adafruit touch screen. The pinout I implement is also below. The reason why I choose this library is because the author of this library was using STM32F1 for testing, and he successfully implement it by using STM32CubeIDE. Also, the library is pretty straightforwad, and I only need to change several parameters I think.
pin_new
Source: https://www.micropeta.com/video37#google_vignette

Finally, I did not get the screen working but the backlight of the screen is on. There are several reasons that can cause it to fail. The first one might be the chip select pin does not correctly be used in the touch screen. The second is that the author of the library was using a normal TFT screen instead of touch screen so the touch module might not be set up properly.

Power Regulator
Since most of the components operate at 3.3V, I need to use a power regulator to convert the 5V power supply from USB power to 3.3V. The regulator I referred to is the schematic diagram of STM32F091.

The picture below is the schematic diagram of our power regulator. I draw it using Kicad. power_reg

After drawing the schematic diagram, I start to implement the power regulator on board. Since the regulator of LD1117S33TR is in the QFN package, I soldered three lines to it, and the final implementation is in the picture below.
reg_cir

After on board implementation, I used oscilloscope to test the output. The blue signal is the original power, and the yellow signal is the regulated power. It is clear that the original 5V power become 3.3V, and the noise of original power reduced. reg_wave

Date Reported: 02/05/2024
Start Time: 1:30 pm
Work Time: 3 hours
Interfacing Touch Screen
The picture below is the pinout I used to connect LCD screen and MCU.
screen_pin
At first, I was using a 2.8 TFT LCD with Cap Touch Breakout Board from Adafruit, and the microcontroller I was using was the STM32F407G. According to the datasheet from the adafruit website below, I figured out the pin out for the SPI channel. Adafruit also has its own ILI9341 driver for the LCD screen. The driver can be found in the second link below.

Source: https://www.adafruit.com/product/2090
Source: https://github.com/adafruit/Adafruit_ILI9341

The problems of interfacing the screen come soon. Firstly, the driver written by Adafruit is based on C++ and has easy tutorials with Arduino Uno instead of STM32 so I was looking for a new library which can work for STM32. Secondly, the touch function needs one more library which is the FT6206 library. While touch function is our strchted function, I will try to make it work.

Source: https://github.com/adafruit/Adafruit_FT6206_Library

In conclusion, the Adafruit library did not work with interfacing STM32 so it is better to find a new library or new screen.

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Week 4:
Total Work Time: 10 hours
Description of design efforts:
This week, I measure the noise of the 5V USB power supply by using an oscilloscope, and I draw the schematic diagram of the noise filter. Then, I built a simpler preamplifier circuit for the electret condenser microphone but I found out the signal is too low to be detected by the ADC channel. I changed the preamplifier circuit to a self-biased transistor microphone amplifier, and I got enough amplitude signal from it to enter the ADC channel. In addition, I was trying to use the stm32f407g development board to read the signal from the electret condenser microphone but I failed. I want to start to use the ADC channel to read the simple signal from potentiometer first.

Date Reported: 01/31/2024
Start Time: 12:30 pm
Work Time: 4 hours
STM32f407g ADC Research
For research on the STM32F407G's ADC functionality, I start by reviewing its datasheet and reference manual to understand its features and architecture, including the number of channels, resolution, and conversion modes. Also, I configure and initialize the ADC in my firmware on STM32CubeIDE, and I understand how to connect analog signals to the ADC channel. At the end, I look for application examples and sample code to guide my implementation. The primary tutorial I followed is on the link below.

Source: https://www.digikey.com/en/maker/projects/getting-started-with-stm32-working-with-adc-and-dma/f5009db3a3ed4370acaf545a3370c30c

Date Reported: 01/30/2024
Start Time: 10:00 am
Work Time: 3 hours
Preamplifier Circuit Building for ECM
The reason for building the amplifier circuit is that the output signal from the electret condenser microphone is around 0 to 100 mV which is unable to be detected by ADC in stm32. However, the needed voltage can be calculated by VCC/2 DC offset. Since we are using 3.3V for VCC, around 1V signal is enough to be detected by the ADC channel.

The picture below is the amplifier circuit I built for ECM. The advantage for this circuit is that it is easy to calculate the value and the transistor is available in the lab, but this circuit can be affected by temperature greatly because of the transistor.
amp_cir

The output signal is measured by the oscilloscope, and its value can easily be around 1V. So we are ready to input its signal into ADC channel. You can use link below to see the video.
Source: https://youtu.be/k0MvqYLt78A?feature=shared

Different Microphone Research
We have two options for input signals now. One is through a codec to I2S. The other one is through a microphone to the ADC channel. If we are going to use ADC as input signal channel, choosing a fixed microphone will be easy for testing. Since I only have ECM available, I am using it for prototyping purposes now. Except ECM, we can also choose other microphones like MEMS microphone. The picture below shows the advantages and disadvantages of different microphones.
micro_comp
Source: https://www.youtube.com/watch?v=_YQSJJQUp-g

Date Reported: 01/29/2024
Start Time: 1:30 pm
Work Time: 3 hours
Noise of 5V USB Power Port Measured
In order to measure the noise of 5V USB power port, I connect the oscilloscope port to the breakout board of Mini-B USB, and I plug in the cable to lab PC.
usb_power_o

In the picture below, it displays the waveform in 200ns, and the noise range is from 4.5V to 5.5V.
usb_power_noise_1

After time/div goes to 8us, we can see the noise appears quite ofter in every 8us.
usb_power_noise_2

Schematic Diagram for Noise Filter
I cannot build the noise filter circuit right now, since I update my filter circuit to include a ferrite bead which has very good performance on filtering noise, and the ferrite bead is on the way. I draw the schematic diagram for the noise filter, and the diagram is below.
filter_other

After reading the schematic diagram of stm32 we used in ECE362, I found that there is another noise filter we can use. It is the noise filter used by the development board, and its diagram is below.
noise_filter_stm32

I plan to test both of the filter this weekend to see its performance.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Week 3:
Date Reported: 01/25/2024
Start Time: 7:30 pm
Work Time: 3 hours
Description of design efforts:
This week, I mainly focused on implementing the noise filter for the USB power port, and I did research on the connection between microcontroller and codec. I also figured out the pin connection between the codec and the MEMS microphone.

Noise Detection from USB power port
From last week's research, I found that USB power has noise which may affect our input signal quality so I built a simple circuit to check the noise of the power supply from the USB port. The circuit is in the picture below.
noisecir

By using the oscilloscope function of AD2, I can see the noise is apparent in the image below noise1

I started to build a low pass filter for canceling the noise of the USB port. The picture below is the circuit I built.
filtercir

Then I measured the power voltage again by using AD2. The result is in the picture below. noise2

In conclusion, this is a simple filter circuit for noise canceling, and I may want to use a more complicated filter to have better power voltage. The LDO may be a reference for my latter circuit building. Also, AD2 is not as sensing as a physical oscilloscope so I want to do the measurement again in the lab to check my circuit.

Date Reported: 01/24/2024
Start Time: 12:30 pm
Work Time: 3 hours
Connection between Mic and Codec
Source: https://www.st.com/content/ccc/resource/technical/layouts_and_diagrams/schematic_pack/group1/05/61/3e/94/2b/2b/48/5e/mb1191-F746NGH6-B02_schematic/files/mb1191-F746NGH6-B02_schematic.pdf/jcr:content/translations/en.mb1191-F746NGH6-B02_schematic.pdf
miccodec
By referring to the PCB layout of stm32f7 discovery kit above, I found the connection between codec and MEMS microphone will be useful to our device, since we are stucking on how to get input signals properly. This layout can give us some clue how to connect between them so what we need to do next is to check the pinout of our own microcontroller. Then we are able to test them.

Date Reported: 01/23/2024
Start Time: 7:00 pm
Work Time: 1 hours
Learning for Kicad
I used the schematic editor in Kicad to draw the diagram for noise filter of USB power supply, and I plan to learn how to use Kicad for PCB layout next week.

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Week 2:
Date Reported: 01/19/2024
Start Time: 1:30 pm
Work Time: 2 hours
Description of design efforts:
Besides the part of filtering noise of USB power, I also want to add a voltage regulator for USB power. The voltage regulator will handle the 5V input and output 3.3V fixed voltage when it is needed.

Voltage regulator Research
Since the USB port only has 5V fixed voltage output, we cannot adapt some electronic components that only need 3.3V power supply so a voltage drop-out circuit can make 5V to be 3.3V. I looked into a built-in regulator with a specific datasheet, and I thought it would be a good reference for building the circuit for our device.

regulator
Instead of building our own circuit, we can also use the regulator shown above to change our power volatge, and it is from the source I listed below.

Source: https://www.ti.com/lit/ds/symlink/tps77533-ep.pdf?ts=1706145645955&ref_url=https%253A%252F%252Fwww.ti.com%252Fproduct%252FTPS77533-EP

Week 2:
Date Reported: 01/18/2024
Start Time: 5:00 pm
Work Time: 4 hours
Description of design efforts:
I take charge of the power regulation of USB output ports. Today, I will focus on how to filter the noise from the USB power port and review some projects about how to do it.

Power from USB port Research
Source: https://usbdisruptor.com/dirty-usb-power/#:~:text=The%20power%20from%20the%20USB,the%20sound%20of%20your%20music
For the power regulation module, I firstly want to add a noise filter to it, since the power delivery from the USB port is usually very noisy by referring to the website above. In the website’s article, it says that “The power from the USB port is constantly spiking because of the computer’s electrical processes. This causes noise and in turn that noise affects the sound of your music.” Because we are making a USB audio interface, it is really important to reduce the noise of our audio signal.

RLC Filter Research
filter
The picture[2] above gave me some clue about how to cancel the noise of USB power. He was using the RLC filter with additional capacitors chosen to respond to different frequency ranges, and I thought reading the FTDI application notes he mentioned in the article would be a good start to see how it works. Also, I am going to review the content we learned in 2k2 about RLC filter before I do it.

Reference:
[2]“Filtering the 5V USB power supply line,” Andys Workshop, Jul. 24, 2015. https://andybrown.me.uk/2015/07/24/usb-filtering/ (accessed Jan. 24, 2024).

Week 2:
Date Reported: 01/17/2024
Start Time: 12:30 pm
Work Time: 2 hours
Description of design efforts:
We were doing more detail reseach toward each block diagram of our product.I particularly looked back to our input device, and I realized that writing driver to make product as host and device at the same time was kind of hard so I start to find another digital input which can be direcly sent to the micrcontroller. Fortunately, I found a microphone project which was using MEMS micrsphone as input device, and MEMS microphone is a built-in microphone which can output digital or analog signal.

MEMS Micro Research
First time I found a MEMS microphone was from a project called “A USB Microphone for Online Meetings”[1], and this project had some similar features compared to our project. This project was using MEMS microphone as input and USB as output. Our project was using two USB ports input and output so our device should act as host and device which needs a custom driver to do so, and we cannot be sure it can work. However, the MEMS microphone is more convenient and simple. It will translate sound pressure levels into an electrical signal.

mems
As the figure[1] shown above, different types of MEMS microphone will have different output signals. It can have analog signals or digital signals.

Source: https://www.cuidevices.com/blog/analog-or-digital-how-to-choose-the-right-mems-microphone-interface
Referring to the website above, I thought using digital output MEMS micro will be better, since we will apply the signal to a microcontroller. Also, the digital output signals can exhibit greater electrical noise than analog signals.

i2s
Referring to the picture from [1] above (INMP441 is MEMS Micro), he is using I2S as protocol between the MEMS Micro and microcontroller. However, I was thinking about using PDM might be another option.

Source: https://www.cuidevices.com/blog/pdm-vs-i2s-comparing-digital-interfaces-in-mems-microphones
The information I found in the website above says that "PDM can be the ideal choice in challenging application environments, thanks to its inherent resilience to noise. Conversely, employing I2S permits an input to connect directly to its accompanying DSP or other processor/controller devices without any additional complications."so I2S would be a better option for us.

Reference:
[1] “A USB microphone for online meetings,” Andys Workshop, https://andybrown.me.uk/2021/03/13/usb-microphone/ (accessed Jan. 24, 2024).


-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Week 1:
Date: 01/12/2024
Start Time: 9:30 am
Work Time: 3 hours
Description of design efforts:
We were designing the block diagram for our product, and we found that one microcontroller may not be enough for our application, so we made another frame which contains two microcontrollers. One of them controls the screen and encoders, and the other one mainly deal with the DSP effect to the input. After that, we decided on MCU and the development board used for our product this week, and we found the development board STM32F746 discovery.


Week 1:
Date: 01/10/2024
Start Time: 12:30 pm
Work Time: 2 hours
Description of design efforts:
This is our first manLab, and the instructor gave a brief introduction to this course. Then, we were talking about our project to the instructor and teaching assistant to see if our project has all five qualified PDSRs, and we found out we may need to specify more to our hardware requirement. After that, the lab staff spent about 15 min presenting everything available to use in the lab.