topics checkpoints 1,2,3 memory usage build/runtime

43
EECS192 Lecture 3 Feb. 2, 2021 Topics Checkpoints 1,2,3 Memory Usage build/runtime Updated Skeleton code tour Peripheral interface: A/D, pulse count (intro) Sensor: line camera Notes: 2/9 project proposal – upload to bcourses by Tues 5 pm Survey for Cory Courtyard 1

Upload: others

Post on 04-Jan-2022

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Topics Checkpoints 1,2,3 Memory Usage build/runtime

EECS192 Lecture 3

Feb. 2, 2021

Topics

• Checkpoints 1,2,3

• Memory Usage build/runtime

• Updated Skeleton code tour

• Peripheral interface: A/D, pulse count (intro)

• Sensor: line camera

Notes:

• 2/9 project proposal – upload to bcourses by Tues 5 pm

• Survey for Cory Courtyard

1

Page 2: Topics Checkpoints 1,2,3 Memory Usage build/runtime

High resolution timing using built-in 64 bit counteruint64_t task_counter_value1, task_counter_value2;

timer_get_counter_value(TIMER_GROUP_0, TIMER_0,

&task_counter_value1);

/* code to be timed here */

timer_get_counter_value(TIMER_GROUP_0, TIMER_0,

&task_counter_value2);

Good/Badnews:

snprintf(log, sizeof(log), "Hello World \n"); ➔ ~ 20 us

snprintf(log, sizeof(log), "uint64_t %llu\n", task_counter_value); ➔ 81 us

but

snprintf(log, sizeof(log), "starttime %8.3f usec \n", 1e6*starttime); ➔ 633 us

Maybe send double instead of text?

CP1- Measuring Timing from ESP32

2

Page 3: Topics Checkpoints 1,2,3 Memory Usage build/runtime

Write code which performs the following sequence of functions:

• C2.1: Start wheels turning, and ramp up to full speed in 5 seconds and down

to zero speed in another 5 seconds.

• C2.2: Set steering angle approximately half full-left and hold for 5 seconds.

(For example, if full steering range is +- 20 degrees, set steering angle to

+10 degrees.)

• C2.3: Set steering angle straight and hold for 5 seconds.

• C2.4: Set steering angle approximately half full-right, and hold for 5

seconds.

• C2.5: Set steering angle back to approximately straight.

• C2.6: Show steering changing and wheels turning at the same time

• C2.7: Report Data RAM and Instruction RAM usage. How much of each is

left? [pio run –v in terminal window]

• C2.8: All members must fill out the checkpoint survey before the checkoff

close. Completion is individually graded

CP2- PWM for driving steering servo and ESC

3

Page 4: Topics Checkpoints 1,2,3 Memory Usage build/runtime

ESC startup- generating timing options

4

3 seconds

1. vTaskDelay(pdMS_TO_TICKS(3000)); [1 ms resolution]

or

2. Busy wait (may trigger watch dog for long delays)

while(task_counter_value < end_value)

{ timer_get_counter_value(TIMER_GROUP_0, TIMER_0, &task_counter_value); }

or

3. Interrupt alarm [usec resolution] (see timer-group-example.c in SkeletonHuzzah32)

/* if timer interval > CONFIG_ESP_TASK_WDT_TIMEOUT_S, will get watchdog timeout*/

timer_set_alarm();

docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/timer.html

Page 5: Topics Checkpoints 1,2,3 Memory Usage build/runtime

(Intended to be easy since project proposal due Tues 2/9)

The car should be upside down, or lifted off the ground so it does not move

CAUTION: setting PWM to 1.0 ms or 2.0 ms can drive servo to the end of its range and

cause it to burn out.

• C3.1 From the remote client keyboard, send a speed command for the drive motor.

Pick a range such as 0-100, and show that you can specify a range of values. The

motor should remain turning until the next command.

