PWM signal Simulink on serial port

13 views (last 30 days)
Jan De Vries
Jan De Vries on 30 Jul 2011
I need to connect my controller designed in Simulink to a brushless motor controller, which needs a PWM signal. This controller has a PWM connection cable (3 wires)
Is it possible to connect this controller to my PC (using serial port) and let Simulink send control signals to this motor controller?
  3 Comments
Jan De Vries
Jan De Vries on 2 Aug 2011
It runs at 2400BPS, as far as I know
Arnaud Miege
Arnaud Miege on 2 Aug 2011
Normally a PWM signal would be in the region of 100's of kHz, if not MHz.

Sign in to comment.

Answers (5)

Walter Roberson
Walter Roberson on 2 Aug 2011
Simulink is not supported on any system that is old enough to allow direct pin-level control of a system serial port. Unless, that is, you are talking about generating code for a controller: some of those might be able to handle it.

Arnaud Miege
Arnaud Miege on 2 Aug 2011
The Instrument Control Toolbox allows you to send data on the serial port with the Serial Send block. As I said in my comments, I am not sure this will be nearly fast enough for a PWM signal.
Arnaud
  3 Comments
Arnaud Miege
Arnaud Miege on 2 Aug 2011
Agreed. Jan, you need a proper PWM output signal, which means you need something like Real-Time Windows Target or xPC Target, which the appropriate I/O card.
Jan De Vries
Jan De Vries on 2 Aug 2011
Ok, so it's not possible to create a PWM signal using my serial card.
Below I added some more info, can I generate the signal I described using Matlab and a serial/USB port?

Sign in to comment.


Jan De Vries
Jan De Vries on 2 Aug 2011
Ok thanks for all your replies!
I want to control a brushless thruster. Because this is a brushless device, it has a special brushless controller connected to it, to convert my control signal to a brushless motor signal.
The brushless controller has a PWM input cable, which can be connected (according to the manual) to a "Parallax Servo Controller". This device can either be connected via USB or serial to a PC. It needs a TTL signal; that is some binary code right? Can I use matlab to send code to this device?
  4 Comments
Jan De Vries
Jan De Vries on 2 Aug 2011
Thanks, Arnaud! I've been asking around a lot lately - and this is by far the most usefull information I received as it made a few concepts more clear to me!
Jan De Vries
Jan De Vries on 2 Aug 2011
And also thanks Walter ofcourse!

Sign in to comment.


Jan De Vries
Jan De Vries on 3 Aug 2011
I found some more info about the brushless motor controller (ESC);
The ESC generally accepts a nominal 50 Hz PWM servo input signal whose pulse width varies from 1 ms to 2 ms. When supplied with a 1 ms width pulse at 50 Hz, the ESC responds by turning off the DC motor attached to its output. A 1.5 ms pulse-width input signal results in a 50% duty cycle output signal that drives the motor at approximately half-speed. When presented with 2.0 ms input signal, the motor runs at full speed due to the 100% duty cycle (on constantly) output.
Can I produce these signals using matlab's serial communication (like fwrite() etc)?
  1 Comment
Walter Roberson
Walter Roberson on 3 Aug 2011
No; if it can be done directly through MATLAB then it would have to be through analogio(). The serial devices supported by MATLAB's serial() object are intended to be UARTs or emulations thereof, with byte-level output framed with start and stop bits.
The Parallax Servo Controller takes commands about positioning and emits appropriate pulses: that is the way to go in your situation.

Sign in to comment.


Jan De Vries
Jan De Vries on 3 Aug 2011
Ok right now I have the following code to send to my PSC:
ser = serial('COM3')
set(ser,'BaudRate',2400, 'Terminator', 'CR')
fopen(ser)
fwrite(ser,[33 83 67 86 69 82 63 13], 'uint8', 'sync')
out = fscanf(ser)
fclose(ser)
delete(ser)
clear ser
I keep getting a warning with the fscanf(ser) command:
Warning: A timeout occurred before the Terminator was reached.
ans =
1.0
Is there something wrong? I used the fwrite command to send the ascii code for the command "VER?", with $SC (33 83 67) being the preamble and CR (13) being the carriage return (so the command line is $SCVER?CR)
  1 Comment
Walter Roberson
Walter Roberson on 3 Aug 2011
Arnaud mentioned using !SC as the preamble; that is the same preamble that I found documented.
You should, by the way, be able to use
fprintf(ser, '%s', '!SCVER\n')
which would be more readable. Or
fwrite(ser, sprintf('!SCVER\n'), 'uint8', 'sync')

Sign in to comment.

Communities

More Answers in the  Power Electronics Control

Community Treasure Hunt

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

Start Hunting!