PWM signal Simulink on serial port

7 visualizaciones (últimos 30 días)
Jan De Vries
Jan De Vries el 30 de Jul. de 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 comentarios
Jan De Vries
Jan De Vries el 2 de Ag. de 2011
It runs at 2400BPS, as far as I know
Arnaud Miege
Arnaud Miege el 2 de Ag. de 2011
Normally a PWM signal would be in the region of 100's of kHz, if not MHz.

Iniciar sesión para comentar.

Respuestas (5)

Walter Roberson
Walter Roberson el 2 de Ag. de 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 el 2 de Ag. de 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 comentarios
Arnaud Miege
Arnaud Miege el 2 de Ag. de 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 el 2 de Ag. de 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?

Iniciar sesión para comentar.


Jan De Vries
Jan De Vries el 2 de Ag. de 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 comentarios
Jan De Vries
Jan De Vries el 2 de Ag. de 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 el 2 de Ag. de 2011
And also thanks Walter ofcourse!

Iniciar sesión para comentar.


Jan De Vries
Jan De Vries el 3 de Ag. de 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 comentario
Walter Roberson
Walter Roberson el 3 de Ag. de 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.

Iniciar sesión para comentar.


Jan De Vries
Jan De Vries el 3 de Ag. de 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 comentario
Walter Roberson
Walter Roberson el 3 de Ag. de 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')

Iniciar sesión para comentar.

Comunidades de usuarios

Más respuestas en  Power Electronics Control

Community Treasure Hunt

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

Start Hunting!

Translated by