• C3.2: Find the minimum ESC PWM value which causes the wheels to turn.

• C3.3: With motors turning, send an ‘‘Emergency Stop’’ command to the car (the

motor should be turned off or braked, if available).

• C3.4: From the remote client , send a command to set the steering angle.

• C3.5: Find the range of steering angles for your car. (These values should be used

for range checking in your code for the rest of the semester.)

• C3.6: Show that motor speed and steering can be set independently from the remote

client keyboard.

• C3.7: Report Data RAM and Instruction RAM usage. How much of each is left?

From VS terminal > pio run –v

• C3.8: All members must fill out the checkpoint survey before the checkoff close.

Completion is individually graded.

CP3- remote control with UDP

5

Page 6: Topics Checkpoints 1,2,3 Memory Usage build/runtime

EECS192 Lecture 3

Feb. 2, 2021

Topics

• Checkpoints 1,2,3

• Memory Usage build/runtime

• Updated Skeleton code tour

• Peripheral interface: A/D, pulse count (intro)

• Sensor: line camera

Notes:

• 2/9 project proposal – upload to bcourses by Tues 5 pm

• Survey for Cory Courtyard

6

Page 7: Topics Checkpoints 1,2,3 Memory Usage build/runtime

Recap: Intro to stack, heap, malloc, free, etc

7

From Wikipedia:https://en.wikipedia.org/wiki/Data_segment

Memory model

e.g. local

variables in

functions

IRAM

DRAM

DRAM

DRAM

Page 8: Topics Checkpoints 1,2,3 Memory Usage build/runtime

Memory use at compile time

From VS terminal > pio run –v

section size addr.iram0.vectors 1027 1074266112

.iram0.text 88424 1074267140

.iram0.text_end 0 1074355564

.dram0.data 19912 1073414144

.dram0.bss 24560 1073434056

.flash.rodata 103292 1061158944

.flash.text 486215 1074593824

.debug_frame 91744 0

.debug_info 3444763 0

.debug_abbrev 287554 0

.debug_loc 696445 0

.debug_aranges 36008 0

.debug_ranges 40656 0

.debug_line 1623178 0

.debug_str 283103 0

Total 7227598

IRAM

DRAM

8

Page 9: Topics Checkpoints 1,2,3 Memory Usage build/runtime

Heap memory (in Data RAM)- Before tasks

heap_caps_print_heap_info(MALLOC_CAP_8BIT);

Heap summary for capabilities 0x00000006:

At 0x3ffae6e0 len 6432 free 0 allocated 6300 min_free 0

largest_free_block 0 alloc_blocks 25 free_blocks 0 total_blocks 25

At 0x3ffbada8 len 152152 free 136724 allocated 15284 min_free 135908

largest_free_block 135908 alloc_blocks 26 free_blocks 2 total_blocks 28

At 0x3ffe0440 len 15072 free 15036 allocated 0 min_free 15036

largest_free_block 15036 alloc_blocks 0 free_blocks 1 total_blocks 1

At 0x3ffe4350 len 113840 free 113804 allocated 0 min_free 113804

largest_free_block 113804 alloc_blocks 0 free_blocks 1 total_blocks 1

Totals:

free 265564 allocated 21584 min_free 264748 largest_free_block 135908

Used for stack, local variables, global variables

malloc() and free()

9

Page 10: Topics Checkpoints 1,2,3 Memory Usage build/runtime

Heap summary for capabilities 0x00000006:

At 0x3ffae6e0 len 6432 free 0 allocated 6300 min_free 0

largest_free_block 0 alloc_blocks 25 free_blocks 0 total_blocks 25

At 0x3ffbada8 len 152152 free 75752 allocated 75616 min_free 75368

largest_free_block 75412 alloc_blocks 184 free_blocks 4 total_blocks 188

At 0x3ffe0440 len 15072 free 15036 allocated 0 min_free 15036

largest_free_block 15036 alloc_blocks 0 free_blocks 1 total_blocks 1

