Plot PWM signal by means of a lookup table/matrix
11 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
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
0 comentarios
Respuesta aceptada
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')
0 comentarios
Más respuestas (0)
Comunidades de usuarios
Más respuestas en Power Electronics Control
Ver también
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!