Plot PWM signal by means of a lookup table/matrix

11 visualizaciones (últimos 30 días)
Siskia Yarzagaray
Siskia Yarzagaray el 6 de Mayo de 2018
Respondida: Gael Goron el 15 de Mayo de 2018
I would like to plot a PWN signal with a variable duty cycle using the table below which is commonly used in Arduino. However, when I plot it in MATLAB it gives me a sin wave. Is there a way that I can take these values and plot a PWM signal with a maximum amplitude of 1 in MATLAB?.
if true
clear;
clc;
A = [128, 131, 134, 137, 140, 143, 146, 149, 152, 156, 159, 162, 165, 168, 171, 174, 176, 179, 182, 185, 188, 191, 193, 196, 199, 201, 204, 206, 209, 211, 213, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 237, 239, 240, 242, 243, 245, 246, 247, 248, 249, 250, 251, 252, 252, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 254, 253, 252, 252, 251, 250, 249, 248, 247, 246, 245, 243, 242, 240, 239, 237, 236, 234, 232, 230, 228, 226, 224, 222, 220, 218, 216, 213, 211, 209, 206, 204, 201, 199, 196, 193, 191, 188, 185, 182, 179, 176, 174, 171, 168, 165, 162, 159, 156, 152, 149, 146, 143, 140, 137, 134, 131, 127, 124, 121, 118, 115, 112, 109, 106, 103, 99, 96, 93, 90, 87, 84, 81, 79, 76, 73, 70, 67, 64, 62, 59, 56, 54, 51, 49, 46, 44, 42, 39, 37, 35, 33, 31, 29, 27, 25, 23, 21, 19, 18, 16, 15, 13, 12, 10, 9, 8, 7, 6, 5, 4, 3, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 15, 16, 18, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 42, 44, 46, 49, 51, 54, 56, 59, 62, 64, 67, 70, 73, 76, 79, 81, 84, 87, 90, 93, 96, 99, 103, 106, 109, 112, 115, 118, 121, 124];
plot (A)
end

Respuesta aceptada

Gael Goron
Gael Goron el 15 de Mayo de 2018
A sine wave type of curve is the expected output of plot(A) in this case. If you are not sure why this is the case, please refer to the documentation about the plot function: plot documentation
In order to plot the PWM you will have to create this signal based on each entry of your table A. First entry 128 means 128/255 = 50.2% duty cycle.
With Arduino's PWM frequency at about 500Hz, one cycle would be 2 miliseconds. Therefore the PWMsignal should start with ones for 50.2% of 2 ms then zeros for the rest of the cycle.
One possibility based on the A table that you gave would be something along those lines. Feel free to adapt it to your needs.
dutyCycle = A/255;
PWMsignal = [];
for entry = 1:numel(A)
temp = zeros(1,100);
temp(1:floor(100*dutyCycle(entry)))=1;
PWMsignal = [PWMsignal, temp];
end
time = 0:2/100:numel(A)*2-2/100; % each cycle length is 2 ms
plot(time,PWMsignal)
xlabel('time (ms)')
ylabel('PWN amplitude')

Más respuestas (0)

Comunidades de usuarios

Más respuestas en  Power Electronics Control

Categorías

Más información sobre Arduino Hardware en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by