At 0x3ffe4350 len 113840 free 113804 allocated 0 min_free 113804

largest_free_block 113804 alloc_blocks 0 free_blocks 1 total_blocks 1

Totals:

free 204592 allocated 81916 min_free 204208 largest_free_block 113804

70K allocated for tasks 10

Heap memory (in Data RAM)- after tasks

Double is how many bytes? (8)

double track_data[20000] would overflow

Page 11: Topics Checkpoints 1,2,3 Memory Usage build/runtime

EECS192 Lecture 3

Feb. 2, 2021

Topics

• Checkpoints 1,2,3

• Memory Usage build/runtime

• Updated Skeleton code tour

• Peripheral interface: A/D, pulse count (intro)

• Sensor: line camera

Notes:

• 2/9 project proposal – upload to bcourses by Tues 5 pm

• Survey for Cory Courtyard

11

Page 12: Topics Checkpoints 1,2,3 Memory Usage build/runtime

SkeletonHuzzah32 Branch UDPCommd SW Block Diagram

heartbeat

wifi_log_task

log_queue

uart_log_task

LED

control_task

user_taskKeyboard input

timer_evt_task

UART

Note conventions- data flow left to right

sendto

UDP

socket

main() start tasks and suspend

Possible starting point for proposal. However,

missing inputs, outputs, Steering, velocity, etc

recvfrom

UDP

socket

cmd_queue

To be added

12

Page 13: Topics Checkpoints 1,2,3 Memory Usage build/runtime

log-input-client-udp.py

msg = input('Enter string "command value": ')

temp= msg.split() # get separate command and value elements

msg_bytes = struct.pack('8si',str.encode(temp[0]),int(temp[1]))

# use structure so there is no need for risky sscanf on Huzzah32

sock.sendto(msg_bytes, addr) # send cmd + value over UDP

Example input: SPEED 120

Command is up to 8 characters, value is a 32 bit int

If python struct.pack is changed, need to also change skeleton.h

struct cmd_struct_def {

char cmd[8];

int value;};13

Page 14: Topics Checkpoints 1,2,3 Memory Usage build/runtime

wifi-log-server.c

size_read = recvfrom(sock,&cmd_struct,sizeof(cmd_struct),

0, (struct sockaddr *)&source_addr, &socklen);

if (size_read <= 0)

{ printf("socket read error\n"); }

printf("command: %s value = %d \n",

cmd_struct.cmd, cmd_struct.value);

xQueueOverwrite(cmd_queue, &cmd_struct);

// put command on queue, over writing any previous cmd

Example input: SPEED 120

cmd_struct.cmd = “SPEED”, cmd_struct.value = 120

struct cmd_struct_def {

char cmd[8];

int value;};

14

Page 15: Topics Checkpoints 1,2,3 Memory Usage build/runtime

usertask.c

// check for command waiting in queue

cmdready = uxQueueMessagesWaiting(cmd_queue);

if (cmdready >= 1) // get item from cmd queue

{ if(xQueueReceive(cmd_queue, &cmd_struct,

portMAX_DELAY) != pdPASS)

{ printf("error reading from cmd_queue\n"); }

udp_cmd(cmd_struct.cmd, cmd_struct.value);

}

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

// handle commands from UDP

void udp_cmd(char command[], int value)

