Ushirikiano
SANAA
UREMBO NA USTAWI
UJANJA
UTAMADUNI NA HISTORIA
BURUDANI
MAZINGIRA
CHAKULA NA VINYWAJI
UHANDISI WA KINYUME
SAYANSI
MICHEZO
TEKNOLOJIA
VAZI
Kuwasha Kwa Mara ya Kwanza: Saa ya Kwanza na Chip Yako Mwenyewe, Iliyojaribiwa na ESP32
English
Youblob (drawn from the sketch's pin map) · CC0
Ed

Imeundwa na

Ed

29. Septemba 2026FI
44
0
0
0
0

Kuwasha Kwa Mara ya Kwanza: Saa ya Kwanza na Chip Yako Mwenyewe, Iliyojaribiwa na ESP32

Kuwasha kwa mara ya kwanza ndiko wahandisi wanachokiita uwashaji wa kwanza wa silicon mpya, na mpangilio wake unajali zaidi kuliko jaribio lolote moja. Angalia kabla ya kuwasha umeme, washa umeme kabla ya kuweka saa, na weka kikomo cha mkondo kabla ya kufanya chochote, kwa sababu mzunguko mfupi ambao kikomo cha mkondo kingeugundua kwa sekunde moja unaweza kuharibu chip pekee ulizonazo. Hatua hii ni mpango wa kuwasha kwa ajili ya kidhibiti cha mwangaza PWM cha hatua zilizotangulia, kwenye bodi ya majaribio kutoka hatua ya 2. ESP32 hufanya kazi ya maabara: huunda saa ya chip, hushikilia reset yake, huweka wajibu kwenye pini nane na hupima PWM inayorudi, kisha huchapisha PASS au FAIL kwa kila wajibu. Daftari hubadilisha hitilafu kuwa jina la pini ambayo waya wake una kosa. Kwa uaminifu: bado hakuna chip. Mchoro uliundwa kwa blueprint hii, na namba zinazotarajiwa zinatokana na masimulizi ya hatua zilizotangulia; uendeshaji wa kwanza halisi ni wako.
Juu
Alasiri, chip itakapofika

Maagizo

1

Nambari za kutarajia, na jinsi ya kusoma kushindwa

Inapakia daftari la Jupyter…
2

Chipu unayoiinua

Blueprint iliyopachikwa huweka vishushio kwenye kila ingizo, kwa hivyo chipu isiyochomekwa hukaa imezimwa. Hiyo ndiyo kiini ambacho mpango huu unakijaribu.
3

Kabla ya nguvu yoyote

Bila chochote kilichounganishwa, angalia chip-on-board iliyowekwa kwenye breakout chini ya loupe: mraba umekaa vizuri, hakuna daraja la solder, hakuna kitu kilicholegea. Kisha pima upinzani kati ya pedi ya VDD IO na pedi ya GND IO ya breakout kwa multimeter, katika pande zote mbili za polarity, kisha andika namba zote mbili. Usomaji karibu na sifuri ni short: simama hapo. Jedwali la pedi la run-1 linataja ni pedi zipi za breakout ni VDD IO na GND IO; tumia jedwali la run yako, kwa sababu wafer.space inasema pinouts hubadilika kati ya runs. Kagua kwa njia hiyo hiyo kwamba hakuna pedi ya data iliyo short na jirani yake au ground.

Vifaa kwa hatua hii:

Chipu ya ASIC iliyobuniwa maalumChipu ya ASIC iliyobuniwa maalum1 kipande
Bamba la mzunguko lililochapishwaBamba la mzunguko lililochapishwa1 kipande

Zana zinazohitajika:

Kipima-umeme cha aina nyingiKipima-umeme cha aina nyingi
4

Nguvu, na kikomo cha mkondo kiko chini

Weka usambazaji wa benchi kwenye volteji ya usambazaji ya chipu yako kabla ya kuiunganisha. Volteji hiyo inategemea maktaba ulizojengea chipu yako: maktaba chaguo-msingi za kiolezo ni za 5 V, na pia inaweza kujengwa kwa maktaba za 3.3 V. Chukua thamani kamili kutoka kwenye nyaraka za run yako; jedwali la pedi za run-1 linataja pedi za nguvu lakini si volteji yake. Weka kikomo cha mkondo kuwa mpangilio wa chini kabisa unaoruhusu usambazaji kudhibiti volteji, unganisha VDD IO na GND IO, kisha washa huku ESP32 ikiwa bado haijaunganishwa. Bila saa na kila ingizo likivutwa chini, chipu inapaswa kubaki tulivu. Andika mkondo. Ikiwa usambazaji unaingia moja kwa moja kwenye kikomo cha mkondo, zima: kuna mzunguko mfupi. Rekodi mkondo mara mbili zaidi baadaye, katika reset huku saa ikifanya kazi na wakati inacheza mfano. Namba hizo tatu ni sahihi ya chipu yako mwenyewe; bodi ambayo baadaye inachora mkondo mwingi zaidi ya ilivyofanya leo ina hitilafu.

Zana zinazohitajika:

Chanzo cha umeme cha mezaChanzo cha umeme cha meza
Kipima-umeme cha aina nyingiKipima-umeme cha aina nyingi
5

Unganisha ESP32

Waya kumi na mbili, kama ilivyo kwenye picha na kichwa cha mchoro: GPIO 27 hadi kwenye pedi ya saa, 26 hadi rst_n, 32 hadi ingizo 0 (enable), 13, 14, 18, 19, 21, 22, 23 na 25 hadi pedi za pande mbili 0 hadi 7, na pedi ya pande mbili 8 irudi kwenye GPIO 34, pamoja na ardhi ya pamoja. GPIO 34 ni pini ya ingizo pekee kwenye ESP32, hivyo haiwezi kamwe kugongana na pato la chipu. ESP32 ni kifaa cha 3.3 V na ingizo zake hazistahimili 5 V. Ikiwa I/O ya chipu yako si 3.3 V, weka vibadilishaji vya kiwango katika mistari yote kumi na miwili: bodi tatu za njia nne. Aina ya kawaida ina vipinga vya kuvuta juu pande zote mbili, ambavyo vinaweza kubatilisha vipinga vya kuvuta chini dhaifu vya chipu hadi ESP32 itakapoendesha pini zake; mchoro hushikilia reset na enable chini mara tu unapoanza, kabla saa haijaanza kufanya kazi.

Vifaa kwa hatua hii:

Kibadilishaji cha viwango vya mantikiKibadilishaji cha viwango vya mantiki3 vipande
Nyaya za KuunganishaNyaya za Kuunganisha1 kipande

Zana zinazohitajika:

Bao la MajaribioBao la Majaribio
6

The test sketch

bringup.ino. It starts the chip's clock with the ESP32's LED PWM peripheral at 100 kHz, with 1-bit resolution for a plain square wave; holds reset low for 1,000 chip clocks; checks that the output stays low while enable is off; then sets seven duty values and measures the high time with pulseIn, averaged over eight periods, against 10 microseconds per step, within 3 microseconds. It compiles for the ESP32 with the Arduino ESP32 core 3.3.12; it has not been run, because the chip does not exist yet.
bringup.inocpp
// SPDX-License-Identifier: Apache-2.0
// First-light test for the PWM dimmer chip (Youblob silicon rungs 3 and 6), run from an ESP32.
// The ESP32 is the whole lab: it makes the chip's clock, holds its reset, sets the duty on eight
// pads, and times the PWM that comes back, then prints PASS or FAIL for each duty value.
//
// Wiring, through a logic level converter if your chip's I/O is not 3.3 V (see the blueprint):
//   CLK      GPIO 27  -> clk pad         RST_N  GPIO 26 -> rst_n pad   (both clear of the boot strapping pins)
//   EN       GPIO 32  -> input[0]        D0..D7 GPIO 13,14,18,19,21,22,23,25 -> bidir[0..7]
//   PWM_IN   GPIO 34  <- bidir[8]        (GPIO 34 is input-only on the ESP32: it cannot fight the chip)
//   and a common ground.

const int PIN_CLK = 27, PIN_RST = 26, PIN_EN = 32, PIN_PWM = 34;
const int DATA_PINS[8] = {13, 14, 18, 19, 21, 22, 23, 25};

// 100 kHz: slow enough for a level converter's pull-up edges, and one chip clock is 10 us,
// so pulseIn's 1 us resolution sees a tenth of a clock.
const uint32_t CHIP_CLK_HZ = 100000;
const float US_PER_CLK = 1e6f / CHIP_CLK_HZ;
const float PERIOD_US = 256 * US_PER_CLK;          // one PWM period: 256 chip clocks = 2560 us
const float TOL_US = 3.0f;                         // allowed error, about a third of a clock

void setDuty(uint8_t d) {
  for (int b = 0; b < 8; b++) digitalWrite(DATA_PINS[b], (d >> b) & 1);
}

// Average high time over n periods; returns -1 if the pin never went high (pulseIn timed out).
float meanHighUs(int n) {
  float sum = 0;
  for (int i = 0; i < n; i++) {
    unsigned long t = pulseIn(PIN_PWM, HIGH, 3 * (unsigned long)PERIOD_US);
    if (t == 0) return -1;
    sum += t;
  }
  return sum / n;
}

bool alwaysLow(unsigned long ms) {
  unsigned long t0 = millis();
  while (millis() - t0 < ms)
    if (digitalRead(PIN_PWM)) return false;
  return true;
}

void setup() {
  Serial.begin(115200);
  delay(500);
  for (int b = 0; b < 8; b++) pinMode(DATA_PINS[b], OUTPUT);
  pinMode(PIN_RST, OUTPUT);
  pinMode(PIN_EN, OUTPUT);
  pinMode(PIN_PWM, INPUT);

  // Reset low BEFORE the clock starts, then give the chip some clocks in reset.
  digitalWrite(PIN_RST, LOW);
  digitalWrite(PIN_EN, LOW);
  setDuty(0);
  if (!ledcAttach(PIN_CLK, CHIP_CLK_HZ, 1)) {      // 1-bit resolution: a plain square wave
    Serial.println("FAIL: could not start the clock on GPIO 27");
    return;
  }
  ledcWrite(PIN_CLK, 1);                           // 1 of 2 steps high = 50 % duty
  delay(10);                                       // 1,000 chip clocks in reset
  digitalWrite(PIN_RST, HIGH);

  Serial.printf("# chip clock %lu Hz, PWM period %.0f us\n", (unsigned long)CHIP_CLK_HZ, PERIOD_US);
  Serial.println("duty,expected_us,measured_us,result");
  int fails = 0;

  // Disabled: the output must stay low whatever the duty.
  setDuty(200);
  bool low = alwaysLow(20);
  Serial.printf("disabled,0,%s,%s\n", low ? "0" : "high seen", low ? "PASS" : "FAIL");
  fails += !low;

  digitalWrite(PIN_EN, HIGH);
  const uint8_t duties[] = {0, 1, 16, 64, 128, 200, 254};
  for (uint8_t d : duties) {
    setDuty(d);
    delay(10);                                     // let a few periods pass with the new value
    float expected = d * US_PER_CLK;
    float got;
    bool ok;
    if (d == 0) {
      ok = alwaysLow(20);
      got = ok ? 0 : meanHighUs(8);                // a pad stuck high shows up here as a duty above 0
    } else {
      got = meanHighUs(8);
      ok = got >= 0 && fabsf(got - expected) <= TOL_US;
    }
    Serial.printf("%u,%.1f,%.1f,%s\n", d, expected, got, ok ? "PASS" : "FAIL");
    fails += !ok;
  }
  Serial.printf("# %d failure(s)\n", fails);
}

void loop() {}

Zana zinazohitajika:

Bao la Uendelezaji la ESP32Bao la Uendelezaji la ESP32
Kompyuta ya mezaniKompyuta ya mezani
7

Chip nzuri inachapisha nini

Fungua kifuatilizi cha serial kwa 115200 baud. Chip inayofanya kazi huchapisha, kwa kila mstari, wajibu (duty), muda wa juu unaotarajiwa na uliopimwa kwa microsekunde, pamoja na matokeo: # saa ya chip 100000 Hz, PWM kipindi 2560 us duty,expected_us,measured_us,result disabled,0,0,PASS 0,0.0,0.0,PASS 1,10.0,10.0,PASS ... 254,2540.0,2540.0,PASS # hitilafu 0 Kisha angalia pini 8 kwa oscilloscope pia: kipindi kimoja kinapaswa kuwa microsekunde 2,560 kwa saa hii, na kingo safi. Sketch hupima muda; scope huonyesha umbo, na kingo polepole au inayotetemeka kupitia kibadilishaji cha kiwango huonekana tu hapo.

Zana zinazohitajika:

Osilosikopu ya dijitaliOsilosikopu ya dijitali
8

Chipu ambayo haiwashi

Utatuzi wa uwashaji wa awali.

Flow

Loading...
9

Vyanzo na mipaka ya kweli

**Vyanzo**, vilisomwa 29 Septemba 2026: wafer-space/chip-on-board-wire-bonded-pcbs, run-1/README.md (jedwali la pedi linalotaja pedi za IO za VDD na pedi za IO za GND, na maelezo kwamba pinouts hubadilika kati ya mizunguko); wafer-space/gf180mcu-project-template, README.md na Makefile (chaguo-msingi la 5 V na chaguo za maktaba ya 3.3 V); simulesheni za hatua zilizotangulia kwa nyakati za juu zinazotarajiwa. **Mipaka ya kweli.** Bado hakuna chip: mpango huu na mchoro wake haujaendeshwa kwenye silicon. Volteji na mkondo wa usambazaji hazijatajwa hapa kwa sababu nyaraka za mzunguko zilizopo wakati wa kuandika hazizitaji. Athari ya kigeuzi cha kiwango kwenye pull-down inategemea ubao unaotumia.

Vifaa

4

Zana Zinazohitajika

6

CC0 Umma Wote

Mchoro huu umetolewa chini ya CC0. Uko huru kunakili, kubadilisha, kusambaza, na kutumia kazi hii kwa madhumuni yoyote, bila kuomba ruhusa.

Saidia Mtengenezaji kwa kununua bidhaa kupitia Mchoro wao ambapo wanapata Kamisheni ya Mtengenezaji iliyowekwa na Wachuuzi, au unda marudio mapya ya Mchoro huu na uiunganishe kama kiungo katika Mchoro wako kuchangia mapato.

Majadiliano

(0)

Ingia kujiunga na majadiliano

Inapakia maoni...