123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- /*
- TMC26XMotorTest.pde - - TMC26X Stepper Tester for Processing
-
- Copyright (c) 2011, Interactive Matter, Marcus Nowotny
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- THE SOFTWARE.
-
- */
-
- Slider constantOffSlider;
- Slider blankTimeSlider;
- Toggle randomOffTimeToggle;
- RadioButton ChopperModeButtons;
- //for constant off time chopeer
- Slider fastDecaySlider;
- Slider sineWaveOffsetSlider;
- Toggle currentComparatorToggle;
- //for spread chopper
- Slider hysteresisStartSlider;
- Slider hysteresisEndSlider;
- Numberbox motorVoltageBox;
- Numberbox motorCurrentBox;
- Numberbox motorResistanceBox;
- Numberbox motorInductanceBox;
-
- RadioButton hysteresisDecrementButtons;
-
- PImage spreadChopperImage;
-
- void setupChooperConfig() {
- //add input fields for the various motor parameters
- motorVoltageBox = controlP5.addNumberbox("motorvoltage",12.0,20,40,100,20);
- motorVoltageBox.setCaptionLabel("Motor Voltage (V)");
- motorVoltageBox.setMultiplier(0.025);
- motorVoltageBox.setMin(0);
- motorVoltageBox.setMax(40.0);
- motorVoltageBox.moveTo(configureTab);
-
- motorCurrentBox = controlP5.addNumberbox("motorcurrent",0.5,140,40,100,20);
- motorCurrentBox.setCaptionLabel("Motor Current (A)");
- motorCurrentBox.setMultiplier(0.025);
- motorCurrentBox.setMin(0.46);
- motorCurrentBox.setMax(1.7);
- motorCurrentBox.moveTo(configureTab);
-
- motorResistanceBox = controlP5.addNumberbox("motorresistance",2,260,40,100,20);
- motorResistanceBox.setCaptionLabel("Motor Resistance (Ohm)");
- motorResistanceBox.setMultiplier(0.1);
- motorResistanceBox.setMin(0);
- motorResistanceBox.setMax(250);
- motorResistanceBox.moveTo(configureTab);
-
- motorInductanceBox = controlP5.addNumberbox("motorinductance",2,380,40,100,20);
- motorInductanceBox.setMultiplier(0.1);
- motorInductanceBox.setMin(0);
- motorInductanceBox.setMax(250);
- motorInductanceBox.setCaptionLabel("Motor Inductance (mH)");
- motorInductanceBox.moveTo(configureTab);
- // add a vertical slider for speed
- constantOffSlider = controlP5.addSlider("constantoff", 1, 15, 1, 20, 80, 400, 20);
- constantOffSlider.setCaptionLabel("Constant Off Time");
- constantOffSlider.setSliderMode(Slider.FIX);
- constantOffSlider.moveTo(configureTab);
-
- blankTimeSlider = controlP5.addSlider("blanktime", 0, 3, 2, 20, 120, 400, 20);
- blankTimeSlider.setCaptionLabel("Blank Time");
- blankTimeSlider.moveTo(configureTab);
-
- hysteresisStartSlider = controlP5.addSlider("hysteresisstart", 0, 8, 2, 20, 160, 400, 20);
- hysteresisStartSlider.setCaptionLabel("Hysteresis Start");
- hysteresisStartSlider.moveTo(configureTab);
-
- hysteresisEndSlider = controlP5.addSlider("hysteresisend", -3, 12, 2, 20, 200, 400, 20);
- hysteresisEndSlider.setCaptionLabel("Hysteresis End");
- hysteresisEndSlider.moveTo(configureTab);
-
- hysteresisDecrementButtons =controlP5.addRadioButton("decrement", 20, 240);
- hysteresisDecrementButtons.addItem("fastest", 0);
- hysteresisDecrementButtons.addItem("fast", 1);
- hysteresisDecrementButtons.addItem("medium", 2);
- hysteresisDecrementButtons.addItem("slow", 3);
- hysteresisDecrementButtons.showBar();
- hysteresisDecrementButtons.moveTo(configureTab);
-
- spreadChopperImage = loadImage("hysteresis.png");
- }
-
- void drawChopper() {
- if (activeTab!=null && configureTab.equals(activeTab)) {
- image(spreadChopperImage, 200, 400);
- }
- }
-
- void constantoff(int theValue) {
- if (!settingStatus) {
- if (theValue>0 && theValue<16) {
- println("Constant off "+theValue);
- sendCommand("cO"+theValue);
- }
- else {
- println("invalid blank time of "+theValue);
- }
- }
- }
-
- void blanktime(int theValue) {
- if (!settingStatus) {
- if (theValue>=0 && theValue<=3) {
- println("blank time "+theValue);
- sendCommand("Cb"+theValue);
- }
- }
- }
-
- void hysteresisstart(int start) {
- if (!settingStatus) {
- if (start>=1 && start<=8) {
- println("hystereis start "+start);
- sendCommand("Cs"+start);
- }
- }
- }
-
- void hysteresisend(int end) {
- if (!settingStatus) {
- if (end>=-3 && end<=12) {
- println("hystereis end "+end);
- sendCommand("Ce"+end);
- }
- }
- }
-
- void setHysteresisDecrement(int theValue) {
- if (!settingStatus) {
- if (theValue>=0 && theValue<=3) {
- println("Hysteresis decrement "+theValue);
- sendCommand("Cd"+theValue);
- }
- else {
- println("cannot set decrement to "+theValue);
- }
- }
- }
-
- void setHystDecrement(int value) {
- if (value>=0 && value<=3) {
- hysteresisDecrementButtons.activate(value);
- }
- else {
- println("this is no proper hysteresis decerement value: "+value);
- }
- }
-
- void motorcurrent(float value) {
- if (activeTab!=null && "default".equals(activeTab.name())) {
- currentSlider.setValue(value);
- }
- }
|