PID control with an H bridge

Hi everyone,
I have been working on a project with labview for the last few months now and I have reached a point where I am in need of some assistance.
Basically, this next part of my project requires me to drive a linear actuator to apply a force to the end of a shaft, with a load cell in between the actuator and shaft, providing me with the actual force applied.
I need to use a PID controller to maintain a constant specified weight onto the end of the shaft, this in itself should be simple but I have an issue with the way the actuator is driven.
The actuator is being driven via an H bridge that has 3 seperate inputs to drive the actuator:
direction = logic high/low 5v high 0v low
break= logic high/low 5v high 0v low
Speed= Pulse width modulation
My plan was to use a basic PID controller to adjust the PWM going into the H-bridge by adjusting its duty cycle between 0.10 (fast) 0.90(slow) and then using basic comparison functions between the set point and process variable to control the logic to direction and break. So for example.....
I want it to apply 5kg onto the end of the shaft
my set point is 5 and the variable is 0 so labview applies a logic high to direction (to go forward) and logic low to break (to let it move) and the PWM is adjusted to zero in on the set point.
I cannot get this to work however and was wondering if there was a better way to do this?
I appreciate that this may seem unclear, so i hope I have explained it well enough!
Many thanks
HCook
Solved!
Go to Solution.

Hello,
Thank you for very much for your reply.
I really should have explained this better, but I only had a few minutes to post my code. I should also mention that Im teaching myself labview, so Im sure I could do this a lot better.
OK, so here is whats happening...
This is just a secttion of my code, as Im not allowed to upload the whole programme.
This section is meant to control the weight being applied onto the end of a shaft that is defined by the user.
By flicking between auto and manual the user can choose between the PID and comparison moving the actuator or themselves manually.
The two express vis that are outputting an analog voltage are to provide the logic to the h bridge.
To give me Proportional control, I have simply used a comparison function to look at the weight on bit i have requested (elsewhere in the programme and hence the local variable) and the actual weight signal from a loadcell being brought into labview from an anolog input. So for example, If i request 2kg then the comparison between the two signals then tells the h bridge to move the actuator to apply more or less wait depending on the signal.
I have got this bit working fine.
Now, the speed with which the actuator needs to move, must be continuosly adjusted to provide a precise adjustment to the weight and I wanted to do this by continuosly adjusting the duty cycle of the PWM through the PID. Thank you for pointing out the loop issue, preventing the PID from passing on the adjustment, I had not spotted this!
I will re build the code and condense it down into a smaller number of loops.
The WOB speed task, which is outputting the PWM to the h bridge keeps telling me that the specified resource is reserved and will not function after my inital run. Does this have anything to do with the PID not working ?
Also, when I run the programme in manual mode, where by I move the actuator manually and adjust the weight based on the load cell signal, I get an error when I adjust the duty cycle. It informs me that the PWM must complete a full cycle before the duty cycle can be adjusted. Now the rate at which im changing the duty cycle manually is no where near the same speed a PID may adjust it and therefore I can see myself having the same problem in auto mode.
Thank you for your help!
Hcook

