Effacer les filtres
Effacer les filtres

Plot PWM signal by means of a lookup table/matrix

15 vues (au cours des 30 derniers jours)
Siskia Yarzagaray
Siskia Yarzagaray le 6 Mai 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

Réponse acceptée

Gael Goron
Gael Goron le 15 Mai 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')

Plus de réponses (0)

Communautés

Plus de réponses dans  Power Electronics Control

Catégories

En savoir plus sur Arduino Hardware dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by