{ if (strcmp(command,"TIME") == 0)

get_time();

Add other commands here, use string compare to parse 15

Page 16: Topics Checkpoints 1,2,3 Memory Usage build/runtime

EECS192 Lecture 3

Feb. 2, 2021

Topics

• Checkpoints 1,2,3

• Memory Usage build/runtime

• Updated Skeleton code tour

• Peripheral interface: A/D, pulse count (intro)

• Sensor: line camera

Notes:

• 2/9 project proposal – upload to bcourses by Tues 5 pm

• Survey for Cory Courtyard

16

Page 17: Topics Checkpoints 1,2,3 Memory Usage build/runtime

ESP32 Hardware block diagram-peripherals

+GPIO

+ (Ch 18 T.R.M. Pulse Counter)

17

Page 18: Topics Checkpoints 1,2,3 Memory Usage build/runtime

Sensors

https://www.sparkfun.com/tutorials/283

Line camera: 128 pixels, 200 Hz 18

Encoder velocity sensor

Other options? Gyro sensor?

Page 19: Topics Checkpoints 1,2,3 Memory Usage build/runtime

Velocity sensor mounting (preview- week 4)

19

https://www.sinotech.com/wp-content/uploads/quadrature-encoder.gif

3.3 V DC A

B

100 us

response time? Analog or pulse count input?

Page 20: Topics Checkpoints 1,2,3 Memory Usage build/runtime

ADC Converter (Ch. 30)

adc1_config_width(ADC_WIDTH_BIT_12);

adc1_config_channel_atten(ADC1_CHANNEL_0,ADC_ATTEN_DB_0);

int val = adc1_get_raw(ADC1_CHANNEL_0);

https://github.com/espressif/esp-idf/tree/release/v4.2/examples/peripherals/adc

Claim: 2 M samples per second (Msps) = 0.5 us 20

Page 21: Topics Checkpoints 1,2,3 Memory Usage build/runtime

Pulse Counting (Ch 18)github.com/espressif/esp-idf/tree/release/v4.2/examples/peripherals/pcnt

21

Page 22: Topics Checkpoints 1,2,3 Memory Usage build/runtime

Huzzah32 Pinouts

22

Page 23: Topics Checkpoints 1,2,3 Memory Usage build/runtime

ESP32-WROOM Module Connections

23

P=power

I= input only

I/O = either

Huzzah32

JP1-8

JP1-9

JP1-10

Vref?

JP3-9

JP3-7

Page 24: Topics Checkpoints 1,2,3 Memory Usage build/runtime

ESP32-WROOM Module Connections

24

P=power

I= input only

I/O = either

Huzzah32

JP1-11

JP1-12

JP3-6

JP3-10

JP3-5

JP3-4

SPI

Flash

Page 25: Topics Checkpoints 1,2,3 Memory Usage build/runtime

ESP32-WROOM Module Connections

25

P=power

I= input only

I/O = either

Huzzah32

JP3-8

RTS?

DTR?

JP1-7

JP1-3

JP1-2

JP1-6

JP1-5

JP1-4

JP1-1

JP3-11

JP3-12

UART

Page 26: Topics Checkpoints 1,2,3 Memory Usage build/runtime

EECS192 Lecture 3

Feb. 2, 2021

Topics

• Checkpoints 1,2,3

• Memory Usage build/runtime

• Updated Skeleton code tour

• Peripheral interface: A/D, pulse count (intro)

• Sensor: line camera

Notes:

• 2/9 project proposal – upload to bcourses by Tues 5 pm

• Survey for Cory Courtyard

26

Page 27: Topics Checkpoints 1,2,3 Memory Usage build/runtime

Line Camera OutputExample track- Cory 3rd floor

Start line finish linecrossingSteps

27

Page 28: Topics Checkpoints 1,2,3 Memory Usage build/runtime

TSL 1401 line sensor

28

SI: serial input. SI defines the start of the data-out sequence.

AO: analog output

CLK: clock

Page 29: Topics Checkpoints 1,2,3 Memory Usage build/runtime

Line sensor 29

From PWM?

From PWM or

GPIO?

TSL 1401 line sensor

Analog output to A/D

Start integration

Page 30: Topics Checkpoints 1,2,3 Memory Usage build/runtime

TSL 1401 line sensor- option exposure control

Line sensor

SI

CLK

AO

Exposure time (>25 us)

129 clocks

Clock only

no A/D read

A/D read

~12 us

30

Page 31: Topics Checkpoints 1,2,3 Memory Usage build/runtime

Automatic Gain Control

• Choose exposure time based on average illumination

• Keep frame rate constant e.g. read sensor twice 1+4 ➔ 4 +1 ms

• (Constant time is important for control- will see later)31

Page 32: Topics Checkpoints 1,2,3 Memory Usage build/runtime

Possible algorithms for line detectione.g. prototype with scipy.signal.filter. Many options. Here are 3 suggestions:

• Subtraction- to find left and right edge of line (ok if not noisy, somewhat lighting invariant)

• Difference of Gaussians (idea is to smooth then differentiate)

• Correlation (best match position for known features)

– scipy.signal.correlate

32

Try out algorithms in HW1

Page 33: Topics Checkpoints 1,2,3 Memory Usage build/runtime

TSL 1401 line sensor 8 bit

Frame 0

Frame 0

Frame 1

Frame 2 Frame 2-Frame 0

Frame 1-Frame 0

Alternative #1 frame subtraction

Notes: peak shows edge of track. Noisy, only 1 pixel resolution.33

Page 34: Topics Checkpoints 1,2,3 Memory Usage build/runtime

34/19

https://image.slidesharecdn.com/cbirfeatures-

150705141111-lva1-app6892/95/cbir-features-47-

638.jpg?cb=1436105787

Alternative #2 Difference of GaussiansLaplacian of Gaussian

Convolve with Difference of Gaussians kernel (approx. to LoG)

Note: zero crossing is edge location

Page 35: Topics Checkpoints 1,2,3 Memory Usage build/runtime

Alternative #3 Correlation

35

arg min || I(y) – f(y – Dy) ||2Dy

y

I(y)

0

f(y)

Notes: normalize, find by least squares or search. Can use Dy(n-1) to initialize

Page 36: Topics Checkpoints 1,2,3 Memory Usage build/runtime

Summary

36

Memory Usage build/runtime

Updated Skeleton code tour

Peripheral interface: A/D, pulse count (intro)

Sensor: line sensor

Keep in mind limited time and memory

Page 37: Topics Checkpoints 1,2,3 Memory Usage build/runtime

Extra Slides

37

Page 38: Topics Checkpoints 1,2,3 Memory Usage build/runtime

DC Motor Physical ModelMotor model

38

Page 39: Topics Checkpoints 1,2,3 Memory Usage build/runtime

Motor Electrical Model (neglect inductor)

Continued on board

Also- see motor worksheet……

Motor Electrical Model

Back EMF

Motor electromechanical behavior

Vm

Note: missing e-stop!

Motor model

+

VDS

-VGS

39

Page 40: Topics Checkpoints 1,2,3 Memory Usage build/runtime

Motor model

(for answer

see sp99 final solution)

Let peak speed = 5 m/sec

Accel = 5 m/s2

ke = 1 v/(m/sec)

On board

40

Page 41: Topics Checkpoints 1,2,3 Memory Usage build/runtime

PWM for Main Motor control

im

<im > = (T/To) imax

Is imax constant?

PWM Issues for Motor

41

Page 42: Topics Checkpoints 1,2,3 Memory Usage build/runtime

Motor Electrical Model

Also- see motor worksheet……

Motor Electrical Model

Back EMF

Motor electromechanical behavior

+

VDS

-VGS

+

Vm

-

+

Ve

-

Rm

im

im = VBAT – ke qm

Rm

. +

Vm

-

+VBAT

Conclusion:

<im >=?

PWM and Motor Drive

Motor Resistance?

Peak current?

42

Page 43: Topics Checkpoints 1,2,3 Memory Usage build/runtime

Motor Model

On board….

http://inst.eecs.berkeley.edu/~ee192/sp18/files/NiseAppendixI.pdf

http://inst.eecs.berkeley.edu/~ee192/sp13/pdf/motor_modeling.pdf

43