Similar Messages

  • PID Control,Visual Basic

    Hey,
    Im just wondering if its possible to implement some PID control in Visual Basic and if so how to go about doing it.When i go to components and try and add PID it does leave me for some reason.

    Hi again dazza,
    National Instruments do have the ability to do PID control with VB, more information can be found at the following link:
    http://sine.ni.com/nips/cds/view/p/lang/en/nid/1439
    Regards
    Lilly

  • Level Control with PID Control & Pulse-Width Modulation

    Hi all,
          I have attached my program which I'm having trouble wiring up in the block diagram.... I'm fairly new to labview, but basically I have a level control project with an analog input cistern arm turning a pot for my test tank (configured as DAQ assistant voltage analog i/p) and a pump working off a reservoir (configured as DAQ assistant voltage digital o/p). My electrical side of things is working correctly and I have tested both DAQ assistants I/O's successfully off a basic program, minus the PID & PWM... I found a simple PID control subvi which I think I have wired up correctly, apart from the output variable... I also found a bit of code for PWM using the square waveform vi (far right side of the program) which I have tried to include in the program, but I've been unsuccessful with that. The ideal operation i'm looking for with this project is to be able to enter different values for the setpoint, for the PID to kick in to find that setpoint each time using the PWM to drive the pump, which has a flow rate of 13L/min. I have a manual valve to release water from my test tank which I can set accordingly.
    My questions are;
    - How do I connect the 'output variable' of the PID subvi to my DAQ assistant digital output(both DAQ assistants are set at 1 sample on demand)?
    I have a 'number to boolean array' function, but this gives an error saying that the number of tasks generated are not the same...
    - How do I wire up the PWM bit of code? Do I need to include the 'error in & out' tabs?
    -Am I on the right track with this program or am I way off the mark?!
    Any feedback on this would be greatly appreciated. Thanks for your time,
    Richie
    Attachments:
    PID-RichLevelControl.vi ‏91 KB

    Rich-MechatronicsStudent wrote:My questions are;
    - How do I connect the 'output variable' of the PID subvi to my DAQ assistant digital output(both DAQ assistants are set at 1 sample on demand)?
    I have a 'number to boolean array' function, but this gives an error saying that the number of tasks generated are not the same...
    - How do I wire up the PWM bit of code? Do I need to include the 'error in & out' tabs?
    -Am I on the right track with this program or am I way off the mark?!
    You're a bit off track.  You need the output of the PID to go into the PWM generator, and the output of the PWM to be written to the digital output.  Right now you have the output of the PID connected directly to the Digital Output in a way that won't work, and the PWM generator hanging off the side not really connected to anything.  Also, the PWM generator isn't really going to work since you're generating it at the same frequency as your PID loop runs.  Try a simpler algorithm such as on/off control first and see if that works for your system.

  • Can anyone help with a PID control vi

    Hi
    I am doing a project at the moment and I need to build a temperature chamber. I am using LV 7.1 and I have 4 thermistors being fedback to a daq device. I also have two heaters as part of the chamber but i want to get the thermistors readings and pid control the output to the heaters. I have the program written to get the thermistors readings and average them but im having trouble trying to think how i can pid control the heaters so i am looking for a pid vi. If anyone can help it would be great. Thanks....

    NI sells a control toolkit for LV which includes PID control. You can look for it on this site.
    If you want to write this yourself, you should start with an uninitialized shift register. A USR allows you to keep data from the last time you ran the VI. There is an example of using a USR in the LV Example Finder and you can probably some more information about it in this site. You will also need to measure the time between runs and then probably calculate the derivative between each 2 runs to see how fast you're approaching your setpoint.
    I hope this helps, as a start.
    Try to take over the world!

  • Tank Level Control with PID regulator

    Hello! 
    I found a lot of examples regarding the simulation of a tank - level control with PID regulator. but I still have a dilemma.
    I can't find the transfer function for the process, if you can help me it would be great because I'm stuck here...

    Maybe you could ask some of you classmates?
    LabVIEW Champion . Do more with less code and in less time .

  • I need to design fuzzy controller with pid control .

    hi ,
    I need to design fuzzy controller with pid control . to control   Dc servo motor i have NI DAQ PCI 6251 anyone help me??

    ssaara,
    Along with the shipping examples, here is a link to the PID Control Toolkit User Manual. Fuzzy Logic control is discussed in Part II of the manual, Chapters 5 and 8 are good starting points.
    --Michelle
    Instrument Control R&D
    National Instruments
    Instrument Control
    Machine Vision

  • Peltier control with PID

    Hello,
    I have a Keithley 2400 source-meter, and a Keithley 2010 multimeter. I measure temperature of a water loop with a RTD, and I measure its 4W resisitivity with the K2010.
    I can cool and also heat this water loop via a Peltier heat-pump. The applicable range is -1Amp < current < +1 Amp. So I use the Keithley source-meter to drive the Peltier in this range. Negative current cools the water, positive current heats.
    I have the PID tool-kit with LabView 2011.
    My only question is that, if I give  +-1 as range input to the PID.vi, is it a proper way to implement this task?
    Thanks!
    Solved!
    Go to Solution.

    Hi blokk,
    "ok. so this is not implemented in the Pid toolkit. So when the PID vi using negative output, I have to set the Kc to negative. ... Because it should change the sign of Kc as early as it switches range polarity continuously."
    You don't need to change anything, when the PID control is running. You have to set the Kc once to the correct value, that's it! Kc is describing the PID behaviour in terms of "higher output results in heating up and lower output means cooling mode"...
    "Should I alter the pid.vi inside?"
    Never ever change vi.lib VIs! If you really want to change them (that isn't needed here!), make a copy of the VI and change the copy!
    Best regards,
    GerdW
    CLAD, using 2009SP1 + LV2011SP1 + LV2014SP1 on WinXP+Win7+cRIO
    Kudos are welcome

  • PID control of Counters (PWM)

    Hello everybody!!
    I work on a closed loop PID controlled problem (Labview 8.5) and I have a couple of questions in order to make some progress!
    Firstly, I have to declare that my loop is composed of 2 AI channels (2 accelerometers), 1 AO channel (excitation channel-shaker), and 2 CO (for pulse creation PWM-controllers). The idea is very simple. When the AI (channel 1) value surpass or underpass a predetermined threshold value, then the appropriate CO should be activated in order to apply the necessary control forces and simultaneously to copy my data values of both AI channels in binary style for CPU velocity reasons! BUT, with the PID controller I want to optimize the Duty Cycle value of the pulses!
    My questions are :
    1) Why when I put Kp=Ti=Td=0 ( = run WITHOUT control) I can copy ALL the AI samples and when I start to activate the PID controller (let’s say for only Kp=0.5) I CAN’T copy ALL the AI samples? Where is my fault?
    2) About the PID vi which I use, is it correct or I should use the PID vi for ARRAYS?
    3) And finally, about the Boolean statement just before the Case Structures and the Shift Register, is it ok/necessary?
    I attach two vis, the ReadBinar .vi is used to read my binary files generated in the end of running of the Control.vi.
    Best regards
    Grigorio
    Attachments:
    Control.vi ‏277 KB
    ReadBinar.vi ‏162 KB

    Hello Zach!
    First of all, I want to thank you for your kind interest on my problem!!
    I must describe you the desired process with the Control.vi. There are two AI channels writing down the acceleration of a structure in two different points (for velocity reasons I use Binary Type storage for my data). One AO channel for structure sinusoid excitation (shaker) and two CO channels for controlling two solenoid valves with which I want to control my structure acceleration (minimize it as well and fast as possible)!!
    In order to help the description, let’s ‘cut’ the block diagram of Control.vi into three pieces (Before While Loop – Inside While Loop – After While Loop).
    In Before While Loop section, the main question is about simultaneousness. The DAQmx Start inside the Flat Sequence Structure, do you think that is necessary, ok? I want to run my experiment for 30s and to collect 6000 samples with 200 samples/s. In addition, in the CO DAQmx timing, I have set 200 samples/channel in order to be able to change the duty cycle value because of the conditions inside the While Loop. Do you think that everything in this section works well? 
    Inside the While Loop, firstly in the DAQmx Read, I have set 200 samples per Input Channel, which is also equal to the AI and AO Sampling rate! Before some days I have put there -1 and unfortunately the total written samples were less than 6000!! My main problem is how I can check all the read data without losing run velocity and simultaneous if one sample is >0 then it goes further to the first PID.vi (left solenoid valve) or if that sample is <0 then it goes further to the second PID.vi (right solenoid valve)!! When a sample has gone to a PID.vi, then I want to tune the duty cycle of the controller (PWM control) as well as possible in order to achieve the Setpoint value for the second AI channel. Are all these possible? If not, what do you suggest me?
    In addition I compare the present duty cycle value with the previous one in order to be inside a tolerance value (let’s say 0.1). Moreover, is it correct the Case Structures where I want to share the positive and negative AI samples before going to the respective PID ?
    Finally, After the While Loop, I believe that everything is OK. I just finish all the tasks.
    I have to mention that I work on a PCI-6289 and Labview 8.5.
    With best regards!
     Grigorio
    Attachments:
    Control.vi ‏288 KB
    equal within tolerance.vi ‏9 KB
    ReadBinar.vi ‏163 KB

  • PID control in a windows CE Labview application

    Hi there,
    I want to build an application that will control the temperature in some ovens, using PID control. The application will be running in a controller (or a touch panel computer) with windows CE OS. I have Labview 8.6, PID control toolkit 8.6 and Touch panel module 8.6. The problem is that the PID vi's don't seem to work in touch panel module. 
    Is there any way to implement PID control in a windows CE Labview application?  
    Thanks in advance.
    Solved!
    Go to Solution.

    I think with a timed loop you can run reasonable good timing down to 1 mSecond. I think 1 mSecond is the lower limit for non realtime systems like Windows/windows CE. And if you have the PID toolkit this will supply you with the functions you need. You do not need an extra CE PID toolkit. This because  the touch panel module run under your standard Labview environment. But I do not know if all the functions in the PID tool like fuzzy logic are compatible with CE. Have you also considered Windows Embedded as OS for your module. With windows Embedded you can run standard Labview built exe files
    Both Windows Embedded, and XP Embedded can be trailed
    http://www.microsoft.com/windowsembedded/en-us/products/westandard/default.mspx
    Besides which, my opinion is that Express VIs Carthage must be destroyed deleted
    (Sorry no Labview "brag list" so far)

  • Steps to create vi file for PID control in 8.0 pro without specific PID addons.

    Per my other posts, I am testing a friend's software to see if this is what we would like to use.  I would prefer to use their software for our initial work to help offset the cost of the software.  Problem is their software is 8.0 pro without the extra PID stuff.  I am curious how one gets started creating a custom PID algorithm to be used in series between an input and an output.  I have viewed several tutorials but all seem to simply point at the PID toolkit that is not availalbe to me right now.  I realize it might be more work to create one but probably the only option at this point. 
    To simply the process, lets just compare a single input and output where the software will control the output to obtain to desired input.  in  tutorial, I was following right along until the PID loop was added and that seems to be just a drop and go type of deal in which would rarely apply to a real work application. I am simply trying to learn how PID systems are written into the block diagrams.  
    Hopefully my question makes sense.  

    asdfs wrote:
    Per my other posts, I am testing a friend's software to see if this is what we would like to use.  I would prefer to use their software for our initial work to help offset the cost of the software.  Problem is their software is 8.0 pro without the extra PID stuff.  I am curious how one gets started creating a custom PID algorithm to be used in series between an input and an output.  I have viewed several tutorials but all seem to simply point at the PID toolkit that is not availalbe to me right now.  I realize it might be more work to create one but probably the only option at this point. 
    To simply the process, lets just compare a single input and output where the software will control the output to obtain to desired input.  in  tutorial, I was following right along until the PID loop was added and that seems to be just a drop and go type of deal in which would rarely apply to a real work application. I am simply trying to learn how PID systems are written into the block diagrams.  
    Hopefully my question makes sense.  
    Take a look at the PID Control Toolkit User Manual . It clearly defines the math used and there is absolutely nothing stoping you from writing that code yourself.
    What you will not get by doing it yourself is the auto-tuning as well as all of the supporting and helper sub-VI along with the polymorphic versions that will support arrays of PIDs.
    If you write it yourself and it work good please post up your version for others to review or use.
    Have fun,
    Ben
    Ben Rayner
    I am currently active on.. MainStream Preppers
    Rayner's Ridge is under construction

  • How to apply notch filter in the PID control

    Dear all,
    I am using PID control in my positioning stage but the output is every noisy with some fixed frequencies(30,50,150Hz). I want to add a notch filter to take off those noise. However, I do not know how to apply the notch filter to the PID module. Could anyone tell me how and show me example if you have?
    Thanks
    best
    Attachments:
    PID_notch filter.png ‏21 KB
    PID_notch filter.png ‏21 KB

    Hi LYnn,
    I am sorry for my late reply. My stage is driven by a voice coil actuator (VCA). The VCA as a resolution of 1 um and range of 6 mm. The NF of the stage does shift when the load is changing. Do you have any advice for controlling such kind of stage?
    BTW, as far as I see, the control frequency is determined in the DAQ Assistant settings and its value is equal to "Sampling rate"/"Samples to read", am I right?
    Thanks
    best
    Attachments:
    VCA stage.png ‏160 KB

  • Looking for a reasonable looptime for my PID controler!!

    Good morning!
    I am trying to do a PID control of a combustionchamber.  The setpoint and process value are the output  temperature, the value to  operate  is  the massstream of  the fuel.  My  in- and output datas are refreshed every 50 ms.  My problem is...
    What is a reasonable looptime for my PID control? 
    Do you have any ideas???
    thanks RT

    My group has used the Sun Electronics PC-1000 Process Controller for some time, with good results. There are some instructions in the beginning of this Engineering Note (pdf link) that discribe how to iteratively determine the PID coefficients for a linear system. I'm not a mathematician, so I can't vouch for whole document, but their somewhat antiquated instruments DO work
    Now is the right time to use %^<%Y-%m-%dT%H:%M:%S%3uZ>T
    If you don't hate time zones, you're not a real programmer.
    "You are what you don't automate"
    Inplaceness is synonymous with insidiousness

  • How can I make and wire reffercence signals(ramp,sine,square) to excite and evaluate the behaviour of the system wih PID control?

    Dear all,
    I am Tri, I am a beginer with LV program. Actually I used LV for my reasearch, I had tried wiht very simple thing but the problem arise because I am not familiar with LA. Why I know that problem is simple because I compare with MatLab that I had somtime used before.
    I make a loop of PID control, It worked properly but I don't know how to make a refference signal to wire to the loop for excitating to evaluate the behaviour of the system. Please give me your help.
    Thanks

    Hi Tri,
          I've employed the "simple PID.vi" without a problem, but your example is more complex.  I think you use a Function generator to modulate DAQ inputs?
    Perhaps someone else will be able to infer your intention and identify a flaw in the logic.
    In case someone else wants to run your VI, it may help to build/attach an .llb (some sub-VIs are needed by the VI you atached.)
    To build the .llb, save your VI with Development Distribution options (Alt-F,Alt-W) and attach the .LLB
    1) \File\Save with Options
    2) select Development Distribution
    3) Save
    4) choose "New VI Library"
    But first, It would be helpful to us if you clean-up the code - straighten wire-paths, minimize bends in wires, and try to avoid "tall" diagrams.  Scrolling diagrams up and down is "bad form".  If scrolling is necessary, left&right is preferrable!
    Cheers.
    (and, for the record: in my previous post, Exitation would be wired to "Process Variable", Not "Set Point" (ouch!))
    When they give imbeciles handicap-parking, I won't have so far to walk!

  • Toolkit for feedback system? Motion; PID; Control/Simulation???

    Hi, I have to develop/program an organ bath system - a feedback system mimicking real sinusoidal breathing oscillations (shown in attached images). I have NI Labview 8.5, NI-Motion 7.6, a linear motor (M-235 DC-Mike actuator), an MID-7654 Servo Power Motor Drive and a pressure transducer. I believe I will need to control the PID controller and am aware of the PID Control Toolkit as well as the Control Design and Simulation Toolkit for NI Labview. However, is it possible to control the system using the NI-Motion software I have at the moment? If not, do I have to purchase both the PID and Control/Simulation Toolkit or just one? Thanks in advance...
    Attachments:
    feedback design1.JPG ‏25 KB
    feedback system1.JPG ‏42 KB

    Dear Garry,
    Do you have a motion controller to interface the MID-7654 to your
    computer and LabVIEW? This would be the PCI-734x or PCI-735x. If you
    do, I believe that you could implement your application with LabVIEW
    and NI-Motion. You could do so by using the analog feedback feature for
    the control loops for each axis. Then, you could specify the optimal
    sinusoidal moves/pressure patterns that mimic real breathing patterns.
    The analog feedback from your pressure transducer will be used during
    the move(s) to maintain the pressure that you want.
    Please see Chapter 13 here for more details:
    NI-Motion User Manual
    http://www.ni.com/pdf/manuals/371242c.pdf
    Here is also a good discussion forum post on Analog feedback:
    Can i use NI-7358 to implement a hybrid position force/torque control system?
    http://forums.ni.com/ni/board/message?board.id=240&thread.id=2976&view=by_date_ascending&page=1
    I believe that the above option would work for you, and you would not
    have to use the Control Design and Simulation Module or the PID
    Toolkit. Please let me know if you have any additional questions. I
    haven't actually set up a system with analog feedback from a pressure
    transducer before, but I believe that the above would be a very viable
    option.
    Best Regards,
    ~Nate

  • Why do I get this error when running the PID Control-Single Channel.vi: "Requested value is not a supported value for this property."

    Error -200077 occurred at Property Node DAQmx Timing (arg 3) in DAQmx Timing (Sample Clock).vi:1->PID Control-Single Channel.vi
    Requested value is not a supported value for this property.
    Property: SampQuant.SampMode
    You Have Requested: Hardware Timed Single Point
    You Can Select: Finite Samples, Continuous Samples
    Author: Pcorcs
    Attachments:
    PID Control-Single Channel.vi ‏53 KB

    Actually I have already tried a few things you suggested and got as far as the DAQmx Write vi. The error at the DAQmx was a buffer error indicating i needed to set it to 2 instead of the default of 1. Tried using the DAQmx Input and Output Buffer vi to change buffer, with no luck.
    Attachments:
    PID Control-Single Channel.vi ‏53 KB

Maybe you are looking for

  • Date not coming correctly in date field

    Hi all I have added a field on a screen of type dats (8 char) So if user gives date as 10/11/2009 he can only update the field with 10/11/09 If i change the length to 10 then if user gives date in a wrong format also like abcdefg then also it will be

  • How to publish all the services in sicf

    Dear All , I have installed SRM 5.0 (ABAP+JAVA) . I am new to SRM, please help me how to publich all the servers which are in ' sicf ' Also please let me know whether any exta steps need to do after SRM instalation. Is there any specific SAP doc. for

  • Creating a Record structure and passing this to a Procedure

    Hi there I have a query please. Can I create a Record Structure composed of fields from different tables and then pass this record structure to a procedure.? ie Create Procedure ProcedureTest(empRec empStructCreated%ROWTYPE) where empStructCreated is

  • Blank panel in Photoshop CS5

    people, please help... http://incomum.mine.nu/10-06-17asdf/Capturar.JPG When I load the panel, it comes blank,

  • Internal error using XML function in procedures

    Hi all, I use the XML function in a stored procedures but when i compile these i have this error PLS-00801: internal error (74806). The strangeness is that the single instruction launched from sql plus type SELECT XMLElement("? xml",xmlattributes('1.