Plot PWM signal by means of a lookup table/matrix

11 次查看(过去 30 天)
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

采纳的回答

Gael Goron
Gael Goron 2018-5-15
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 个)

社区

更多回答在  Power Electronics Control

类别

Help CenterFile Exchange 中查找有关 Arduino Hardware 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by