フィルターのクリア

Plot PWM signal by means of a lookup table/matrix

15 ビュー (過去 30 日間)
Siskia Yarzagaray
Siskia Yarzagaray 2018 年 5 月 6 日
回答済み: Gael Goron 2018 年 5 月 15 日
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 件)

コミュニティ

カテゴリ

Help Center および File ExchangeArduino Hardware についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by