Хамтын ажиллагаа
УРЛАГ
ГОО САЙХАН БА ЭРҮҮЛ МЭНД
ГАРААР ХИЙСЭН
СОЁЛ БА ТҮҮХ
ҮЗВЭР НААДАМ
БАЙГАЛЬ ОРЧИН
ХООЛ БА УНДАА
УРВУУ ИНЖЕНЕРЧЛЭЛ
ШИНЖЛЭХ УХААН
СПОРТ
ТЕХНОЛОГИ
ӨМСДӨГ ХЭРЭГСЭЛ
Ашиглалт эхлүүлэх: Өөрийн чипээр анхны цаг, ESP32-ээр шалгагдсан
English
Youblob (drawn from the sketch's pin map) · CC0
Ed

Зохиогч

Ed

29. Есдүгээр сар 2026FI
44
0
0
0
0

Ашиглалт эхлүүлэх: Өөрийн чипээр анхны цаг, ESP32-ээр шалгагдсан

Bring-up гэдэг нь инженерүүд шинэ цахиурын анхны цахилгаан асаалтыг нэрлэдэг бөгөөд түүний дараалал ганцаарчилсан аливаа туршилтаас илүү чухал юм. Цахилгаан асаахаас өмнө шалгаж, цаг асаахаас өмнө цахилгаан асаах, юу ч хийхээс өмнө гүйдлийг хязгаарла, учир нь гүйдлийн хязгаар секундын дотор илрүүлэх байсан богино холболт таны цорын ганц чипүүдийг сүйтгэж болзошгүй. Энэ шат бол өмнөх шатуудын PWM бууруулагчийн ашиглалтын төлөвлөгөө бөгөөд 2-р шатны таслах самбар дээр байна. ESP32 нь лабораторийн ажлыг хийдэг: чипийн цагийг үүсгэж, дахин тохируулалтыг барьж, найман падын үүргийг тохируулж, буцаж ирэх PWM-ийг хэмждэг, дараа нь үүрэг бүрт PASS эсвэл FAIL-ийг хэвлэдэг. Тэмдэглэл нь алдааг буруу утастай падын нэрэнд хөрвүүлдэг. Чdecнаар хэлэхэд: одоогоор чип байхгүй. Загвар энэ зураглалд зориулан эмхэтгэгдсэн бөгөөд хүлээгдэж буй тоонууд нь өмнөх шатуудын симуляциас гаралтай; анхны жинхэнэ ажиллуулалт таных байна.
Дээд шат
Нэг үдээс хойш, чип ирсний дараа

Зааварчилгаа

1

Хүлээх ёстой тоонууд, болон алдааг хэрхэн уншихыг

Jupyter дэвтэр ачаалж байна…
2

Таны ажиллуулж эхлүүлж буй чип

Суулгагдсан загвар нь оролт бүр дээр татах (pull-down) резистор тавьдаг тул холбогдоогүй чип идэвхгүй байдалд байна. Энэ төлөвлөгөөгийн туршиж буй гол зарчим нь энэ юм.
3

Перед подачей питания

Ничего не подключая, рассмотрите чип-на-плате, установленный на breakout-плате, через лупу: посадка ровная, без перемычки припоя, ничего не болтается. Затем мультиметром измерьте сопротивление между одной контактной площадкой VDD IO и одной контактной площадкой GND IO на breakout-плате, в обеих полярностях, и запишите оба значения. Показание, близкое к нулю, означает короткое замыкание: остановитесь. В таблице контактов для run-1 указано, какие площадки breakout-платы являются VDD IO и GND IO; используйте таблицу для вашего запуска, поскольку wafer.space сообщает, что распиновка меняется между запусками.

Энэ алхмын материал:

Захиалгат ASIC чипЗахиалгат ASIC чип1 ширхэг
Хэвлэмэл хэлхээний хавтанХэвлэмэл хэлхээний хавтан1 ширхэг

Шаардлагатай багаж:

МультиметрМультиметр
4

Цахилгаан, гүйдлийн хязгаар бага байхад

Холбохоосоо өмнө стендийн тэжээлийг таны чипийн тэжээлийн хүчдэлд тохируулна уу. Тэр хүчдэл нь чипээ бүтээхэд ашигласан сангуудаас хамаарна: загварын анхдагч сангууд нь 5 В, мөн 3.3 В сангаар бүтээх боломжтой. Яг утгыг ажлын баримт бичгээс авна уу; run-1 pad хүснэгт нь тэжээлийн падуудыг нэрлэдэг боловч тэдгээрийн хүчдэлийг заадаггүй. Гүйдлийн хязгаарыг тэжээл тогтворжих хамгийн бага тохиргоонд тохируулж, VDD IO болон GND IO-г холбоод, ESP32-г холбохгүйгээр асаана уу. Цаг дохиогүй, бүх оролт доош татагдсан үед чип хөдөлгөөнгүй байх ёстой. Гүйдлээ тэмдэглэнэ үү. Хэрэв тэжээл шууд гүйдлийн хязгаарлалтад орвол унтраана уу: ямар нэг зүй бус холбоо (short) байна. Дараа нь цаг ажиллаж байгаа reset-ийн үед болон загвар ажиллуулж байхад гүйдлийг дахин хоёр удаа тэмдэглэнэ үү. Эдгээр гурван тоо нь таны чипийн өөрийн гарын үсэг; өнөөдрийнхөөс мэдэгдэхүйц их гүйдэл татдаг самбар нь гэмтэлтэй гэсэн үг.

Шаардлагатай багаж:

Ширээний тэжээлийн эх үүсвэрШирээний тэжээлийн эх үүсвэр
МультиметрМультиметр
5

Подключите ESP32

Двенадцать проводов, как на рисунке и в заголовке схемы: GPIO 27 к контакту тактового сигнала, 26 к rst_n, 32 к входу 0 (enable), 13, 14, 18, 19, 21, 22, 23 и 25 к двунаправленным контактам от 0 до 7, а двунаправленный контакт 8 обратно к GPIO 34, плюс общий провод земли. GPIO 34 — это контакт только для входа на ESP32, поэтому он никогда не может конфликтовать с выходом микросхемы.

Энэ алхмын материал:

Логик түвшин хувиргагчЛогик түвшин хувиргагч3 ширхэг
Холбогч утасХолбогч утас1 ширхэг

Шаардлагатай багаж:

Макет самбарМакет самбар
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() {}

Шаардлагатай багаж:

ESP32 хөгжүүлэлтийн самбарESP32 хөгжүүлэлтийн самбар
Ширээний компьютерШирээний компьютер
7

Сайн чип юу хэвлэдэг

115200 baud-д сериал монитор нээнэ үү. Ажиллаж буй чип мөр бүрт дараахийг хэвлэнэ: duty, хүлээгдсэн болон хэмжсэн өндөр хугацаа микросекундээр, мөн үр дүн: # chip clock 100000 Hz, PWM period 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 # 0 failure(s) Dараа нь энэ клоктой үед нэг мөчлөг 2,560 микросекунд байх ёстой, ирмэг нь цэвэрхэн байх ёстойг осциллографоор pad 8 дээр мөн шалгаарай. Скетч хугацааг хэмждэг; осциллограф хэлбэрийг харуулдаг, мөн түвшин хөрвүүлэгчээр дамжсан удаан эсвэл чичирсэн ирмэгийг зөвхөн тэнд харах боломжтой.

Шаардлагатай багаж:

Дижитал осциллографДижитал осциллограф
8

Ажиллахгүй чип

Ажиллуулах алдааг шалгах (bring-up troubleshooting).

Flow

Loading...
9

Эх сурвалж ба шударга хязгаарлалт

**Эх сурвалж**, 2026 оны 9-р сарын 29-нд уншсан: wafer-space/chip-on-board-wire-bonded-pcbs, run-1/README.md (VDD IO болон GND IO падуудыг нэрлэсэн падын хүснэгт, мөн зүү байрлал ажил бүрт өөрчлөгддөг тэмдэглэл); wafer-space/gf180mcu-project-template, README.md болон Makefile (5 V анхдагч болон 3.3 V сангийн сонголтууд); хүлээгдэж буй өндөр хугацааны төлөө өмнөх шатуудын симуляцууд. **Шударга хязгаарлалт.** Одоогоор чип байхгүй: энэ төлөвлөгөө болон схем нь кремний дээр ажиллуулагдаагүй байна. Нийлүүлэлтийн хүчдэл болон гүйдлийг энд заагаагүй, учир нь бичиж буй үед байгаа ажлын баримт бичигт тэдгээрийг заагаагүй байна. Түвшин хөрвүүлэгчийн доош татагчдад үзүүлэх нөлөө нь таны ашигладаг самбараас хамаарна.

Материал

4

Шаардлагатай багаж

6

CC0 Нийтийн домэйн

Энэ загвар CC0 дор гаргагдсан. Та зөвшөөрөл авахгүйгээр хуулах, өөрчлөх, түгээх, ашиглах боломжтой.

Загвараар дамжуулан бүтээгдэхүүн худалдаж авч Бүтээгчийг дэмжээрэй Бүтээгчийн шимтгэл Борлуулагчаар тогтоосон, эсвэл энэ загварын шинэ хувилбар үүсгэж орлогоо хуваахын тулд өөрийн загварт холбоос болгон оруулна уу.

Хэлэлцүүлэг

(0)

Нэвтрэх хэлэлцүүлэгт нэгдэхийн тулд

Сэтгэгдлүүдийг ачаалж байна...