Tagged: Raspberry pi 3, sabertooth
This topic has 7 replies, 3 voices, and was last updated 7 years, 5 months ago by SuperDroid.
- AuthorPosts
- April 10, 2017 at 6:32 am #4118JerryParticipant
Hello , is possible to control DC motors with Sabertooth 2X12 connected to PWM pins ( rspi 3 B => GPIO16 , GPIO 19) ?
GPIO16 will be connected to S1
GPIO19 will be connected to S2Sabertooth DIP Settings 1 OFF 2 ON 3 ON 4 OFF 5 ON 6 OFF
Am I right ? Coding structure given below, I don’t know how to control, what’s wrong with my program ?
#define Motr1 4 // GPIO 16 #define Motr2 12 // GPIO 19 pinMode(Motr1, OUTPUT); pinMode(Motr2, OUTPUT); softPwmCreate(Motr1,0,100); // PWM Initialization softPwmCreate(Motr2,0,100); void RobotMotion::Forward_Manual_Motion() { softPwmWrite(Motr2, 13); softPwmWrite(Motr1, 13); } void RobotMotion::Stop_motion() { softPwmWrite(Motr1,14); softPwmWrite(Motr2,14); delay(1000); } void RobotMotion::Backward_motion() { softPwmWrite(Motr1, 16); softPwmWrite(Motr2, 16); }
How to control direction ? I have tried with this programming but motor not stopping properly. Kindly help me to solve the problem.
Thanks
April 10, 2017 at 8:55 am #4120SuperDroidKeymasterHello Jerry. This is possible. If switch 4 on the Sabertooth is in the ON position, it will enable mixing mode. S1 will act as the drive forward/backwards signal input and S2 will be the turn left/right signal input. With switch 4 OFF, you will have to compute the mixing in order to drive/turn in different directions.
Since you have the Sabertooth in Microcontroller mode (switch 6 OFF), the timeout feature is disabled. This will have to be implemented on your end. Without a timeout, the motor controller will act on the last valid command until a new one is received.
All of this information can be found within the 2×12 datasheet.
April 11, 2017 at 10:16 am #4121JerryParticipantCan you please tell me exact DIP switch setting ? Whether my program correct or not ? If any problem in my code, can you please tell me what I want to change ?
April 11, 2017 at 11:54 am #4122SuperDroidKeymasterIf you want to control with RC mode, set 1 off, 2 on, 3 on, 4 off, 5 on, 6 off. Note that to use RC mode, you will need to make sure your PWM signal matches the characteristics of an RC signal: https://en.wikipedia.org/wiki/Servo_control.
Pulse widths must range from about 1 to 2 ms. 1 ms as the smallest width (not 0), 2 ms as the largest width. 1.5 ms pulse width means stop, 1.5-2.0 means spin forward, 1.0-1.5 means spin backward. Frequency should be in the neighborhood of 50 Hz.
If you can’t get the rspi to output PWM with these characteristics then you need to use a different control method. One option is to set the Sabertooth to analog input mode and use an RC low-pass filter circuit to convert your PWM signal into an analog voltage. Another (better) option is to just run the Sabertooth in serial mode (dip switches 1 and 2 down). This gives you the advantages of noiseless control inputs, better failsafes, and a true zero command.
EDIT: One other thing I forgot to mention is that the Sabertooth is designed to operate with 5V control inputs. The raspberry pi GPIO uses 3.3V, so you may run into issues there. It -might- work as is, but you would be better off level-shifting your 3.3V stuff to 5V.
April 17, 2017 at 6:46 am #4142JerryParticipantI have tried this method, “RC low-pass filter circuit to convert PWM signal into an analog voltage”, but I didn’t received proper response from sabertooth. One motor moving very high speed and another motor moving very less speed.
Similar way I have tried with sabertooth in serial mode but there is no positive response.
So return to RC mode, set 1 off, 2 on, 3 on, 4 off, 5 on, 6 off. I will try to write a program in servo style. That may work to solve the problem. But I am not sure, I have a confusion. Can you suggest programmatic changes. If possible kindly provide your contact details. That will help me to interact with you.
If I didn’t use Logic level converter, it will affect Raspberry pi GPIO pins ?
April 17, 2017 at 11:39 am #4145SuperDroidKeymasterThe raspberry pi GPIO operates on 3.3 Volt communication. The Sabertooth calls for 5 Volt communication. It would be in your best interest to implement level shifting in order for your logic voltages to be compatible. If you make this change and it still doesn’t work, then making changes in the software will be the next step.
You can make this setup work in RC mode. However, it going to be better to use serial communication when sending commands to a motor controller with a MCU. As laid out in our last post, you’re going to have noiseless control inputs with a better failsafe with serial.
June 29, 2017 at 1:41 pm #4214Rodd StarrParticipantHi…i am a new user here. As per my knowledge If switch 4 on the Sabertooth is in the ON position, it will enable mixing mode. S1 will act as the drive forward/backwards signal input and S2 will be the turn left/right signal input. With switch 4 OFF, you will have to compute the mixing in order to drive/turn in different directions.
June 29, 2017 at 4:46 pm #4215SuperDroidKeymasterWhen Switch 4 is in the UP position, Mixed mode is selected. In this mode, the R/C signal fed to the S1 input controls the forward/backwards motion of the vehicle. This is usually connected to the throttle channel of a pistol grip transmitter, or the elevator channel of a dual stick transmitter. The R/C signal fed to the S2 input controls the turning of the vehicle. When switch 4 is in the DOWN position, Independent mode is selected. In this mode, the signal fed to the S1 input directly controls Motor 1 (M1A and M1B) and the signal fed to S2 controls Motor 2.
- AuthorPosts
You must be logged in to reply to this topic.